我无法构建签名的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中排除,但问题仍然存在。
任何想法如何解决这个问题?
答案 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.1
,buildtools 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'
后,构建成功!
因此,我认为应用内结算依赖项要求有所更改??