我在 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'
}
答案 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
...
}
即使已被弃用,它仍然可以工作。