当我使用了android-maven-plugin
搭建有效的开发和构建环境时,全新的Gradle开始在Android领域崭露头角。由于不熟悉Groovy语言,且android-gradle插件几乎和OS本身一样分散,我遇到了一些问题,尤其是在构建带有flavours和我们的伙伴Robolectric的库项目方面。
简短版本
当我遇到gradle错误时,我很困惑下一步该怎么做。
Cannot add a SourceSet with name 'testDebug' as a SourceSet with that name already exists.
错误来自于在库中使用了
productFlavours
(即迁移到0.9.2 Android构建系统),而最近由Robolectric团队从Jake的创建中分叉出的gradle-android-test-plugin
(请参见此处)。我已经跟踪了所有线索,几乎耗尽了所有力气,并报告说,在我的库gradle文件中存在'android-test'
插件会使事情变得错综复杂。
更详细的版本
这是缩略的应用程序build.gradle
文件,保留了相关信息;apply plugin: 'android-library'
apply plugin: 'android-test'
...
android {
compileSdkVersion 19
buildToolsVersion '19.0.3'
defaultConfig {
minSdkVersion 18
targetSdkVersion 19
versionCode buildNumber().toInteger()
versionName "1.0.0"
}
productFlavors {
estimote {
dependencies {
compile '<flavour specific dependency>'
}
}
radius {
dependencies {
compile '<flavour specific dependency>'
}
}
}
}
...
dependencies {
compile 'com.squareup.dagger:dagger:1.2.1'
compile 'com.squareup.dagger:dagger-compiler:1.2.1'
compile 'com.google.code.gson:gson:2.2.+'
// Testing dependencies
androidTestCompile 'org.mockito:mockito-core:1.9.5'
androidTestCompile 'com.squareup:fest-android:1.0.7'
androidTestCompile 'org.hamcrest:hamcrest-all:1.3'
androidTestCompile 'org.robolectric:robolectric:2.2'
androidTestCompile 'junit:junit:4.11'
}
这里是简化的根 build.gradle
文件。
buildscript {
repositories {
mavenLocal()
mavenCentral()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.2'
classpath 'org.robolectric.gradle:gradle-android-test-plugin:0.9.+'
}
}
allprojects {
repositories {
mavenLocal()
mavenCentral()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
}
}
如果您已经看到了页面底部,请给自己一个鼓励。现在,你们中的一些细心的人可能已经注意到了
sourceSets
重定向命令的遗漏问题。sourceSets {
androidTest {
setRoot('src/test')
}
}
在纠正了最初的错误之后,这些代码行需要重新启用,以通知Gradle项目的结构。该项目的结构是标准的,看起来像这样;
- project_name
+ gradle
- lib
+ flavour1
+ flavour2
- main
+ java
- test
+ java
build.gradle
build.gradle
gradle.properties
settings.gradle
使用了哪些工具
该应用程序使用 gradle-1.10-all
,0.9.2 android-gradle
插件和 0.9.+ gradle-android-test-plugin
。
问题
如何设置/更改项目以便在带有 Flavor 的库上实现 Robolectric 测试?这是否已经可行了?