参考地址: android官网
作用
主要有两个方面
1、压缩代码和资源,移除封装应用中未使用的类、字段、方法和属性,减小apk体积
2、优化字节码,移除未使用的代码指令,以及用短名称混淆其余的类、字段和方法
使用
在模块build.gradle文件下,版本构建中(一般是发布版本,release)添加下面代码:
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
shrinkResources true : 启用压缩资源
minifyEnabled true: 启动代码压缩
getDefaultProguardFile('proguard-android.txt')方法可从 Android SDKtools/proguard/文件夹获取默认的 ProGuard 设置。
提示:要想做进一步的代码压缩,请尝试使用位于同一位置的proguard-android-optimize.txt文件。它包括相同的 ProGuard 规则,但还包括其他在字节码一级(方法内和方法间)执行分析的优化,以进一步减小 APK 大小和帮助提高其运行速度。
proguard-rules.pro文件用于添加自定义 ProGuard 规则。默认情况下,该文件位于模块根目录(build.gradle文件旁)
在上述版本内或者在android/defaultConfig 中使用 resConfigs "en", "fr", 只保留相应语言包中资源
构建成功后
会在模块 build/outputs/mapping/release/下生成各种记录proguard处理情况文件:
dump.txt :说明 APK 中所有类文件的内部结构。
mapping.txt :提供原始与混淆过的类、方法和字段名称之间的转换。
seeds.txt: 列出未进行混淆的类和成员。
usage.txt: 列出从 APK 移除的代码。
自定义proguard文件
对于某些情况,默认 ProGuard 配置文件 (proguard-android.txt) 足以满足需要,ProGuard 会移除所有(并且只会移除)未使用的代码。不过,ProGuard 难以对许多情况进行正确分析,可能会移除应用真正需要的代码。可以查看usage.txt文件;错误移除情况有:
1、应用引用的类只来自AndroidManifest.xml文件
2、应用调用的方法来自 Java 原生接口 (JNI)
3、应用在运行时(例如使用反射或自检)操作代码
要修正错误并强制 ProGuard 保留特定代码,请在 ProGuard 配置文件中添加一行-keep代码; -keep public class MyClass
如果还想有更多的处理,需要对proguard有许多了解 proguard官网
堆栈日志分析
使用retrace脚本(在 Windows 上为retrace.bat;在 Mac/Linux 上为retrace.sh)。它位于<sdk-root>/tools/proguard/目录中;例如
retrace.bat -verbose mapping.txt obfuscated_trace.txt
网友评论