微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 ProGuard 不从与我配置的相同包中的类重新打包以防止混淆?

如何解决为什么 ProGuard 不从与我配置的相同包中的类重新打包以防止混淆?

我正在使用 com.github.wvengen:proguard-maven-plugin:2.3.1 maven 插件在构建我的项目时混淆我的 jars。除了混淆之外,我还尝试将所有类重新打包到根包中。一切正常,所有类都移到根包中,直到我不得不配置防止类混淆。来自与我试图防止混淆的类相同的包中的类不会移动到根包。我正在使用的配置:

<configuration>
  <proguardVersion>7.0.0</proguardVersion>
  <injar>${project.build.finalName}.jar</injar>
  <outjar>${project.build.finalName}-obf.jar</outjar>
  <obfuscate>true</obfuscate>
  <mappingFileName>mapping.txt</mappingFileName>
  <seedFileName>seeds.txt</seedFileName>
  <options>
    <option>-dontoptimize</option>
    <option>-dontshrink</option>
    <option>-dontnote **</option>
    <option>-dontwarn **</option>
    <option>-repackageclasses</option>
    <option>-keep class me.myname.mypkg.Main</option>
  </options>
  <libs>
    <lib>${java.home}/lib/rt.jar</lib>
  </libs>
</configuration>

假设我有以下未混淆的 jar:

├─com
│ └─somename
│   └─somepkg
│     ├─otherpkg
│     │ └─OtherClass.class
│     └─SomeClass.class
└─me
  └─myname
    └─mypkg
      ├─util
      │ └─Util.class
      ├─Main.class
      ├─Manager.class
      └─MyApp.class

当使用上面的配置通过 ProGuard (7.0.0) 时,我得到以下输出 jar:

├─me
│ └─myname
│   └─mypkg
│     ├─a.class     # - MyApp.class
│     ├─A.class     # - Manager.class
│     └─Main.class
├─a.class           # - OtherClass.class
├─A.class           # - SomeClass.class
└─b.class           # - Util.class

看看 Main.class 包的类是如何不被移动到根包的?此行为发生在官方 proguard 和 maven 插件上。这是故意的吗?如果是这样,即使我保持类未混淆,我如何仍将所有类移动到根包?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?