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.1buildtools 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',构建成功! 所以我认为应用内结算依赖要求发生了一些变化??