proguard - 重复的zip条目classes.jar

时间:2018-02-16 18:17:27

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

我无法构建签名的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中排除,但问题仍然存在。

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

在我添加第三方库(开源)并花费了很多时间努力完成之后,我最近遇到了这个问题。堆栈溢出有很多问题和讨论。每个人都提出了不同的解决方案但是我按照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.** { *; }

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

你准备好了!

答案 1 :(得分:0)

当我尝试在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文件,没有任何帮助!

奇怪的是,两周前的原始trivialdrive示例构建没有问题,并且依赖项包括'com.android.billingclient:billing:1.1'。

删除实现'com.android.billingclient:billing:1.1'后,构建成功! 因此,我认为应用内结算依赖项要求有所更改??