Android仪器测试dexing错误

时间:2016-02-15 10:09:27

标签: android android-gradle dex android-databinding

我正在尝试使用Espresso进行一些仪器测试,但是当我编译测试时,gradle会返回错误:

  

错误:Gradle:将字节码转换为dex时出错:   原因:com.android.dex.DexException:多个dex文件定义了Landroid / databinding / DataBindingComponent;

我认为存在一些依赖性错误并列出了这样的依赖关系:
.\gradlew app:dependencies

有一个奇怪的事情:我使用的是数据绑定版本1.0-rc4,但在列出的依赖项中有1.0-rc3:

default - Configuration for default artifacts.
+--- com.android.databinding:library:1.0-rc3                                     
|    +--- com.android.databinding:baseLibrary:1.0-rc3
|    \--- com.android.support:support-v4:21.0.3 -> 23.1.1
|         \--- com.android.support:support-annotations:23.1.1
+--- com.android.databinding:adapters:1.0-rc3
|    \--- com.android.databinding:library:1.0-rc3 (*)
+--- com.android.support:appcompat-v7:23.1.1
|    \--- com.android.support:support-v4:23.1.1 (*)
+--- com.android.support:recyclerview-v7:23.1.1
|    +--- com.android.support:support-annotations:23.1.1
|    \--- com.android.support:support-v4:23.1.1 (*)
+--- com.google.dagger:dagger:2.0    
|    \--- javax.inject:javax.inject:1
\--- com.trello:rxlifecycle-components:0.4.0
     +--- com.trello:rxlifecycle:0.4.0
     |    +--- com.jakewharton.rxbinding:rxbinding:0.3.0
     |    |    +--- com.android.support:support-annotations:23.1.0 -> 23.1.1
     |    |    \--- io.reactivex:rxjava:1.0.14 -> 1.0.16
     |    \--- io.reactivex:rxjava:1.0.16
     +--- com.android.support:appcompat-v7:23.1.1 (*)
     \--- io.reactivex:rxjava:1.0.16 

provided - Classpath for only compiling the main sources.
+--- com.android.databinding:compiler:1.0-rc4                                     
|    \--- com.android.databinding:baseLibrary:1.0-rc4
\--- javax.annotation:javax.annotation-api:1.2

这个1.0-rc3来自哪里?没有这样的字符串" rc3"在我的整个项目中(生成的dex-cache文件除外)。

UPD:
我认为这是一个android gradle-plugin问题,因为相同的代码适用于gradle 1.5但是使用gradle 2.0.0-beta2和2.0.0-beta4失败。
UPD2:
解决了这个问题。
项目相对较旧,android-databinding插件自gradle 1.5.0-beta1起成为dataBinding { enabled = true } 插件 现在要启用数据绑定,您应该只添加

android{}

build.gradle部分。

因此,如果您遇到此类问题,请务必从apply plugin: 'com.android.databinding'文件中删除这些字符串:
1)classpath 'com.android.databinding:dataBinder:1.0-rc4'
2)apt 'com.android.databinding:compiler:1.0-rc4'
3)<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" factory="com.xxx.xxx.XXFactory" ... />

1 个答案:

答案 0 :(得分:1)

解决了这个问题。
项目相对较旧,android-databinding插件自gradle 1.5.0-beta1起成为dataBinding { enabled = true } 插件 现在要启用数据绑定,您应该只添加

android{}

build.gradle部分。

因此,如果您遇到此类问题,请务必从apply plugin: 'com.android.databinding'文件中删除这些字符串:
1)classpath 'com.android.databinding:dataBinder:1.0-rc4'
2)apt 'com.android.databinding:compiler:1.0-rc4'
3)TimeSpan timeInDays= new TimeSpan(2,8,8,8);