Proguard警告"无法写入资源[META-INF/MANIFEST.MF](重复的zip条目)"

Ric*_*ral 36 android warnings proguard android-support-library

我正在使用IntelliJ并在调试模式下运行Proguard,但我似乎无法摆脱警告,例如:

ProGuard: [MyApplication] Warning: can't write resource [META-INF/MANIFEST.MF] 
(Duplicate zip entry [android-support-v13.jar:META-INF/MANIFEST.MF])
Run Code Online (Sandbox Code Playgroud)

这个项目有几个模块,android-support-v13.jar正在其中2个模块中使用.我认为这是问题所以我从libs文件夹中删除了该库,将其添加为项目库并将依赖项添加到两个模块中.这没有解决任何问题,警告仍然存在,我不明白为什么.

我知道这些警告不会影响任何东西,但干净的构建是一个快乐的构建!

Ale*_*ado 47

可能是'proguard.cfg'问题.它包括任何'-injars'吗?如果您的项目包含另一个项目作为库,则可以对jar进行两次处理.你能发贴'proguard.cfg'吗?

摘自http://proguard.sourceforge.net/index.html#manual/troubleshooting.html:

您的输入jar包含多个具有相同名称的资源文件.ProGuard像往常一样继续复制资源文件,跳过以前使用过的名称的所有文件.此外,警告可能表示某些问题,因此建议删除重复项.一种方便的方法是在输入罐上指定过滤器.没有选项可以关闭这些警告.

选项1:

由于您无法发布'-injars',请检查它们是否包含'android-support-v13.jar'或项目中包含的库,其中包含'android-support-v13.jar'.

假设您在IntelliJ IDEA中使用Ant构建,则不得添加-injars,-outjars或-libraryjars选项; Ant脚本已经为你做了.

选项#2:

虽然警告是无害的,但是干净的构建是一个快乐的构建,所以尝试:

http://web.archive.org/web/20160206204259/http://www.dancartoon.com/2012/01/14/fixing-proguard-warning-cant-write-resource-meta-infmanifest-mf/

https://gist.github.com/paulpv/4439012

选项#3:

(!META-INF/MANIFEST.MF)在每个'-injars'命令后包括

-injars library.jar(!META-INF/MANIFEST.MF)
Run Code Online (Sandbox Code Playgroud)

选项#4: Android Proguard重复定义

通过将第三方库移动到另一个目录(在我的情况下为'lib')来解决此问题.然后补充说

-injars lib/jmdns.jar 
Run Code Online (Sandbox Code Playgroud)

到proguard.cfg文件.

选项#5: Android - Proguard重复的zip条目错误

如果您的Proguard配置文件包含以下行,请将其删除:

-injars bin/classes
Run Code Online (Sandbox Code Playgroud)

选项#6: 使用proguard的Android混淆应用程序会混淆库罐 - 或者是它?

我发现让Proguard独自离开图书馆罐子的另一种方法是要求它保留他们的包装名称,例如:

-keep class javax.**{*; } -keep class org.**{*; } -keep class twitter4j.​​*{*; }

选项#7:

一个奇怪的解决方案(删除src文件夹中的META-INF文件夹)到这里类似的东西.


Woo*_*Kim 5

我用过packagingOptionsin excludebuild.gradle我和你有同样的问题。

您可以使用此修复它。

packagingOptions { 
    pickFirst 'META-INF/services/javax.annotation.processing.Processor'
    pickFirst 'META-INF/DEPENDENCIES.txt'
    pickFirst 'META-INF/DEPENDENCIES'
    pickFirst 'META-INF/LICENSE.txt'
    pickFirst 'META-INF/LICENSE'
    pickFirst 'META-INF/NOTICE.txt'
    pickFirst 'META-INF/NOTICE'
    pickFirst 'META-INF/LGPL2.1'
}
Run Code Online (Sandbox Code Playgroud)

pickFirst用。。。来代替exclude

  • 无论是使用“pickFirst”还是“exclude”,在运行发布版本时仍然会输出警告。你能否证实这一点? (4认同)