Android性能优化-apk瘦身

背景

  • 随着业务的发展app体积越来越大,由刚开始的几M到后来的几十M。APP越来越大会导致用户使用成本会上升,进而导致用户的流失等等。。。。
    压缩APP,减小app体积刻不容缓!!!
  • 随着Android studio 3.0 发布,也随之提供了 Analyser 来分析apk
    image.png

apk结构分析

apk有lib、classes.dex、assets、resources.arsc、res等文件组成

  • lib/:存放so文件
  • classes.dex:Dalvik字节码
  • assets /:可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。
  • resources.arsc:编译后的二进制资源文件的索引(apk文件的资源表索引)
  • res/ :资源文件目录,包括图片、字符串等等。
    结构详细介绍请移步
    image.png

以上面截图为例我们apk瘦身的主要目标有了,主要是lib、res、classes.dex。话不多说,开始步入正题;

apk瘦身开始

1、lib

so文件与cpu的关系或者联系
可以看到,该目录下主要存放so文件的,so文件包括:armeabi、armeabi-v7a、arm64-v8a、mips、mips64、x86、x86_64等。
目前市面上的兼容市面是的手机主要保留armeabi-v7a和arm64-v8a就可以了
或者把so文件放在服务器上动态获取

buildTypes {
        release {
//省略其他配置
            ndk {
                //选择要添加的对应cpu类型的.so库。
                abiFilters 'arm64-v8a', 'armeabi-v7a'
            }
        }
    }

2、classes.dex

classes.dex中包含了所有的java代码,当你打包时,gradle会将所有模板力的.class文件转换成classes.dex文件,当然,如果方法数超过64K的话,需要多个classes.dex来存放。换句话说,就是减少代码量。我们可以通过以下方法来实现:

  • 减少不必要的第三方库的引用
  • 避免使用枚举
  • 避免引用重复功能的库(如glide,picasso,fresco,image_loader,只需引用一个就好)
  • 尝试自己造轮子
  • 开启minifyEnabled混淆代码
    等等

3、res

该目录下存放各种图片、布局文件以及资源文件等,优化步骤主要有

图片资源

  • 保真压缩图片
    可以使用一些图片压缩网站或者工具压缩你的资源文件吧,例如TinyPng、智图等。
  • 保留一套图片(xxxhdpi)
  • 使用webp格式
  • 合理的服用图片资源
  • 避免使用帧动画
  • 清除不使用的图片
  • 开启压缩
        release {
//省略其他配置
          minifyEnabled true  //混淆代码
            zipAlignEnabled true
            shrinkResources true //资源瘦身
    }
}

等等

语言资源
根据app使用范围,删除不一样的语音资源

 defaultConfig {
//隐藏其他配置
        resConfigs "zh-rCN"//只保留中文简体
    }

其他方面优化

合理使用lint工具,删除不在使用的资源文件和代码等等

传送门

熊猫压缩
智图压缩
Apk结构解析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章