如何查看 apk 的组成
若是要优化 apk 的大小,咱们首先须要知道咱们编译出来的 apk 都包含哪些东西,而后针对占用大的作裁剪,或者删除不须要的东西,从而达到瘦身的目的。html
查看 apk 的内容占用状况很简单,打开 AS ,把 apk 拖到 AS 里面就能够查看 apk 包含的内容了。android
能够看到占大头的是 res 代码等,因此瘦身能够从这几个方面来考虑。git
如何减小 res 资源大小
- 删除冗余的资源
通常随着项目的迭代,部分图片等资源再也不使用了,可是可能仍然被编译到了 apk 里面,因此能够删除这部分再也不使用的资源,可使用 lint 工具来搜索项目中再也不使用的图片等资源。github
- 重复资源的优化
除了有冗余资源,还有些是文件名不同,可是内容同样的图片,能够经过比较 md5 值来判断是否是同样的资源,而后编辑 resources.arsc 来重定向。服务器
- 图片压缩
未压缩的图片文件占用空间较大,能够考虑压缩未压缩过的图片来瘦身。经常使用的工具是 tinypng 网站。微信
同时也能够借助 TinyPngPlugin 等插件或者其余开源工具来帮助压缩图片。app
- 资源混淆
经过将资源路径 res/drawable/wechat
变为 r/d/a
的方式来减小 apk 的大小,当 apk 有较多资源项的时候,效果比较明显,这是一款微信开源的工具,详细地址是:AndResGuardide
- 指定语言
若是没有特殊的需求的话,能够只编译中文,由于其余的语言用不上,若是用不上的语言编译了,会在 resource 的表里面占用大量的空间,故工具
android { defaultConfig { ... // 仅支持 中文 resConfigs "zh" } }
如何减小 so 库资源大小
- 本身编译的 so
release 包的 so 中移除调试符号。可使用 Android NDK 中提供的 arm-eabi-strip
工具从原生库中移除没必要要的调试符号。gradle
若是是 cmake 来编译的话,能够再编辑脚本添加以下代码
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")
- 别人编译的 so
联系做者修改,通常很难联系到。
- 动态下发 so
能够经过服务器下发 so , 下载完后再进入应用,可是体验很差,可是是一个思路。
- 只编译指定平台的 so
通常咱们都是给 arm 平台的机器开发,若是没有特殊状况,咱们通常只须要考虑 arm 平台的。具体的方法是 app 下的 build.gradle 添加以下代码
android { defaultConfig { ndk { abiFilter "armeabi" } } }
各个平台的差异以下:
平台 | 说明 |
---|---|
armeabi-v7a | arm 第 7 代及以上的处理器,2011 年后的设备基本都是 |
arm64-v8a | arm 第 8 代 64 位处理器设备 |
armeabi | arm 第 五、6 代处理器,早期的机器都是这个平台 |
x86 | x86 32 位平台,平板和模拟器用的多 |
x86_64 | x86 64 位平台 |
如何减小代码资源大小
- 一个功能尽可能用一个库
好比加载图片库,不要 glide 和 fresco 混用,由于功能是相似的,只是使用的方法不同,用了多个库来作相似的事情,代码确定就变多了。
- 混淆
混淆的话,减小了生成的 class 大小,这样聚沙成塔,也能够从必定层度减小 apk 的大小。
- R 文件内联
经过把 R 文件里面的资源内联到代码中,从而减小 R 文件的大小。
可使用 shrink-r-plugin 工具来作 R 文件的内联
参考文档
联系我
-
Github: https://github.com/XanderWang
-
Mail: 420640763@qq.com