Android dex异常:多个dex文件

Android dex异常:多个dex文件,android,android-studio,google-drive-api,android-gradle-plugin,dex,Android,Android Studio,Google Drive Api,Android Gradle Plugin,Dex,好的,现在我正在制作一个Android应用程序,它利用了Google Sheets API版本3.0和Drive API Client Library for Java,我需要该应用程序从用户驱动器帐户读取电子表格并对其进行编辑。在文档之后,我在我的/lib文件夹(Android Studio 1.1)中包含了以下JAR{ 编译文件树(包括:['*.jar'],目录:“libs”) 编译'com.android.support:appcompat-v7:21.0.3' 编译'com.google

好的,现在我正在制作一个Android应用程序,它利用了Google Sheets API版本3.0Drive API Client Library for Java,我需要该应用程序从用户驱动器帐户读取电子表格并对其进行编辑。在文档之后,我在我的/lib文件夹(Android Studio 1.1)中包含了以下JAR{ 编译文件树(包括:['*.jar'],目录:“libs”) 编译'com.android.support:appcompat-v7:21.0.3' 编译'com.google.android.gms:play services:6.5.87' 编译文件('libs/google-api-client-1.19.1.jar') 编译文件('libs/google-api-client-android-1.19.1.jar') 编译文件('libs/google-api-services-drive-v2-rev158-1.19.1.jar') 编译文件('libs/google-http-client-1.19.0.jar') 编译文件('libs/google-http-client-android-1.19.0.jar') 编译文件('libs/google-http-client-gson-1.19.0.jar') 编译文件('libs/google-oauth-client-1.19.0.jar') 编译文件('libs/gson-2.1.jar') 编译文件('libs/jackson-core-2.1.3.jar') 编译文件('libs/jackson-core-asl-1.9.11.jar') 编译文件('libs/jsr305-1.3.9.jar') 编译文件('libs/protobuf-java-2.4.1.jar') 编译文件('libs/mail.jar') 编译文件('libs/jsr305.jar') 编译文件('libs/guava-11.0.2.jar') 编译文件('libs/gdata-spreadsheet-meta-3.0.jar') 编译文件('libs/gdata-spreadsheet-3.0.jar') 编译文件('libs/gdata-docs-meta-3.0.jar') 编译文件('libs/gdata-docs-3.0.jar') 编译文件('libs/gdata-core-1.0.jar') 编译文件('libs/gdata-client-meta-1.0.jar') 编译文件('libs/gdata-client-1.0.jar') 编译文件('libs/additionnal.jar') 编译文件('libs/activation.jar') }

当我输入我的代码时,一切正常,一切都被适当地导入,但当我运行我的应用程序时,我得到了这个结果。

`What went wrong:
Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    C:\Users\Ricardo\AppData\Local\Android\sdk\build-tools\21.1.2\dx.bat --dex --output C:\Users\Ricardo\Google Drive\Development\Android\Updated\Private\Google_Fiasco\MyApplication\app\build\intermediates\dex\debug --input-list=C:\Users\Ricardo\Google Drive\Development\Android\Updated\Private\Google_Fiasco\MyApplication\app\build\intermediates\tmp\dex\debug\inputList.txt
Error Code:
    2
Output:

    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dex.DexException: Multiple dex files define Ljavax/annotation/CheckForNull;
        at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
        at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
        at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
        at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
        at com.android.dx.command.dexer.Main.run(Main.java:246)
        at com.android.dx.command.dexer.Main.main(Main.java:215)
        at com.android.dx.command.Main.main(Main.java:106)
e`<br>
`出了什么问题:
任务“:app:dexDebug”的执行失败。
>com.android.ide.common.internal.LoggedErrorException:无法运行命令:
C:\Users\Ricardo\AppData\Local\Android\sdk\build tools\21.1.2\dx.bat--dex--output C:\Users\Ricardo\Google Drive\Development\Android\Updated\Private\Google\u Fiasco\MyApplication\app\build\mediates\dex\debug--input list=C:\Users\Ricardo\GoogleDrive\Development\Android\Updated\Private\Google\u Fiasco\MyApplication\app\build\intermediates\tmp\dex\debug\inputList.txt
错误代码:
2.
输出:
意外的顶级异常:
com.android.dex.DexException:多个dex文件定义Ljavax/annotation/CheckForNull;
在com.android.dx.merge.dexmmerge.readSortableTypes上(dexmmerge.java:596)
在com.android.dx.merge.dexmerge.getSortedTypes上(dexmerge.java:554)
位于com.android.dx.merge.dexmerge.mergeClassDefs(dexmerge.java:535)
位于com.android.dx.merge.dexmerge.mergeDexes(dexmerge.java:171)
位于com.android.dx.merge.dexmmerge.merge(dexmmerge.java:189)
位于com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
位于com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
位于com.android.dx.command.dexer.Main.run(Main.java:246)
位于com.android.dx.command.dexer.Main.Main(Main.java:215)
位于com.android.dx.command.Main.Main(Main.java:106)
e`
现在需要注意的是,当我创建两个独立的项目时,一个实现电子表格API,另一个实现驱动器API,不会出现错误。只有当我在同一个项目中实现两个API时,即合并两个库中的JAR时,才会发生错误。在修补jar之后,我发现只有当
jsr305.jar
&
jsr305-1.3.9.jar
都包含在内时才会发生错误。查看这两个JAR,我发现它们都有
CheckForNull.java
文件,错误消息
中引用的文件多个dex文件定义了Ljavax/annotation/CheckForNull

所以我的问题是:如何解决这个错误?我想我必须在依赖项中排除它?请提供准确的说明,并解释解决方案的作用。还有最后一件事简单地将jar文件放在我的/lib文件夹和将其添加到build.gradle中的依赖项之间有什么区别?它似乎不会影响任何东西。 删除其中一个jsr.jat文件的结果如下:
意外的顶级异常:
com.android.dex.DexIndexOverflowException:方法ID不在[0,0xffff]:65536中
位于com.android.dx.merge.dexmerge$6.updateIndex(dexmerge.java:502)
在com.android.dx.merge.dexmerge$idmerge.mergeSorted(dexmerge.java:277)
位于com.android.dx.merge.dexmerge.mergeMethodId(dexmerge.java:491)
位于com.android.dx.merge.dexmerge.mergeDexes(dexmerge.java:168)
位于com.android.dx.merge.dexmmerge.merge(dexmmerge.java:189)
位于com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
位于com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
位于com.android.dx.command.dexer.Main.run(Main.java:246)
位于com.android.dx.command.dexer.Main.Main(Main.java:215)
位于com.android.dx.command.Main.Main(Main.java:106)

只需清理项目并重新构建。。。当我在错误文本中看到“dex”一词时,我就知道我的代码与错误无关。这个错误是由于在项目中引用了太多方法造成的


一般来说,这意味着您需要删除未使用的库或使用
proguard
,即使在调试构建时也是如此,以减少引用的方法数量。您也可以使用文章中提到的多索引方法,但这会使您的项目更加复杂。

我有一个
react native
项目,它使用应用程序的
构建。gradle

def enableProguardInReleaseBuilds = false

...

buildTypes {
    release {
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }
}
enableProguardInReleaseBuilds
设置为
true
对我来说很有效:

def enableProguardInReleaseBuilds = true

你真的需要两个
jsr吗