Android proguard代码优化去日志

本文介绍了如何利用Proguard进行Android应用的代码优化,特别是去除日志代码以减小APK大小。作者在实践中发现,尽管Proguard提供了去除日志的功能,但因Android Studio的默认配置导致该功能未生效。解决方案是使用proguard-android-optimize.txt文件或自定义Proguard配置。文章还提到,即使日志被优化,某些字符串拼接的代码仍可能占用内存,建议结合日志开关进行控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景介绍

最近工作中涉及到减包体size的需求,由于某些低端设备和低端市场对apk的推广size的大小有很大的影响。这方面的工作思路和流程:1.分析apk各文件的占比,找出优化的方向;2.删除无用的资源;3.模块化设计动态下发某些功能;4.proguard优化

  • 工作代码中,有大量的日志代码,由于有debug日志开关的。发布正式版会去掉相关的统计,而忽略了日志d代码仍然会占用size。

  • 其实proguard 本身就提供了去除日志代码的功能,在使用过程中需要特别小心。一开始自己按着官网上的方式来做就是出不了效果,几经折腾总数找到原因为什么不行了,期间还一直怀疑是不是官网介绍有问题。现在回想一下还是自己掉到了android-studio的坑里面了。

  • 坑在这里,官方一直强调 -dontoptimize 不能在proguard混淆文件中,可是android-studio默认加载的混淆脚本proguad-android.txt 中确有这么一句:
    Optimization is turned off by default. Dex does not like code run
    through the ProGuard optimize and preverify steps (and performs some
    of these optimizations on its own).
    -dontoptimize
    就是因为这句导致 该设置一直没有起效
    -assumenosideeffects class android.util.Log {
    public static * d(…);
    public static * e(…);
    public static * i(…);
    public static * v(…);
    public static * println(…);
    public static * w(…);
    public static * wtf(…);
    }
    解决办法替换成proguard-android-optimize.txt这个文件或者不引入默认的混淆文件自己独立写proguard文件,大功可成也。

  • 测试发现如网上资料所写,log代码传参中 有成员变量、方法调用、字符串拼接等情况。log代码会优化掉
    但是会留下new StringBuilder()字符串拼接的代码仍然能够占用部分内存和size,这种情况最好在调用日志代码的地方加上日志开关来控制。

paramBundle = (Toolbar)findViewById(2131492971);
d().a(paramBundle);
new StringBuilder(“hhhhh”).append(getLocalClassName()).append(l);
getCallingPackage();
new StringBuilder(“hhhhh1”).append(m.a).append(m.b);
Object localObject = m.a;
new StringBuilder().append(m.b).toString();
localObject = m.a;
new StringBuilder(“hhhhhh5”).append(m.a).append(getLocalClassName()).toString();

小点

-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
以上两行会留下崩溃行号信息,但是size会增大10%左右
-printconfiguration you_config.txt
这个信息比较有用,可以将proguard引入的规则文件都输出在这里,方便排查问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值