我想将一个大型应用程序从Ant迁移到Gradle。 由于应用程序已经(错误地)创建为多个库,因此第一次迁移将保留相同的模块(它将在第二步中重构)并且它可能最终会在此结构中结束:
-- Project/ |-- App/ |-- libs/ |-- src/... |-- build.gradle |-- Module1/ |-- libs/ |-- lib1.jar |-- lib2.jar |-- src/... |-- build.gradle |-- Module2/ |-- libs/ |-- lib2.jar |-- lib3.jar |-- src/... |-- build.gradle build.gradle settings.gradle
App build.gradle是这样的:
... apply plugin: 'com.android.application' dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:support-v4:20.0.0' compile 'com.android.support:appcompat-v7:20.0.0' compile project(':Module1') compile project(':Module2') } ...
然后每个Module build.gradle将是这样的:
... apply plugin: 'com.android.library' dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:support-v4:20.0.0' compile 'com.android.support:appcompat-v7:20.0.0' } ...
每个模块都能正确编译,但在构建APK时会出现问题,因为lib2.jar被复制了2次,导致错误:
错误:Gradle:任务':app:packageDebug'执行失败。
在APK META-INF / ASL2.0中复制的重复文件 然后是2个JAR的路径。
在从每个模块构建APK时,如何告诉Gradle不要多次复制相同的JAR? 此时,我无法将依赖关系移动到Maven中央回购,即使我将来会这样做。 也许在父App中添加所有的lib?它对我来说看起来不太好......在这种情况下,我如何在build.gradle模块中指定依赖项?
答案 0 :(得分:1)
在您的gradle项目文件中,您可以将其添加到" android"阻止:
packagingOptions {
exclude 'META-INF/ASL2.0'
}
似乎正在复制META-INF / ASL2.0文件。