当前位置: 代码迷 >> Android >> android 搅混
  详细解决方案

android 搅混

热度:306   发布时间:2016-05-01 14:40:46.0
android 混淆

ProGuard是一个免费的java类文件压缩,优化,混淆器.它探测并删除没有使用的类,字段,方法和属性.它删除没有用的说明并使用字节码得到最大优化.它使用无意义的名字来重命名类,字段和方法.?

ProGuard的使用是为了:?

1.创建紧凑的代码文档是为了更快的网络传输,快速装载和更小的内存占用.?
2.创建的程序和程序库很难使用反向工程.?
3.所以它能删除来自源文件中的没有调用的代码?
4.充分利用java6的快速加载的优点来提前检测和返回java6中存在的类文件.?

参数:?

-include {filename}??? 从给定的文件中读取配置参数?

-basedirectory {directoryname}??? 指定基础目录为以后相对的档案名称?

-injars {class_path}??? 指定要处理的应用程序jar,war,ear和目录?

-outjars {class_path}??? 指定处理完后要输出的jar,war,ear和目录的名称?

-libraryjars {classpath}??? 指定要处理的应用程序jar,war,ear和目录所需要的程序库文件?

-dontskipnonpubliclibraryclasses??? 指定不去忽略非公共的库类。?

-dontskipnonpubliclibraryclassmembers??? 指定不去忽略包可见的库类的成员。?


保留选项?
-keep {Modifier} {class_specification}??? 保护指定的类文件和类的成员?

-keepclassmembers {modifier} {class_specification}??? 保护指定类的成员,如果此类受到保护他们会保护的更好?

-keepclasseswithmembers {class_specification}??? 保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。?

-keepnames {class_specification}??? 保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除)?

-keepclassmembernames {class_specification}??? 保护指定的类的成员的名称(如果他们不会压缩步骤中删除)?

-keepclasseswithmembernames {class_specification}??? 保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)?

-printseeds {filename}??? 列出类和类的成员-keep选项的清单,标准输出到给定的文件?

压缩?
-dontshrink??? 不压缩输入的类文件?

-printusage {filename}?

-whyareyoukeeping {class_specification}?????

优化?
-dontoptimize??? 不优化输入的类文件?

-assumenosideeffects {class_specification}??? 优化时假设指定的方法,没有任何副作用?

-allowaccessmodification??? 优化时允许访问并修改有修饰符的类和类的成员?

混淆?
-dontobfuscate??? 不混淆输入的类文件?

-printmapping {filename}?

-applymapping {filename}??? 重用映射增加混淆?

-obfuscationdictionary {filename}??? 使用给定文件中的关键字作为要混淆方法的名称?

-overloadaggressively??? 混淆时应用侵入式重载?

-useuniqueclassmembernames??? 确定统一的混淆类的成员名称来增加混淆?

-flattenpackagehierarchy {package_name}??? 重新包装所有重命名的包并放在给定的单一包中?

-repackageclass {package_name}??? 重新包装所有重命名的类文件中放在给定的单一包中?

-dontusemixedcaseclassnames??? 混淆时不会产生形形色色的类名?

-keepattributes {attribute_name,...}??? 保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and InnerClasses.?

-renamesourcefileattribute {string}??? 设置源文件中给定的字符串常量?


因为我们开发的是webwork+spring+hibernate的架构的项目,所有需要很详细的配置。(经过n次失败后总结)?

Example:?
??? -injars <project>.jar?
??? -outjars <project>_out.jar?

??? -libraryjars <java.home>/lib/rt.jar?
??? -libraryjars <project.home>/webroot/WEB-INF/lib/webwork.jar?
??? .......?

??? # 保留实现Action接口类中的公有的,友好的,私有的属性 和 公有的,友好的方法。其它的全部压缩,优化,混淆。?
??? # 因为配置文件中的类名是一个完整的类名,如果经过处理后就有可能找不到这个类。?
??? # 属性是jsp页面所需要的,如果经过处理jsp页面就无法得到action中的数据。?
??? -keep public class * implements com.opensymphony.xwork.Action{?
??????? public protected private <fields>;?
??????? public protected <methods>;?
??? }?

??? # 保留实现了Serializable接口类中的公有的,友好的,私有的成员(属性和方法)?
??? # 这个配置主要是对应实体类的配置。?
??? -keep public class * implements java.io.Serializable{?
??????? public protected private *;?
??? }?

  相关解决方案