DexException:多个 dex 文件
DexException: Multiple dex files
好的,目前我正在制作一个 Android 应用程序,它使用 Google Sheets API 版本 3.0 和 Drive 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.jar
和 jsr305-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
好的,目前我正在制作一个 Android 应用程序,它使用 Google Sheets API 版本 3.0 和 Drive 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.jar
和 jsr305-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