(重复的 zip 条目 [coolLib.jar:{pkg}/BuildConfig.class])
(Duplicate zip entry [coolLib.jar:{pkg}/BuildConfig.class]))
我在 Android Studio 2.3.0 beta4 中有一个 android 项目,它依赖于库项目 CoolLib.
CoolLib 在其 libs[=34= 中的 jar 文件 coolLib.jar 中有源代码] 文件夹。 coolLib.jar 包含文件 {pkg}/BuildConfig.class.
当我尝试在 Android API-22+ 的 device/emulator 中构建和 运行 项目时,它 运行 非常完美,但是当我尝试在 API VERSION < 22 的 device/emulator 上做同样的事情,Android Studio fails to build with an Exception--
Warning: Exception while processing task java.io.IOException: Can't write [D:\AndroidStudioProjects\CoolProject\app\build\intermediates\transforms\proguard\debug\jarsf\main.jar] (Can't read [D:\AndroidStudioProjects\CoolProject\CoolLib\build\intermediates\bundles\default\libs\coolLib.jar(;;;;;;**.class)] (Duplicate zip entry [coolLib.jar:{pkg}/BuildConfig.class]))
:app:transformClassesAndResourcesWithProguardForDebug FAILED
项目build.gradle包含以下版本的支持库等--
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'
}
好的,我找到了解决方案。
为什么-
我在 gradle 控制台中比较了 API22(构建成功)和 API16(构建失败)的构建步骤。在 API22,控制台说-
+Instant Run: Proguard is not compatible with instant run. It has been disabled for debug
+Instant Run: Resource shrinker automatically disabled for debug
..构建成功。当我禁用 InstantRun 时,它在 API22 上也失败了。
原因-
问题出在 proguard 配置中。 BuildConfig.class of coolLib.jar 被定义为保存在 proguard-project.txt ,因此它将所有 .class 文件保留在该包中,但 BuildConfig.class 必须根据主项目在构建时修改。
解决方案-
我删除了 -keep 声明,它非常有效。
我遇到了同样的问题。
我的解决方法是将 packageBuildConfig = false
放入库项目 build.gradle 文件的 android { ... }
部分:
android {
packageBuildConfig = false
...
}
即使它已被弃用,它仍然有效。
我在 Android Studio 2.3.0 beta4 中有一个 android 项目,它依赖于库项目 CoolLib.
CoolLib 在其 libs[=34= 中的 jar 文件 coolLib.jar 中有源代码] 文件夹。 coolLib.jar 包含文件 {pkg}/BuildConfig.class.
当我尝试在 Android API-22+ 的 device/emulator 中构建和 运行 项目时,它 运行 非常完美,但是当我尝试在 API VERSION < 22 的 device/emulator 上做同样的事情,Android Studio fails to build with an Exception--
Warning: Exception while processing task java.io.IOException: Can't write [D:\AndroidStudioProjects\CoolProject\app\build\intermediates\transforms\proguard\debug\jarsf\main.jar] (Can't read [D:\AndroidStudioProjects\CoolProject\CoolLib\build\intermediates\bundles\default\libs\coolLib.jar(;;;;;;**.class)] (Duplicate zip entry [coolLib.jar:{pkg}/BuildConfig.class])) :app:transformClassesAndResourcesWithProguardForDebug FAILED
项目build.gradle包含以下版本的支持库等--
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'
}
好的,我找到了解决方案。
为什么-
我在 gradle 控制台中比较了 API22(构建成功)和 API16(构建失败)的构建步骤。在 API22,控制台说-
+Instant Run: Proguard is not compatible with instant run. It has been disabled for debug
+Instant Run: Resource shrinker automatically disabled for debug
..构建成功。当我禁用 InstantRun 时,它在 API22 上也失败了。
原因-
问题出在 proguard 配置中。 BuildConfig.class of coolLib.jar 被定义为保存在 proguard-project.txt ,因此它将所有 .class 文件保留在该包中,但 BuildConfig.class 必须根据主项目在构建时修改。
解决方案-
我删除了 -keep 声明,它非常有效。
我遇到了同样的问题。
我的解决方法是将 packageBuildConfig = false
放入库项目 build.gradle 文件的 android { ... }
部分:
android {
packageBuildConfig = false
...
}
即使它已被弃用,它仍然有效。