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

为什么 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 举报,一经查实,本站将立刻删除。