proguard - 重复的 zip 条目 classes.jar
proguard - Duplicate zip entry classes.jar
我无法构建签名的 apk。我将这个库实现到我的项目中:https://github.com/anjlab/android-inapp-billing-v3
在我实现它之后,当我尝试生成 apk 时出现这个错误:
Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.
> java.io.IOException: Can't write [C:\Users\Admin\StudioProjects\MealPlanner\app\build\intermediates\transforms\proguard\release\jarsf\main.jar] (Can't read [C:\Users\Admin\StudioProjects\MealPlanner\app\build\intermediates\exploded-aar\com.android.billingclient\billing.0\jars\classes.jar(;;;;;;**/*.class)] (Duplicate zip entry [classes.jar:com/android/vending/billing/IInAppBillingService$Stub$Proxy.class]))
我的项目中没有任何 aidl 文件,我尝试了 outjars 并将其从 build.gradle 中排除,但问题仍然存在。
有什么解决办法吗?
我最近在添加第三方库(开源)后遇到了这个问题,并且花了很多时间努力解决。 Stack Overflow 围绕它有很多问题和讨论。每个人都提出了不同的解决方案但是我遵循了 建议更正版本号。但这并没有解决我的问题。
因为我的情况和你的一样(即 "Duplicate zip entry"
和 "java.io.IOException: Can't write"
)所以我想回答你的问题。
这是我所做的(除了上面提到的版本更改):
在您添加的 build.gradle 库中,添加:
buildTypes
{
release
{
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'billing-proguard-rules.pro'
}
debug
{
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'billing-proguard-rules.pro'
}
}
你的 billing-proguard-rules.pro 应该看起来像这样:
-keep public class * extends com.anjlab.android.iab.v3.** { *; }
-keepclassmembernames class * extends com.anjlab.android.iab.v3.** { *; }
由于您导入的计费库是开源的(就像我的情况一样),所以保持原样是可以的。
你准备好了!
当我尝试在 Android Studio 3.2.1
、buildtools version 28.0.3
中为 Google play(基于他们的 TrivialDrive 示例)构建应用内结算应用时,我还发现了这一代签名版本 APK 被 Java.IO.Exception, transformClassesAndResourcesWithProguardForRelease, duplicate zip entry classes etcetera
...
阻止
首先我按照网上的建议适配proguard pro文件,然后我更新了buildtools版本,更改了我的gradle文件多次,没有任何帮助!
奇怪的是,2周前原始的trivialdrive示例构建没有问题,依赖项包括'com.android.billingclient:billing:1.1'。
删除实现后'com.android.billingclient:billing:1.1'
,构建成功!
所以我认为应用内结算依赖要求发生了一些变化??
我无法构建签名的 apk。我将这个库实现到我的项目中:https://github.com/anjlab/android-inapp-billing-v3
在我实现它之后,当我尝试生成 apk 时出现这个错误:
Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.
> java.io.IOException: Can't write [C:\Users\Admin\StudioProjects\MealPlanner\app\build\intermediates\transforms\proguard\release\jarsf\main.jar] (Can't read [C:\Users\Admin\StudioProjects\MealPlanner\app\build\intermediates\exploded-aar\com.android.billingclient\billing.0\jars\classes.jar(;;;;;;**/*.class)] (Duplicate zip entry [classes.jar:com/android/vending/billing/IInAppBillingService$Stub$Proxy.class]))
我的项目中没有任何 aidl 文件,我尝试了 outjars 并将其从 build.gradle 中排除,但问题仍然存在。
有什么解决办法吗?
我最近在添加第三方库(开源)后遇到了这个问题,并且花了很多时间努力解决。 Stack Overflow 围绕它有很多问题和讨论。每个人都提出了不同的解决方案但是我遵循了
因为我的情况和你的一样(即 "Duplicate zip entry"
和 "java.io.IOException: Can't write"
)所以我想回答你的问题。
这是我所做的(除了上面提到的版本更改):
在您添加的 build.gradle 库中,添加:
buildTypes
{
release
{
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'billing-proguard-rules.pro'
}
debug
{
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'billing-proguard-rules.pro'
}
}
你的 billing-proguard-rules.pro 应该看起来像这样:
-keep public class * extends com.anjlab.android.iab.v3.** { *; }
-keepclassmembernames class * extends com.anjlab.android.iab.v3.** { *; }
由于您导入的计费库是开源的(就像我的情况一样),所以保持原样是可以的。
你准备好了!
当我尝试在 Android Studio 3.2.1
、buildtools version 28.0.3
中为 Google play(基于他们的 TrivialDrive 示例)构建应用内结算应用时,我还发现了这一代签名版本 APK 被 Java.IO.Exception, transformClassesAndResourcesWithProguardForRelease, duplicate zip entry classes etcetera
...
首先我按照网上的建议适配proguard pro文件,然后我更新了buildtools版本,更改了我的gradle文件多次,没有任何帮助!
奇怪的是,2周前原始的trivialdrive示例构建没有问题,依赖项包括'com.android.billingclient:billing:1.1'。
删除实现后'com.android.billingclient:billing:1.1'
,构建成功!
所以我认为应用内结算依赖要求发生了一些变化??