美文网首页瘦身
android 中使用ProGuard

android 中使用ProGuard

作者: 众少成多积小致巨 | 来源:发表于2019-08-24 17:18 被阅读0次

参考地址: 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

相关文章

网友评论

    本文标题:android 中使用ProGuard

    本文链接:https://www.haomeiwen.com/subject/ioeqectx.html