DexException:多个 dex 文件

DexException: Multiple dex files

好的,目前我正在制作一个 Android 应用程序,它使用 Google Sheets API 版本 3.0Drive API Java 的客户端库,我需要应用程序从用户驾驶帐户并对其进行编辑。按照文档,我在我的 /lib 文件夹中包含了以下 jars(Android Studio 1.1).
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:21.0.3' compile 'com.google.android.gms:play-services:6.5.87' compile files('libs/google-api-client-1.19.1.jar') compile files('libs/google-api-client-android-1.19.1.jar') compile files('libs/google-api-services-drive-v2-rev158-1.19.1.jar') compile files('libs/google-http-client-1.19.0.jar') compile files('libs/google-http-client-android-1.19.0.jar') compile files('libs/google-http-client-gson-1.19.0.jar') compile files('libs/google-oauth-client-1.19.0.jar') compile files('libs/gson-2.1.jar') compile files('libs/jackson-core-2.1.3.jar') compile files('libs/jackson-core-asl-1.9.11.jar') compile files('libs/jsr305-1.3.9.jar') compile files('libs/protobuf-java-2.4.1.jar') compile files('libs/mail.jar') compile files('libs/jsr305.jar') compile files('libs/guava-11.0.2.jar') compile files('libs/gdata-spreadsheet-meta-3.0.jar') compile files('libs/gdata-spreadsheet-3.0.jar') compile files('libs/gdata-docs-meta-3.0.jar') compile files('libs/gdata-docs-3.0.jar') compile files('libs/gdata-core-1.0.jar') compile files('libs/gdata-client-meta-1.0.jar') compile files('libs/gdata-client-1.0.jar') compile files('libs/additionnal.jar') compile files('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.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>

现在有几点需要注意,当我制作两个单独的项目时,一个实现电子表格 API 另一个实现驱动器 API 没有发生错误。只有当我在同一个项目中实现两个 API 时才会发生错误,即将两个库中的 jars 组合在一起。在修补罐子之后,我发现只有在同时包含 jsr305.jarjsr305-1.3.9.jar 时才会发生错误。查看这两个罐子,我发现它们都有 CheckForNull.java 个文件,错误消息中引用的文件 Multiple dex files define Ljavax/annotation/CheckForNull.
所以我的问题是:我该如何解决这个错误? 我想我必须在我的依赖项中排除它?准确的说明将不胜感激,也许还可以解释解决方案的作用。还有最后一件事 简单地将 jar 文件放在我的 /lib 文件夹和将它添加到我的 build.gradle 中的依赖项之间有什么区别? 它似乎没有影响任何东西. 删除任一 jsr.jat 文件的结果如下:
UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 at com.android.dx.merge.DexMerger.updateIndex(DexMerger.java:502) at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277) at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168) 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)

只需清理项目并重新构建...当我在错误文本

中看到 'dex' 一词时,我就知道我的代码与错误无关

这个错误是因为你的项目中引用了太多的方法。 You can read more here.

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

我有 react-native 项目与应用的 build.gradle:

def enableProguardInReleaseBuilds = false

...

buildTypes {
    release {
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }
}

enableProguardInReleaseBuilds 设置为 true 对我有用:

def enableProguardInReleaseBuilds = true