Apk瘦身

作者: xyzkaye | 来源:发表于2023-03-19 14:19 被阅读0次
    为什么要瘦身

    • 安装包变大,导致很多用户不愿意安装更新
    • 安装包变大,导致新用户不愿意下载
    • 安装包变大,流量使用增多,增加其他边际成本


    android组成内容.png
    android存储格式.png
    优化方式
    图片资源的优化

    图片选择的顺序

    首先先选择VD
    否则选择WebP
    之后如果有透明通道等选择PNG
    剩下的选则JPG

    • 使用矢量图片

    矢量图片只需要放置一份
    图片太长绘制时间长,制作复杂度高

    • 使用WebP

    WebP体积更小,4.2.1+支持透明度

    WebP转换方式

    1. Android Studio 选中图片-右键-convert to webp
    2. 下载WebP转换工具,进行图片统一压缩
    3. https://developers.google.com/speed/webp/docs/precompiled
    • 使用png

    有透明度,渐变,阴影的情况下选择png

    采用压缩工具对png进行

    1. 可以采用lmageOptim或者Pngyu对png进行压缩
    2. AAPT会使用内置的压缩算法来优化res/drawable/目录下的PNG图片,但也可能会导至本来已经优化过的图片体积变大,这里禁用aapt优化PNG图片。
    aaptOptions{
      cruncherEnabled = false
    }
    

    JPG图片压缩

    • 采用压缩工具,packJPG或者guetzli压缩 JPG图片

    其他图片优化
    纯色图片用代码实现,如shape

    减少图片资源放置份数
    放置xhdpi,xxhpi,(或者只放一份可以吗,有什么问题?)

    能用代码实现的图片尽量采用代码实现

    • 圆形图片,环形,渐变等都可以采用代码实现

    #######资源压缩

    开启资源压缩
    开启代码混淆与去除无用资源

    微信开源了AndResGuard工具,对资源进一步混淆


    AndResGuard.png
    其他优化
    • 冗余代码优化

    冗余代码:
    完全一致的代码或者只修改了空格和评论
    结构上和句法上一致的代码,例如只是修改了变量名
    插入和删除了部分代码
    功能和逻辑上一致的代码,语义上的拷贝

    用什么工具检测

    1. 使用工具,例如PMD
    2. PMD下载地址:https://pmd.github.io/

    怎么检测?
    • 下载后输入:/run.sh cpdgui
    • pmd-d /usr/sc -R rulesets/java/quickstart.xml-f text
    https://pmd.github.io/pmd-6.17.0/pmd_rules_java.html

    • Lint大法好

    未使用资源

    1. 检测末使用资源并删除
    2. Android Studio - Analyze - Run inspection by Name -unused resource

    无用代码优化及其他
    Analyze -> Run Inspection by Name -> unused declaration -> Module app -> OK

    • 压缩存储文件

      1. 导入7zip,压缩资源预置资源
      2. 使用时解压到本地,比如assert中的资源
    • 语言资源优化
      在build配置中配置resConfigs指定需要的语言类型

    defaultConfig {
        resConfigs "zh","en"
    }
    
    • 其他
    1. Splits根据不同的ABI以及不同的屏幕密度分别打包
      https://developer.android.com/studio/build/configure-apk-splits.html

    2. 重复的string, color优化

      • 过滤重复的string
      • 定义唯一的color名
    3. 减少Enum使用

      • 每减少一个ENUM文件可以减少1K左右的大小
      • 采用常量定义
    4. 优化引用的库

      • 去除不在使用的库
      • 优化过时的库
      • 仅仅提取使用的代码
      • 选用更小的外部库
    5. 音视频资源

      • 采用音频压缩工具,压缩音频,降低音频采样率,通道数等在不明显影响效果的前提下压缩音频
    6. So动态下发

      • So可以采用动态下发的方式加载 (下载失败怎么办?)
      • 仅仅只需要加载对应abi下的so
    7. 指定abi

      • Gradle中指定abiFilter
    ndk {
            abiFilters "armeabi - v7a","x86"
    }
    

    相关文章

      网友评论

          本文标题:Apk瘦身

          本文链接:https://www.haomeiwen.com/subject/vjizkdtx.html