【问题标题】:proguard - Duplicate zip entry classes.jarproguard - 重复的 zip 条目 classes.jar
【发布时间】:2018-10-22 20:46:21
【问题描述】:

我无法构建签名的 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\jars\3\1f\main.jar] (Can't read [C:\Users\Admin\StudioProjects\MealPlanner\app\build\intermediates\exploded-aar\com.android.billingclient\billing\1.0\jars\classes.jar(;;;;;;**/*.class)] (Duplicate zip entry [classes.jar:com/android/vending/billing/IInAppBillingService$Stub$Proxy.class]))

我的项目中没有任何aidl 文件,我尝试使用 outjars 并将其从 build.gradle 中排除,但问题仍然存在。

有什么办法解决这个问题吗?

【问题讨论】:

标签: android proguard in-app-billing android-proguard


【解决方案1】:

当我尝试在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'后,构建成功! 所以我认为应用内计费依赖要求有所改变??

【讨论】:

    【解决方案2】:

    我最近在添加第三方库(开源)后遇到了这个问题,并且花了很多时间努力解决问题。堆栈溢出有很多问题和围绕它的讨论。每个人都提出了不同的解决方案但是我关注了this one,它建议更正版本号。但这并不能解决我的问题。

    由于我的情况与您的情况相同(即"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.** { *; }
    

    由于您导入的计费库是开源的(就像我的情况一样),因此可以保持原样。

    你准备好了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      相关资源
      最近更新 更多