1

我有一个多模块 Android 应用程序,当我构建发布 APK 时,我收到了这个 dex 错误:

java.util.concurrent.ExecutionException: com.android.dex.DexException: Multiple dex files define Lcom/XX/package-info;

当然,我的所有模块中都有一个package-info文件,它们都具有相同的名称。
为什么 dex 甚至关心package-info文件,我该如何配置它以忽略它们?

注意:我不想启用多dex

4

2 回答 2

0

尝试在 app 模块的 build.gradle 中的 android 标记内使用 PackagingOptions。

packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/license.txt'
exclude 'META-INF/LGPL2.1'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/notice.txt'
}

更多:包装

于 2017-03-25T13:17:14.130 回答
0

解决方案是从 jar 文件中排除这些package-info文件。

build.gradle在文件中使用的示例代码

对于java 模块

jar {
    exclude('com/**/package-info.*')
}

对于安卓模块

android {
    sourceSets.main.java.filter.exclude 'com/**/package-info.*'
}

适用于:

  • 安卓工作室3.0 Canary 5
  • 摇篮4.1-milestone-1
  • Android gradle 插件:3.0.0-alpha5

注意package-info:如果文件对您的构建没有贡献,您当然只能排除这些文件!
例如,当您在文件中使用不可变样式配置package-info时,您无法从构建中排除文件,因为生成的文件的名称可能会更改!

于 2017-03-26T07:45:21.220 回答