Android 性能优化 - APK 瘦身

如何查看 apk 的组成

若是要优化 apk 的大小,咱们首先须要知道咱们编译出来的 apk 都包含哪些东西,而后针对占用大的作裁剪,或者删除不须要的东西,从而达到瘦身的目的。html

查看 apk 的内容占用状况很简单,打开 AS ,把 apk 拖到 AS 里面就能够查看 apk 包含的内容了。android

资源预览

能够看到占大头的是 res 代码等,因此瘦身能够从这几个方面来考虑。git

如何减小 res 资源大小

  1. 删除冗余的资源

通常随着项目的迭代,部分图片等资源再也不使用了,可是可能仍然被编译到了 apk 里面,因此能够删除这部分再也不使用的资源,可使用 lint 工具来搜索项目中再也不使用的图片等资源。github

  1. 重复资源的优化

除了有冗余资源,还有些是文件名不同,可是内容同样的图片,能够经过比较 md5 值来判断是否是同样的资源,而后编辑 resources.arsc 来重定向。服务器

  1. 图片压缩

未压缩的图片文件占用空间较大,能够考虑压缩未压缩过的图片来瘦身。经常使用的工具是 tinypng 网站。微信

同时也能够借助 TinyPngPlugin 等插件或者其余开源工具来帮助压缩图片。app

  1. 资源混淆

经过将资源路径 res/drawable/wechat 变为 r/d/a 的方式来减小 apk 的大小,当 apk 有较多资源项的时候,效果比较明显,这是一款微信开源的工具,详细地址是:AndResGuardide

  1. 指定语言

若是没有特殊的需求的话,能够只编译中文,由于其余的语言用不上,若是用不上的语言编译了,会在 resource 的表里面占用大量的空间,故工具

android {
    defaultConfig {
        ...
        // 仅支持 中文
        resConfigs "zh" 
    }
}

如何减小 so 库资源大小

  1. 本身编译的 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")
  1. 别人编译的 so

联系做者修改,通常很难联系到。

  1. 动态下发 so

能够经过服务器下发 so , 下载完后再进入应用,可是体验很差,可是是一个思路。

  1. 只编译指定平台的 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 位平台

如何减小代码资源大小

  1. 一个功能尽可能用一个库

好比加载图片库,不要 glide 和 fresco 混用,由于功能是相似的,只是使用的方法不同,用了多个库来作相似的事情,代码确定就变多了。

  1. 混淆

混淆的话,减小了生成的 class 大小,这样聚沙成塔,也能够从必定层度减小 apk 的大小。

  1. R 文件内联

经过把 R 文件里面的资源内联到代码中,从而减小 R 文件的大小。

可使用 shrink-r-plugin 工具来作 R 文件的内联

参考文档

Android App包瘦身优化实践

联系我

相关文章
相关标签/搜索