ProGuard是一个集Java的压缩、优化、混淆三个功能一工具。提供了命令行、UI方式。以下是使用ant方式的样例
<proguard printseeds="on" ignorewarnings="true" optimize="true">
<injar file="${out.jar}" />
<outjar file="${obfuscate.jar}" />
<libraryjar file="${java.home}/lib/rt.jar">
<fileset dir="${root.dir}">
<include name="libs/**/*.jar" />
<include name="WebContent/WEB-INF/lib/*.jar" />
</fileset>
</libraryjar>
<keepattribute name="LineNumberTable" />
<!-- 保留废弃的方法 -->
<keepattribute name="Deprecated" />
<!-- 保留所有的注解 -->
<keepattribute name="*Annotation*" />
<keepattribute name="Exceptions" />
<!-- 保留签名,解决泛型问题 -->
<keepattribute name="Signature" />
<!-- Preserve all public classes, and their public and protected fields
and methods. -->
<keep access="public" >
<field access="public protected" />
<method access="public protected" />
</keep>
<!-- Preserve all .class method names. -->
<keepclassmembernames access="public">
<method type="java.lang.Class" name="class$" parameters="java.lang.String" />
<method type="java.lang.Class" name="class$" parameters="java.lang.String,boolean" />
</keepclassmembernames>
<!-- Preserve all native method names and the names of their classes. -->
<keepclasseswithmembernames>
<method access="native" />
</keepclasseswithmembernames>
<!-- Preserve the methods that are required in all enumeration classes. -->
<keepclassmembers extends="java.lang.Enum">
<method access="public static" type="**[]" name="values" parameters="" />
<method access="public static" type="**" name="valueOf" parameters="java.lang.String" />
</keepclassmembers>
<!-- Explicitly preserve all serialization members. The Serializable
interface is only a marker interface, so it wouldn't save them.
You can comment this out if your library doesn't use serialization.
If your code contains serializable classes that have to be backward
compatible, please refer to the manual. -->
<keepclassmembers implements="java.io.Serializable">
<field access="final" type="long" name="serialVersionUID" />
<field access="static final" type="java.io.ObjectStreamField[]" name="serialPersistentFields" />
<method access="private" type="void" name="writeObject" parameters="java.io.ObjectOutputStream" />
<method access="private" type="void" name="readObject" parameters="java.io.ObjectInputStream" />
<method type="java.lang.Object" name="writeReplace" parameters="" />
<method type="java.lang.Object" name="readResolve" parameters="" />
</keepclassmembers>
</proguard>
ProGuard使用指南
1240

被折叠的 条评论
为什么被折叠?



