(重复的zip条目[coolLib.jar:{pkg} /BuildConfig.class]))

时间:2017-02-10 13:03:38

标签: android android-studio build.gradle android-proguard

我在 Android Studio 2.3.0 beta4 中有一个Android项目,该项目依赖于库项目 CoolLib

CoolLib 的源代码位于 libs 文件夹中的jar文件 coolLib.jar 中。 coolLib.jar 包含文件 {pkg} /BuildConfig.class

当我尝试在Android API-22 +的设备/模拟器中构建和运行项目时,它运行完美,但是当我尝试在API VERSION<设备/模拟器上执行相同操作时22,Android Studio 失败使用例外构建

  

警告:处理任务java.io.IOException时出现异常:无法写入[D:\ AndroidStudioProjects \ CoolProject \ app \ build \ intermediates \ transforms \ proguard \ debug \ jars \ 3 \ 1f \ main.jar ](无法读取[D:\ AndroidStudioProjects \ CoolProject \ CoolLib \ build \ intermediates \ bundles \ default \ libs \ coolLib.jar(;;;;;; ** .class)](重复的zip条目[coolLib]的.jar:{PKG} /BuildConfig.class]))   :app:transformClassesAndResourcesWithProguardForDebug FAILED

项目的build.gradle包含以下版本的支持lib等.--

ext {
supportLibVer = '25.1.1'
playServiceVer = '10.0.1'

buildToolsVer = "25.0.2"

compileSdkVer = 25
targetSdkVer = 25
minSdkVer = 16
}


dependencies {
compile files('libs/FLurry_3.2.2.jar')
compile files('libs/jxl-2.6.12.jar')

compile project(':CoolLib')

compile files('libs/gcm.jar')
compile "com.google.android.gms:play-services-ads:$playServiceVer"
compile "com.android.support:appcompat-v7:$supportLibVer"
compile "com.android.support:design:$supportLibVer"
compile "com.android.support:cardview-v7:$supportLibVer"
compile "com.android.support:support-v13:$supportLibVer"
compile 'com.github.bumptech.glide:glide:3.7.0'
}

2 个答案:

答案 0 :(得分:2)

好的,我得到了解决方案。

为什么 -

我比较了API22(构建OK)和API16(构建失败)的gradle控制台中的构建步骤。在API22,控制台说 -

  

+即时运行:Proguard与即时运行不兼容。它已被禁用以进行调试

     

+即时运行:自动禁用资源缩减器以进行调试

..并且构建成功。当我禁用InstantRun时,它也在API22上失败。

原因 -

问题在于proguard配置。 coolLib.jar BuildConfig.class 被定义为保存在 proguard-project.txt 中,因此它保留了所有该包中的.class 文件,但 BuildConfig.class 必须在构建时根据主项目进行修改。

解决方案 -

我删除了 -keep 语句,它就像魅力一样。

答案 1 :(得分:0)

我有同样的问题。

对我来说,解决方法是将packageBuildConfig = false放入库项目的build.gradle文件的android { ... }部分:

android {
    packageBuildConfig = false
    ...
}

即使已被弃用,它仍然可以工作。