******** ******** 第一部分: 瘦身内容介绍 ******** ********

项目新版本的迭代接近尾声, 因为历史累积问题, 导致有很多无效的资源让已经臃肿的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 (代码审查)的更多相关文章

  1. Android APK 瘦身 - JOOX Music项目实战

    导语 JOOX Music是腾讯海外布局的一个音乐产品,2014年发布以来已经成为5个国家和地区排名第一的音乐App.东南亚是JOOX Music的主要发行地区,由于JOOX Music所面对的市场存 ...

  2. Android Apk 瘦身大法

    原文地址: https://mp.weixin.qq.com/s/XS0tuLgTfyp4rW4h69wyQQ 一, 我们在多人开发项目 或者 遗留项目中开发时,会有些自己没用到的资源文件,但是自己也 ...

  3. APK瘦身属性——android:extractNativeLibs

    先描述一下结论: android:extractNativeLibs = true时,gradle打包时会对工程中的so库进行压缩,最终生成apk包的体积会减小. 但用户在手机端进行apk安装时,系统 ...

  4. Android APK瘦身方法小结

    众所周知,APP包体的大小,会影响推广的难度,用户不太喜欢下载太大的APP,同类型同等功能的APP中往往是包体小的更受用户的青睐,所以降低包体是一项非常必要的事情,也是最近公司的APP需要降低包体,所 ...

  5. android apk瘦身之 图片压缩 tinypng

    参考地址: http://blog.csdn.net/jy692405180/article/details/52409369 http://www.tuicool.com/articles/BraI ...

  6. Android APK瘦身之webp图片

    webp格式是谷歌推出的一种有损压缩格式,这种图片格式相比png或者jpg格式的图片损失的质量几乎可以忽略不计,但是压缩后图片的体积却比png或者jpg要小很多.亲测一个100kb的png图片经过we ...

  7. android apk瘦身

    1.在gradle使用minifyEnabled进行Proguard混淆的配置,可大大减小APP大小 通过Build.gradle进行配置 2.删除无用的Resource文件. 这个和上面的肯定不一样 ...

  8. Android性能优化系列之apk瘦身

    Android性能优化系列之布局优化 Android性能优化系列之内存优化 为什么APK要瘦身.APK越大,在下载安装过程中.他们耗费的流量会越多,安装等待时间也会越长:对于产品本身,意味着下载转化率 ...

  9. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

随机推荐

  1. Debian8.3如何设置默认不启动Gnome

    最近又光荣的回归了debian的怀抱,其实我就是跟风,现在做传媒平时也用不到多么高深的计算机知识,纯粹自己瞎鼓捣……嘿嘿,我相信有很多像我一样的人,刚刚装上了debian可以在同事面前华丽丽的装了一逼 ...

  2. 「C++11」Lambda 表达式

    维基百科上面对于 lambda 的引入是如下描述的: 在标准 C++,特别是当使用 C++ 标准程序库算法函数诸如 sort 和 find.用户经常希望能够在算法函数调用的附近定义一个临时的述部函数( ...

  3. LeetCode 205 Isomorphic Strings

    Problem: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if ...

  4. CISCO VLAN ACL

    对于cisco VLAN ACL 首先得定义 standard ACL或 extented ACL用于抓取流量 注意这里的抓取流量不是最终的对流量的操作,而是决定什么样的流量用VLAN ACL 来处理 ...

  5. mysql基准测试

    1. 及注册时有两种主要的策略:①正对整个系统的整体测试(集成式full-stack) ②单独测试mysql(但组件式基准测试single-component) 2.获取系统性能和状态(需要记录的数据 ...

  6. AndroidStudio使用过程中遇到的bug

    Ref:http://www.cnblogs.com/jingmo0319/p/5781878.html 1. Error:Execution failed for task ':app:transf ...

  7. C语言-纸牌计算24点小游戏

    C语言实现纸牌计算24点小游戏 利用系统时间设定随机种子生成4个随机数,并对4个数字之间的运算次序以及运算符号进行枚举,从而计算判断是否能得出24,以达到程序目的.程序主要功能已完成,目前还有部分细节 ...

  8. Hadoop单机模式安装-(1)安装设置虚拟环境

    网络上关于如何单机模式安装Hadoop的文章很多,按照其步骤走下来多数都失败,按照其操作弯路走过了不少但终究还是把问题都解决了,所以顺便自己详细记录下完整的安装过程. 此篇主要介绍如何在Windows ...

  9. Visual Studio前端开发工具/扩展

    怎么样让Visual Studio更好地编写HTML5, CSS3, JavaScript, jQuery,换句话说就是如何更好地做前端开发.Visual Studio 2010不管是旗舰版还是免费版 ...

  10. php转化IP为整形

    <?php function a($ip){ $intIP = ip2long($ip); return $intIP; } function b($intIP){ $IPStr = long2 ...