我正在使用包含文件的In app billing(按照developer.android.com的步骤) InAppBillingService.aidl
正如此处所建议的那样 - > http://developer.android.com/google/play/billing/billing_best_practices.html 出于安全原因,我们需要使用Progaurd对代码进行模糊处理。
现在导出已启用proguard的签名apk会给我以下错误。
重复的zip条目[android_6861407322325970495.jar:com / android / vending / billing / IInAppBillingService $ Stub $ Proxy.class]
任何想法/建议将不胜感激。 感谢
更新 以下是完整的跟踪。
java.io.IOException: Can't write [C:\Users\<Name>\AppData\Local\Temp\android_2083818169284424504.jar] (Can't read [C:\Users\<Name>\AppData\Local\Temp\android_6558830429113811056.jar] (Duplicate zip entry [android_6558830429113811056.jar:com/android/vending/billing/IInAppBillingService$Stub$Proxy.class]))
at proguard.OutputWriter.writeOutput(OutputWriter.java:264)
at proguard.OutputWriter.execute(OutputWriter.java:160)
at proguard.ProGuard.writeOutput(ProGuard.java:372)
at proguard.ProGuard.execute(ProGuard.java:153)
at proguard.ProGuard.main(ProGuard.java:492)
Caused by: java.io.IOException: Can't read [C:\Users\<Name>\AppData\Local\Temp\android_6558830429113811056.jar] (Duplicate zip entry [android_6558830429113811056.jar:com/android/vending/billing/IInAppBillingService$Stub$Proxy.class])
at proguard.InputReader.readInput(InputReader.java:230)
at proguard.InputReader.readInput(InputReader.java:200)
at proguard.OutputWriter.writeOutput(OutputWriter.java:253)
... 4 more
Caused by: java.io.IOException: Duplicate zip entry [android_6558830429113811056.jar:com/android/vending/billing/IInAppBillingService$Stub$Proxy.class]
at proguard.io.JarWriter.getOutputStream(JarWriter.java:139)
at proguard.io.FilteredDataEntryWriter.getOutputStream(FilteredDataEntryWriter.java:105)
at proguard.io.FilteredDataEntryWriter.getOutputStream(FilteredDataEntryWriter.java:92)
at proguard.io.ClassRewriter.read(ClassRewriter.java:68)
at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
at proguard.io.JarReader.read(JarReader.java:65)
at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
at proguard.InputReader.readInput(InputReader.java:226)
... 6 more
答案 0 :(得分:2)
也许这有助于你,
根据ProGuard文档:
警告:无法写入资源...重复的zip条目 您的输入jar包含多个具有相同名称的资源文件。 ProGuard继续像往常一样复制资源文件,跳过 任何以前使用名称的文件。再一次,警告可能是一个 虽然有一些问题的指示,所以建议删除 重复。一种方便的方法是在上面指定过滤器 输入罐子。没有选项可以关闭这些警告。
您的库jar中有一个重复的资源条目“IInAppBillingService $ Stub $ Proxy.class”android_6558830429113811056.jar
您可以尝试使用-outjars
-outjars class_path 指定输出jar(或战争,耳朵,拉链或目录)的名称。前面-injars选项的已处理输入 将被写入指定的罐子里。这允许你收集 输入jar组的内容分为相应的输出组 罐子。此外,可以过滤输出条目,如中所述 过滤器部分。每个已处理的类文件或资源文件都是 然后写入带有匹配过滤器的第一个输出条目 输出罐组。
您必须避免让输出文件覆盖任何输入文件。为了更好的 可读性,可以使用多个-outjars选项指定类路径条目。 如果没有任何-outjars选项,则不会写入任何罐子。
或者如果您使用的是-injars
,则可以配置filter
答案 1 :(得分:0)
很可能确实存在重复的条目。可能某些库既可作为依赖项,也可作为子目录中的副本。即使没有proguard,错误也可能显示出来。
应该有中间的apk-s,你可能会试着看看最新的apk里面有什么。
我还建议尝试从命令行构建。 (OTOH,我最后一次尝试,我遇到了非信息性的错误,类似“null返回1”,也就是说,来自无人的非零错误代码知道什么组件,日志中有更多信息。 )
您也可以尝试手动删除错误消息(在窗口中选择它们(仅限叶子,而不是它们的根)并按“Del”),清理项目并重新构建它。
答案 2 :(得分:0)
如果您的ProGuard配置中有-injars bin/classes
,请尝试将其删除。
答案 3 :(得分:0)
您是否尝试使用-verbose
选项运行proguard?您可能能够确切地看到正在添加重复库的内容(以及何时)。