Articles of android gradle

我们如何在Android库模块中inheritance测试类?

我有一个带有两个库模块的Android Studio项目: foo-module和bar-module 。 每个都实现一个库, foo-module根据foo-module定义策略接口和bar-module foo-module并实现这样的策略。 foo-module有测试测试( foo-module/src/androidTest/ )来测试其核心代码,使用存根策略实现,而bar-module应该有自己的测试测试。 我在foo-module/src/androidTest/中定义了一个AbstractTests类,它完成了大部分实际测试。 我还在foo-module/src/androidTest/中有一个StubTests类,它扩展了AbstractTests并实现了必要的abstract方法来完成测试用例(提供策略的实现等)。 一切都很好。 在bar-module/src/androidTest/ ,我创建了一个BarStrategyTests类,用于镜像StubTests ,但提供了在bar-module实现的策略。 但是, BarStrategyTests看不到AbstractTests ,即使我在build.gradle文件中有compile project(‘:foo-module’) ,并且bar-module的主(非测试)类可以正常使用(非)测试foo-module类。 IOW,虽然project()依赖项处理常规代码,但它不处理androidTest/代码。 我得到“错误:包com.commonsware.foo.test不存在”。 我也尝试添加androidTestCompile project(‘:foo-module’) ,结果相同。 在模块之间共享仪器测试代码的方法是什么? 暂时,我可以克隆AbstractTests ,但这不是一个很好的长期解决方案。 这个问题涵盖了普通Java的类似基础。 有没有人在一个答案中尝试过这些选项并让他们为Android仪器测试工作? 第一个选项(将常用测试代码移动到另一个模块中作为常规非测试代码)似乎是合理的,但我不知道其他两个是否可以与com.android.library插件而不是java插件一起使用。

使用gradle的Android仅测试权限

我运行./gradlew connectedAndroidTest ,我需要我的测试APK才能拥有一个不应该在任何非测试APK(调试,发布)的权限。 我已经创建了一个允许的清单: 然后我将此清单复制到src/androidTest目录,因为gradle android插件的发布说明提示: 0.13.0(2014/09/18)需要Gradle 2.1现在可以为测试应用程序提供清单(src / androidTest / AndroidManifest.xml) 但是,在我的连接测试期间不会应用权限。 如果我创建一个src/debug目录并在那里移动该清单 – 在连接测试期间正确应用权限(但在常规调试版本中也是如此,这是不可取的)。 我做错了什么或有错误吗?

在不一致的位置观察到包ID“build-tools; 20.0.0”

./gradlew –parallel :app:assembleDebugTest 当我在android studio终端上运行命令时出现此错误。 错误并行执行是一个孵化function。 在不一致的位置’sdk / build-tools / android-4.4W’中观察到包id’build-tools; 20.0.0’(预期’sdk / build-tools / 20.0.0’) Gradle文件应用插件:’com.android.application’ android { compileSdkVersion 22 buildToolsVersion ‘23.0.2’ packagingOptions { exclude ‘LICENSE.txt’ } defaultConfig { applicationId “package” minSdkVersion 15 targetSdkVersion 22 versionCode 1 versionName “1.0” testApplicationId “package.test” testInstrumentationRunner “package.test.Instrumentation” } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } […]

将productFlavor添加到实验性Android gradle插件库中

我有一个使用实验性gradle插件的项目,即0.2.0 。 当我没有productFlavor ,我可以在Android Studio中完美地集成库模块,一切都很完美。 但是当库有productFlavor ,我的主项目找不到库类。 此修复程序似乎不适用于实验性gradle插件。 有没有人知道如何使用新插件制作口味? 图书馆: android.productFlavor { create (‘flavor’) { … } } 项目: … dependencies { compile project(‘:mylibrary’) }

为什么Android支持库版本22不可用?

今天我注意到Android API 22可用,所以我将我的应用程序的目标SDK更改为22.当我这样做时,Gradle开始抱怨支持库的版本低于目标SDK版本。 我查看了支持库版本链接 ,它确实显示“v4支持库”和“v7 appcompat库”的版本22已经发布。 所以,我在build.gradle文件中提升了他们的版本。 然后Gradle建议我安装“Android Support Repository”。 我安装了它,但我又安装了它; 而Gradle继续抱怨。 当我检查${android_home}/extras/android/m2repository/support-v4它确实没有22.0.0版本的文件夹。 我还直接打开了支持存储库安装程序使用的链接https://dl.google.com/android/repository/addon.xml ,它确实没有列出版本22库! 这有什么不对?

在Jenkins上构建Android Studio项目? android.compileSdkVersion丢失了

