Android性能优化-Apk瘦身(1)

接下来我们会聊一聊Android的应用瘦身。

1、Apk结构

Android性能优化-Apk瘦身(1)_第1张图片

上图是我用android studio打开一个apk文件所展示的截图,从上图我们可以看到,一个apk中有res、lib、dex、assets等文件组成,其中res、lib占了整个apk的70%左右的空间。

lib: 包含特定于处理器软件层的编译代码。该目录包含了每种平台的子目录,像armeabi,armeabi-v7a, arm64-v8a,x86,x86_64,和mips。大多数情况下我们可以只用一种armeabi-v7a,但目前各大应用市场都要支持64位,所以也会加上arm64-v8a。

assets: 包含应用可以使用AssetManager对象检索的应用资源。

res: 包含未编译到的资源 resources.arsc,主要有图片资源文件。

META-INF:包含CERT.SF和 CERT.RSA签名文件以及MANIFEST.MF 清单文件。

resources.arsc: 包含已编译的资源。该文件包含res/values/ 文件夹所有配置中的XML内容。打包工具提取此XML内容,将其编译为二进制格式,并将内容归档。此内容包括语言字符串和样式,以及直接包含在resources.arsc文件中的内容路径 ,例如布局文件和图像。

classes.dex: 包含以Dalvik / ART虚拟机可理解的DEX文件格式编译的类。

AndroidManifest.xml: 包含核心Android清单文件。该文件列出应用程序的名称,版本,访问权限和引用的库文件。该文件使用Android的二进制XML格式。

我们从上面结构图可以知道,我们需要重点的优化对象是res、lib、asset、classes.dex等文件。

2、lib瘦身

lib文件瘦身的,我们可以根据场景设置合适的支持so架构

如:

图片

早些时候,我们一般只需要支持armeabi-v7a就可以,但是随着近年来64位的设备越来越多,从性能和体验上出发,越来越多的应用市场要求必须支持64位的架构即arm64-v8a,所以一般要配置armeabi-v7a、arm64-v8a两种类型。

我们如何根据自己的产品去适配呢?

手机架构APP适配 armeabi armeabi-v7a arm64-v8a
armeabi 可以 可以 可以
armeabi-v7a 不可以 可以 可以
arm64-v8a 不可以 不可以 可以
  • 只适配armeabi的APP可以跑在armeabi,armeabi-v7a,arm64-v8上
  • 只适配armeabi-v7a可以运行在armeabi-v7a和arm64-v8a
  • 只适配arm64-v8a 可以运行在arm64-v8a上

3、classes.dex优化

我们classes.dex文件是程序编译后的字节码文件,所以要减少他的大小的,主要是通过减少代码来实现。

  1. 减少三方库的依赖;三方库功能比较齐全,但是我们只需要用到其中一个小功能点,此时我们可以通过借鉴三方库来实现我们的功能。

  2. 同一个功能使用了不同的三方库,例如图片即使用了glide库,又使用了fresco,同时又用了picasso,这就没必要了,完全可以合并一个库来使用。

  3. 去除andorid support库,当然现在大家都开始用androidx了。

你可能感兴趣的:(性能优化,android,性能优化,java)