Android APK瘦身之Android Studio Lint

Home / Android MrLee 2016-9-22 2887

第一部分: 瘦身内容介绍

项目新版本的迭代接近尾声, 因为历史累积问题, 导致有很多无效的资源让已经臃肿的APK变得更肿, 因此公司决定做一次Android APK的资源瘦身.
这次瘦身使用的是 Lint审查工具 , 用Android Studio的Generate Signed APK打包, 瘦身前APK为17.3M, 瘦身后为15.7M. 瘦身结果为APK大小减少了1.6M(9.x%)
1. 完全相同的一张图片, 在项目中存在多份(不同的开发人员从UI资源文件夹里复制出来, 修改为不同的名字, 引入工程)
2. 版本多次迭代后, 许多XML文件已经不再使用了(包括布局文件, 自定义图形文件, 动画文件, 颜色文件, 字符文件strings.xml, 单位文件dimens.xml等).
3. 由于功能的迭代, 有些Activity, Fragment已经无效(好像 Android Studio Lint无法查处这一类的无效资源 )

第二部分: 瘦身工具介绍

1. 使用的是Android Studio工具做代码审查( Inspect Code功能 ), 实际上使用到的是其中 Android Lint 部分
2. Inspect Code配置(可以 单独选择Module ‘app’ 部分, 个人感觉library部分审查的意义不大. 不过为了方便, 我还是选择了 Whole project. .. 不过这样的结果就是, 同事的红点键盘电脑还没有Inspect完… 我已经把150多个无效资源全部处理完了… 所以还是 自行决定是否Fire The Whole吧 …)

第三部分: Android Studio Inspect Code 结果简介

zzzZZZ(Inspecting…)
1. 既然是瘦身, 那无效资源引用就是头等重要的事了. 个人觉得这部分都在 Inpsection模块的Android Lint 视图里面了.
首先, 在Inspection模块里找到Android Lint
然后, 在Inspection模块的Android Lint里向下滑动找到 Ununsed resources
来, 看一下Unused recources展开后的样子(对不起, 重复图片, 无效xml文件, 无效的strings.xml和dimens.xml都已经处理完了)…
( 说一下一个我自己的 处理”技巧” 吧, 对于无效的xml文件, 要删除起来其实还比较麻烦, 因为Android Studio在xml页面好像没有删除按钮??? 我是这么做的:
在Inspect Code 的Android List结果展示区, 双击对应的xml无效提示(例如: The resource ‘R.dimen.spacing_0_5′ appears to be unused这一个item),
进入对应的xml文件后, 把所有内容删除… 不要怕… 错了git可以恢复的…
当你删除的手酸的时候或者内心惶恐不安的时候, 在Android Studio里Clean一下工程[不懂的谷歌搜索: Android Studio Clean 工程...]
之后在Android Studio工程里遍历所有的xml文件, 对于没有内容的xml文件, Android Studio会用红色的波浪线提示, 然后选中所有需要删除的xml文件, 一次性删除… 建议带上引用审查)
安全删除之引用审查
( 说一下一个坑吧 … 事情的起因是这样的: android.content.res.Resources$NotFoundException
Android Lint信誓旦旦的说, R.dimen.spacing_0_5是没用的(实际上他的名字是R.dimen.spacing_0.5…) 后删之, 保留了values-1280×720目录下diemns.xml里的R.dimen.spacing_0.5定义…
这样看起来应该出现在分辨率为1280×720的HTC D816V完美不崩溃而其他分辨率可能崩溃的情况… 然而HTC D816V表示不服, 打开APP后崩溃,遂伙同Android Studio提示单身程序狗: Caused by: android.content.res.Resources$NotFoundException: File res/drawable/common_btn_grayf10.xml from drawable resource ID #0x7f0a0018
我找了一下, common_btn_grayf10.xml确实存在… HTC你”眼瞎”是不是!!! 还是Android Studio聪明, 在xml预览图里无预览, 但是提示spacing_0.5 not in right format… 于是将spacing_0.5修改为spacing_1, 错误提示不记得在不在了, 但是程序依旧崩溃… 查了很久后, 尝试将spacing_0.5也放到values/dimens.xml里试试… 结果崩溃问题解决…
总结: 在做适配的时候, 一定要保证values/dimens.xml文件是最大而全的 .就是说values/dimens.xml = values-aaxbb U values-ccxdd U etc… 这里U是离散数学里的取并集的意思(打我吧… 很罗嗦对不对)
)
2. 实际上Android Studio的Inspect Code还蛮强大的, 会帮你审查无效的LinearLayout, xml布局里View过多, onDraw()函数中分配内存这一类的效率问题. 举一个 Code style的例子 (实在无语了有没有!)
代码里是这么写的:
Intent intent = getIntent();
if (null != intent) {
goToMainPageFlag = intent.getBooleanExtra(KEY_GO_TO_MAIN_PAGE_FLAG, false);
} else {
goToMainPageFlag = false;
}
Inspect Code提示:
就是说, Android Studio的Inspect Code告诉你, 你的代码一点都不优雅… 应该改成酱:
Intent intent = getIntent();
goToMainPageFlag = (null != intent && intent.getBooleanExtra(KEY_GO_TO_MAIN_PAGE_FLAG, false));
结论: 把六行的代码改成两行, 确实是一个很好的Code Style实践有没有! 是的, Android Studio的Inspect Code功能我也是第一次用, 里面东西实在太多了, 大大小小事无巨细的, 没事儿多看看长长见识也是极好的… 虽然有时候你可能不能在短时间内一下子把所有选项优化完, 不过多看才会有优化的意识, 在之后的Code实践里就会逐渐的靠近最佳实践. (完)
 
 

本文链接:https://www.it72.com/10367.htm

推荐阅读
最新回复 (0)
返回