Android APK瘦身之Android Studio Lint (代码审查)
******** ******** 第一部分: 瘦身内容介绍 ******** ********
项目新版本的迭代接近尾声, 因为历史累积问题, 导致有很多无效的资源让已经臃肿的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-1280x720目录下diemns.xml里的R.dimen.spacing_0.5定义...
这样看起来应该出现在分辨率为1280x720的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实践里就会逐渐的靠近最佳实践. (完)
Android APK瘦身之Android Studio Lint (代码审查)的更多相关文章
- Android APK 瘦身 - JOOX Music项目实战
导语 JOOX Music是腾讯海外布局的一个音乐产品,2014年发布以来已经成为5个国家和地区排名第一的音乐App.东南亚是JOOX Music的主要发行地区,由于JOOX Music所面对的市场存 ...
- Android Apk 瘦身大法
原文地址: https://mp.weixin.qq.com/s/XS0tuLgTfyp4rW4h69wyQQ 一, 我们在多人开发项目 或者 遗留项目中开发时,会有些自己没用到的资源文件,但是自己也 ...
- APK瘦身属性——android:extractNativeLibs
先描述一下结论: android:extractNativeLibs = true时,gradle打包时会对工程中的so库进行压缩,最终生成apk包的体积会减小. 但用户在手机端进行apk安装时,系统 ...
- Android APK瘦身方法小结
众所周知,APP包体的大小,会影响推广的难度,用户不太喜欢下载太大的APP,同类型同等功能的APP中往往是包体小的更受用户的青睐,所以降低包体是一项非常必要的事情,也是最近公司的APP需要降低包体,所 ...
- android apk瘦身之 图片压缩 tinypng
参考地址: http://blog.csdn.net/jy692405180/article/details/52409369 http://www.tuicool.com/articles/BraI ...
- Android APK瘦身之webp图片
webp格式是谷歌推出的一种有损压缩格式,这种图片格式相比png或者jpg格式的图片损失的质量几乎可以忽略不计,但是压缩后图片的体积却比png或者jpg要小很多.亲测一个100kb的png图片经过we ...
- android apk瘦身
1.在gradle使用minifyEnabled进行Proguard混淆的配置,可大大减小APP大小 通过Build.gradle进行配置 2.删除无用的Resource文件. 这个和上面的肯定不一样 ...
- Android性能优化系列之apk瘦身
Android性能优化系列之布局优化 Android性能优化系列之内存优化 为什么APK要瘦身.APK越大,在下载安装过程中.他们耗费的流量会越多,安装等待时间也会越长:对于产品本身,意味着下载转化率 ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
随机推荐
- java 保留字符串数字的位数,不够前面补0
@Test public void test() { this.printToConsole(autoGenericCode("10011")); this.printToCons ...
- context:component-scan标签的use-default-filters属性的作用以及原理分析
一.背景 我们在Spring+SpringMVC+Mybatis的集成开发中,经常会遇到事务配置不起作用等问题,那么本文就来分析下出现这种问题可能的原因以及解决方式. 二.分析及原理窥探 1.项目结构 ...
- 【纯css】响应式图片列表
示例演示 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...
- 双日历时间段选择控件—daterangepicker(汉化版)
daterangepicker的配置信息,记录下来方便设置: <pre name="code" class="html"><pre name= ...
- 土地购买(bzoj 1597)
Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ...
- MVC之Model转Json
在开发中,有时我们需要在View层中拿到Model返回的数据并且是一个Json对象,那么我们就可以利用Newtonsoft.Json.JsonConvert.SerializeObject(Model ...
- ***HTML +CSS 总结与归纳
一.首先W3C标准 结构.表现.动作 与 html.css.javascript相对应,它本意是结构表现分离,而且按照html规范编写结构. 标签方面: -所有标签都要小写.关闭.并且合理嵌套,i ...
- 解决Linux不能上网ping:unknown host的问题
修改配置文件:/etc/sysconfig/network-scripts/ifcfg-eth0 vim /etc/sysconfig/network-scripts/ifcfg-eth0 在里面添加 ...
- win10常用帮助
添加自启动项: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp shell:startup win10找回图片查看器: Win ...
- 【leetcode】House Robber
题目简述 You are a professional robber planning to rob houses along a street. Each house has a certain a ...