我遇到了Android gradle插件(19.0.3)的最新更新問題!我無法讓我們的測試在我們的CI服務器上運行在一個庫項目上。要麼我做錯了什麼,要麼是新版本打破了測試庫項目。Gradle connectedAndroidTest返回錯誤
我試圖運行命令行測試:
./gradlew :libproject:connectedAndroidTest
當我在我的本地機器上運行這個測試完美運行。
然而,當我我們的CI服務器上運行它,我得到這樣的警告:
WARNING: support for libraries with same package name is deprecated and will be removed in 1.0
然後我得到這個錯誤:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/domain/lib/BuildConfig;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
at com.android.dx.command.dexer.Main.run(Main.java:230)
at com.android.dx.command.dexer.Main.main(Main.java:199)
at com.android.dx.command.Main.main(Main.java:103)
我認爲這可能是因爲testPackageName是與庫包相同。
但是,如果我更改testPackageName,則不會發現測試,因爲生成的清單中的<instrumentation>
標記不正確。 androidTargetPackage指向不再與庫匹配的testPackageName。有沒有辦法在生成的AndroidManifest.xml中設置我缺少的<manifest> package
?該docs don't seem to think it is required.
建立兩個子項目中生成兩個文件BuildConfig.java /建築/來源是相同的兩臺機器:
$ find source -name "BuildConfig.java"
source/buildConfig/debug/com/domain/lib/BuildConfig.java
source/buildConfig/test/debug/com/domain/lib/BuildConfig.java
對我的生活中,我想不通爲什麼它的作品在我的本地機器,而不是我們的CI服務器。搖籃的版本是一樣的,除了Java版本:
./gradlew --version
------------------------------------------------------------
Gradle 1.10
------------------------------------------------------------
Build time: 2013-12-17 09:28:15 UTC
Build number: none
Revision: 36ced393628875ff15575fa03d16c1349ffe8bb6
Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.9.2 compiled on July 8 2013
Ivy: 2.2.0
JVM: 1.7.0_25 (Oracle Corporation 23.25-b01)
OS: Mac OS X 10.8.5 x86_64
$ ./gradlew --version
------------------------------------------------------------
Gradle 1.10
------------------------------------------------------------
Build time: 2013-12-17 09:28:15 UTC
Build number: none
Revision: 36ced393628875ff15575fa03d16c1349ffe8bb6
Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.9.2 compiled on July 8 2013
Ivy: 2.2.0
JVM: 1.7.0_45 (Oracle Corporation 24.45-b08)
OS: Mac OS X 10.8.5 x86_64
在回購的根目錄下的文件的build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
}
}
allprojects {
repositories {
mavenCentral()
}
}
在子項目的build.gradle:
apply plugin: 'android-library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':testrunner')
// Test Dependencies
androidTestCompile 'com.google.dexmaker:dexmaker:1.0',
'com.google.dexmaker:dexmaker-mockito:1.0',
'org.mockito:mockito-core:1.9.5',
'com.google.mockwebserver:mockwebserver:20130706'
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.3"
enforceUniquePackageName=false
defaultConfig {
testPackageName "com.domain.lib"
testInstrumentationRunner "com.domain.testrunner.InstrumentationTestRunner"
testHandleProfiling true
testFunctionalTest true
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
}
我也在兩臺機器上都做了android update -u -a
,以確保工具完全相同,並且安裝了所有可能的東西。
我在我的智慧結束這一個!我無法弄清楚什麼是不同的。幫助我堆棧溢出,你是我唯一的希望!
使用Eclipse下的當前兩個項目設置允許在同一個包中包含測試和庫。 當我取出testPackageName時,''標記上的targetPackage被設置爲「com.domain.lib.test」,並且沒有找到任何測試。測試不在該包中。測試必須使用新的gradle構建包含在com.domain.lib.test包中嗎? –
沒有測試不必在該包中找到。 –
我誤解了測試未找到,因爲gradle正在生成libproject/build/reports,並顯示零測試。使用showVersion http://stackoverflow.com/questions/18098231/how-can-i-check-which-gradle-android-plugin-version-is-used-in-my-project我看到我的開發機器在0.9。 0和CI在0.9.1上,因此行爲上的差異。 –