如何让 Proguard 用优化的 jar 覆盖原始 jar?
Posted
技术标签:
【中文标题】如何让 Proguard 用优化的 jar 覆盖原始 jar?【英文标题】:How to get Proguard to overwrite the original jar with the optimized one? 【发布时间】:2014-01-20 16:52:32 【问题描述】:我无法让 Proguard 用 Proguard 的优化版本覆盖 Maven 生成的原始 jar。这是我的 POM.xml 的一部分:
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals><goal>proguard</goal></goals>
</execution>
</executions>
<configuration>
<proguardVersion>4.11</proguardVersion>
<injar>$project.build.finalName.jar</injar>
<outjar>$project.build.finalName.jar</outjar>
<options>
<option>-keep class **</option>
<option>-dontskipnonpubliclibraryclasses</option>
<option>-dontskipnonpubliclibraryclassmembers</option>
</options>
<libs>
<lib>$java.home/lib/rt.jar</lib>
<lib>$java.home/lib/jsse.jar</lib>
<lib>$java.home/lib/jce.jar</lib>
</libs>
</configuration>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
</plugin>
注意这两行:
<injar>$project.build.finalName.jar</injar>
<outjar>$project.build.finalName.jar</outjar>
我试图让 Proguard 使用原始 jar 作为输入并将其输出到同一个 jar,但我得到的是原始 jar 后缀为“_proguard_base”,优化后的 jar 被命名为它应该如何命名.仅当 inJar 和 outJar 选项相同时才会发生这种情况。
另外,我为此使用带有 Maven 插件的 Eclipse。任何帮助表示赞赏。
【问题讨论】:
【参考方案1】:ProGuard 无法将输出 jar 写入与输入 jar 相同的文件。 Maven插件似乎试图通过重命名输入jar来解决它。您可能必须在构建过程中考虑到这一点。
【讨论】:
在这种情况下,有没有办法摆脱原来的罐子?以上是关于如何让 Proguard 用优化的 jar 覆盖原始 jar?的主要内容,如果未能解决你的问题,请参考以下文章
Android Proguard安全加固教你如何让自己的应用程序或SDK更难被反编译--library打包成jar并且混淆
Android Proguard安全加固教你如何让自己的应用程序或SDK更难被反编译--library打包成jar并且混淆