美文网首页瘦身
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