changjiashuai's blog

Runnig...

The future belongs to those who believe in the beauty of their dreams.


ProGuard配置

保留选项(配置不进行处理的内容)

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

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

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

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

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

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

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

压缩

不压缩输入的类文件
-dontshrink

-printusage {filename}

-whyareyoukeeping {class_specification}

优化

不优化输入的类文件
-dontoptimize

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

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

混淆

不混淆输入的类文件
-dontobfuscate

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

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

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

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

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

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

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

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

?|*后面的文件名,类名,或者包名等可以使用占位符代替

表示一个字符 可以匹配多个字符,但是如果是一个类,不会匹配其前面的包名 * 可以匹配多个字符,会匹配前面的包名。

在android中在android Manifest文件中的activity,service,provider, receviter,等都不能进行混淆。一些在xml中配置的view也不能进行混淆,android提供的默认配置中都有。

ProGuard的输出文件及用处

混淆之后,会给我们输出一些文件,在gradle方式下是在/build/proguard/目录下,ant是在/bin/proguard目录,eclipse构建在/proguard目录像。

分别有以下文件:

  • dump.txt 描述apk文件中所有类文件间的内部结构。
  • mapping.txt 列出了原始的类,方法,和字段名与混淆后代码之间的映射。
  • seeds.txt 列出了未被混淆的类和成员
  • usage.txt 列出了从apk中删除的代码

另外Proguard文件中包含retrace脚本,可以将一个被混淆过的堆栈跟踪信息还原成一个可读的信息,window下时retrace.bat,linux和mac是retrace.sh,在/tools/proguard/文件夹下。语法为:

retrace.bat retrace.sh [-verbose] mapping.txt []

例如:

retrace.bat -verbose mapping.txt obfuscated_trace.txt
最近的文章

http请求状态码

http请求状态码 http状态返回代码 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码。 http状态返回代码 表示 说明 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。 http状...…

http请求状态码继续阅读
更早的文章

Android中Action和Category常量表

Action Action常量 对应字符串 简单说明 ACTION_MAIN android.intent.action.MAIN 应用程序入口 ACTION_VIEW android.intent.action.VIEW 显示指定数据 ACTION_ATTACH_DATA android.intent.actio...…

Android继续阅读