首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Proguard时META-INF/版本重复错误

使用Proguard时META-INF/版本重复错误
EN

Stack Overflow用户
提问于 2019-04-10 17:20:31
回答 3查看 5.6K关注 0票数 15

Gradle : 4.10.1 Gradle Android插件版本: 3.3.2 Proguard : 6.0.3 JDK - 1.9 Android Studio 3.3.2当我尝试与Proguard一起构建apk发布版本时。我得到以下错误-

代码语言:javascript
复制
Caused by: java.io.IOException: Please correct the above warnings first.
    at proguard.InputReader.execute(InputReader.java:149)
    at proguard.ProGuard.readInput(ProGuard.java:255)
    at proguard.ProGuard.execute(ProGuard.java:96)
    ......

这似乎是因为这个原因-

代码语言:javascript
复制
Warning: class [META-INF/versions/9/module-info.class] unexpectedly contains class [module-info]
Note: duplicate definition of program class [module-info]
Note: there were 20 duplicate class definitions.
      (http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass)
Warning: there were 21 classes in incorrectly named files.
         You should make sure all file names correspond to their class names.
         The directory hierarchies must correspond to the package hierarchies.

从广泛的搜索来看,Proguard的META-INF/versions/9似乎有问题,我有多个包含这个问题的依赖项。

虽然这个问题似乎有一定的文档记录,但似乎没有规定的解决方案。https://sourceforge.net/p/proguard/bugs/665/建议通过以下方式过滤掉这些类文件:

代码语言:javascript
复制
-injars my_lib.jar(!META-INF/versions/**.class)

然而,当我尝试这样做时,它只会将更多的文件标记为重复和命名错误。我也试着通过gradle来排除它-

代码语言:javascript
复制
packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/INDEX.LIST'
        exclude 'META-INF/versions'
        exclude 'META-INF/versions/9/module-info.class'
   }

这也不能解决问题。我该如何解决这个问题?

EN

回答 3

Stack Overflow用户

发布于 2020-06-25 04:33:23

我意识到这是一个非常古老的问题,但我能够使用下面的gradle配置让它工作:

代码语言:javascript
复制
task obfuscate(type: proguard.gradle.ProGuardTask) {
    configuration files("proguard-project.txt")
    libraryjars files("build/rt.jar", "build/jce.jar")
    injars files("build/libs/desktop-${version}.jar"), filter: "!META-INF/versions/**/*.class"
    outjars files("build/libs/obfuscated.jar")
}

我认为你使用的injars指令的问题可能在于路径--应该是META-INF/versions/**/*.class

票数 2
EN

Stack Overflow用户

发布于 2019-11-24 16:03:04

使用proguard-project.txt中的选项-ignorewarnings为我“修复”它,生成的jar运行良好,只要Proguard提到的唯一警告与META-INF相关。

票数 1
EN

Stack Overflow用户

发布于 2021-05-04 19:16:55

添加此build.gradle文件

代码语言:javascript
复制
 buildTypes {
    release {
         minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
     }
  }
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55609008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档