我正在尝试建立我的第一个Android项目来构建Jenkins。 我正在使用Gradle插件的1.24版本运行Jenkins 1.6.2。 在Windows 7 Professional SP1上运行。 我已经在我的构建机器上安装了Android Studio和Java7 JDK,并且通过Android Studio或从命令行运行gradlew.bat时,该软件的签出版本构建得很好。 但我无法在Jenkins工作中使Invoke Gradle脚本构建任务正常工作。 配置项目页面上有一对单选按钮: 调用Gradle 使用Gradle Wrapper 如果我选择“Invoke Gradle”,我会被要求选择“Gradle Version”,这是我在Configure System中设置的。 我创建了一个gradle安装,GRADLE_HOME设置为“D:\ Program Files \ Android Studio \ gradle \ gradle-2.2.1”。 这给了我一个警告,“D:\ Program Files \ Android Studio \ gradle \ gradle-2.2.1不是Jenkins主机上的目录….” 当我运行构建时,我收到错误“无法检索Gradle可执行文件”。 这可能与抱怨该目录的gradle插件有关。 但目录是正确的。 我用’/’而不是’\’尝试过它,它没有任何区别。 由于那不起作用,我尝试了另一种选择,“使用Gradle Wrapper”。 有一个checkbox:“From Root Build Script Dir”。 无论我是否检查它,我得到“java.lang.IllegalArgumentException:android.compileSdkVersion is missing!” […]

Android Studio 2.3更新无法打开应用

我最近将Android Studio更新为2.3。 当我点击即时运行按钮时,它会编译应用程序,但不会在Android设备上打开应用程序。 甚至在此之后仍未启用“热插拔”,它显示“无活动’应用’启动”。 知道我可能做错了什么。 我尝试创建一个新项目,但也存在此错误。 我收到以下错误: Error while executing: am startservice com.example/com.android.tools.fd.runtime.InstantRunService Starting service: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example/com.android.tools.fd.runtime.InstantRunService } Error: Not found; no service started.

在build.gradle中使用CPU ABI拆分时,不考虑Android产品风格

我想根据http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits基于CPU ABI进行APK拆分,但是我想将APK拆分为一个某些产品的味道。 所以我的build.gradle文件具有以下产品风格plain和market 。 实际上我希望在建立market风味时执行APK拆分。 android { productFlavors { plain { } market { splits { abi { enable true reset() include ‘armeabi’, ‘armeabi-v7a’, ‘x86’, ‘mips’ universalApk true } } } } } 但是,当我调用gradle assemblePlainDebug和assembleMarketDebug ,它们都会生成多个APK。 上面的配置有问题吗? 我正在使用com.android.tools.build:gradle:1.2.3 。

Android Gradle将外部库和嵌套外部库添加到项目中

如何将外部库和嵌套外部库添加到android项目? 我的项目结构(不允许更改) 应用/ 应用1 / 的build.gradle settings.gradle 库/ LIBRARY1 / build.grade settings.gradle library2 / build.grade settings.gradle library3 / build.grade settings.gradle library4 / build.grade settings.gradle APP1 应用1 /的build.gradle buildscript { … } apply plugin: ‘android’ dependencies { compile fileTree(dir: ‘libs’, include: ‘*.jar’) compile project(‘:..:libraries:library1’) compile project(‘:..:libraries:library2’) compile project(‘:..:libraries:library3’) compile project(‘:..:libraries:library4’) } android { … } App1不直接依赖于library3或library4 […]

从Android Studio gradle构建访问环境variables

在我的Android Gradle构建中,我需要访问我从.bash.profile设置的环境variables。 当我从命令行构建时,它工作正常 – Gradle脚本可以看到所有variables。 但是,当我尝试从Android Studio运行构建时 – 我不再拥有环境variables了。 以下是我所面对的大致情况: 1)通过~/.bash.profile设置自定义环境variables: export MY_CUSTOM_VAR=’Hello World’ 2)在build.gradle创建打印此环境variables的任务: task printVar << { println System.getenv("MY_CUSTOM_VAR") } 3)从命令行执行printVar 。 输出正确 – 设置了envvariables: 输出: Hello World 4)从Android Studio执行printVar 。 未设置环境variables。 输出为空 常识告诉我,通过export MY_CUSTOM_VAR=’Hello World’我只是让这个variables可用于shell进程(及其subprocess)。 如果我从命令行启动我的Android Studio(这样它将inheritance我的环境),这可能会有效。 但是自从我从Dock启动Android Studio(顺便说一句,我在Mac上) – 它有自己的环境,对我的~/.bash.profile 。 有什么办法可以将自定义环境variables填充到Android Studio吗?