Android Gradle应用程序和库jar冲突



我想将一个大型应用程序从Ant迁移到Gradle。由于应用程序被(错误地)创建为多个库,第一次迁移将保留相同的模块(将在第二步中进行重构),它可能会以以下结构结束:

--项目/|--应用程序/|--libs/|--src/。。。|--build.gradle|--模块1/|--libs/|--lib1.jar|--lib2.jar|--src/。。。|--build.gradle|--模块2/|--libs/|--lib2.jar|--lib3.jar|--src/。。。|--build.gradlebuild.gradle设置渐变

应用程序build.gradle是这样的:

。。。应用插件:"com.android.application"依赖项{compile fileTree(dir:'libs',include:['*.jar'])编译"com.android.support:support-v4:0.0.0"编译"com.android.support:appcompat-v7:20.0.0"编译项目(":Module1")编译项目(":Module2")}。。。

然后每个Module build.gradle都会是这样的:

。。。应用插件:"com.android.library"依赖项{compile fileTree(dir:'libs',include:['*.jar'])编译"com.android.support:support-v4:0.0.0"编译"com.android.support:appcompat-v7:20.0.0"}。。。

每个模块都能正确编译,但在构建APK时会出现问题,因为lib2.jar被复制了两次,导致了一个错误:

错误:Gradle:任务":app:packageDebug"的执行失败。

APK META-INF/ASL2.0中复制的重复文件然后是到2个JAR的路径。

我如何告诉Gradle在从每个模块构建APK时不要多次复制相同的JAR?目前,我无法将依赖关系转移到Maven中央回购,即使将来我会这样做。也许在父应用程序中添加所有的库?在我看来这不是很好…在这种情况下,我如何在build.gradle模块中指定依赖项?

在你的gradle项目文件中,你能把它添加到"android"块中吗:

packagingOptions {
    exclude 'META-INF/ASL2.0'
}

META-INF/ASL2.0文件似乎正在被复制。

最新更新