我正试图为我的工具制造一个模糊的脂肪罐。在尝试了Pro卫兵之后,我发现yGuard也是出于同样的目的。
以下是混淆的步骤
创建胖jar
我只需要混淆自定义包,因为混淆外部jars (如batik库)会产生错误。例:
Caused by: java.io.IOException: An error ('No mapping found for: Field org/apache/batik/bridge/SVGPathElementBridge.ctx') occured during the remapping! See the log!)
at com.yworks.yguard.obf.GuardDB.remapTo(GuardDB.java:547)
at com.yworks.yguard.ObfuscatorTask.execute(ObfuscatorTask.java:1064)
基于ygurd文档,我修改了ant任务,使其只包含自定义包。但是这种情况并没有发生,yGuard没有考虑这种配置。下面是当前的ant任务配置。
<target name="yguard" depends="jar">
<taskdef name="yguard" classname="com.yworks.yguard.YGuardTask" classpath="${projectDir}/lib/yguard-${version}.jar" />
<yguard>
<inoutpair in="${jar}" out="${obfjar}" />
<shrink logfile="${shrinklog}">
<keep>
<!-- main method -->
<method name="void main(java.lang.String[])" class="${mainclass}" />
</keep>
</shrink>
<rename mainclass="${mainclass}" logfile="${renamelog}">
<property name="error-checking" value="pedantic" />
<keep>
<class>
<patternset>
<!-- Custom library - should be obfuscated -->
<include name="com.acme.**.*" />
<!-- Excluded library -->
<exclude name="org.apache.**.*" />
<exclude name="javx.**.*" />
</patternset>
</class>
</keep>
</rename>
</yguard>
</target>
任何解决这个问题的建议都受到高度赞赏。提前感谢
发布于 2022-03-24 10:26:40
<rename>
元素的<keep>
子元素的工作方式正好相反:如果您在<keep>
中的<include>
类,这个类是而不是重命名的。也就是说,<include>
的意思是“在名称不变的一组类中包含”。
由于您希望防止Batik内容被重命名,您的配置应该是
<keep>
<class>
<patternset>
<include name="org.apache.**.*"/>
<include name="javax.**.*"/>
</patternset>
</class>
</keep>
用例不需要<exclude>
。只有当您想重命名不应该重命名的类的子集时,<exclude>
才是必要的。
https://stackoverflow.com/questions/67620826
复制相似问题