美文网首页
Android APP包瘦身总结

Android APP包瘦身总结

作者: dfqin | 来源:发表于2021-04-08 00:38 被阅读0次

一、原因

APP过大会影响用户的下载安装转化率。

二、APK构成

通过解压APK包分析,可以知道APK包的主要构成:

文件/目录 描述
lib/ 存放so文件
res/ 未被编译到resources.arsc中的资源文件,如layout、drawable、animator等
assets/ 存放资源文件,会原封不动的打包到包内,通过AssetManger访问
classes(n).dex java/kotlin代码编译后的字节码文件
resources.arsc 编译后的二进制资源文件,包含res/values中的内容如字符串、style等,和未编译进来的资源的路径,如layout、图片等
META-INF/ 文件的摘要和签名信息
AndroidManifest.xml Android的清单文件,用于描述应用程序的名称、版本、所需权限、注册的四大组件

根据上面的APK构成看下每个部分是否有瘦身空间。

三、so优化

1、自己编译so时优化;可以尽量使用c语言,或者减少使用C++模板等,使用strip删除符号表等方式减少so包的体积,更多细节可参考这篇文章
2、集成so时只选择一套so;目前Android设备最多支持7中CPU(armeabi,armeabiv-v7a,arm64-v8a,mips, mips64, x86, x86_64)架构,也就是说最多可以放7套so,但是目前基本没有x86和mips的手机,所以我们只需要关注arm的三套so,因为arm的CPU运行so时可以向下兼容,即armeabi的so可以运行在armeabiv-v7a和arm64-v8a的设备上,所以很多APP只保留了armeabi一套so(如点评和微信)。但是目前armeabi设备越来越少,兼容模式下运行so会有性能损坏,所以目前通常推荐只保留armeabiv-v7a一套so。细节可以看相关文章文章一、 文章二、 文章三、 文章四
3、动态下发加载so;感觉这种方法对一般APP没有必要,实现细节可以参考这里

四、resources.arsc文件优化

resources.arsc文件优化,目前做的比较好的是微信的AndResGuard
,它主要是通过混淆把路径优化成a/b/c的形式,不仅减少空间,也增加逆向难度。

R.string.name -> R.string.a   
res/drawable/icon -> r/s/a

五、代码和dex优化

  • 减少无用代码和无用库的引入,如果只用到一个库的部分功能,可以使用源码依赖以减少无用代码的引入。
  • 通过使用ProGuard来对代码进行混淆、优化、压缩,这个通常编译release包都会开启,只需要在gradle中配置minifyEnabled为true即可。
  • 优化dex中的debug Items。dex文件的data区中有个debug Items区域,主要存储函数参数变量局部变量、指令集行号和源文件行号。这个区域数据主要用于debug和获取调用堆栈,占dex包的5.5%左右,但是去掉的话crash日志分析就会比较麻烦,支付宝APP的方案可以参考一下。

六、资源优化之图片优化

为了支持不同屏幕密度,android支持ldpi|mdpi|tvdpi|hdpi|xhdpi|xxhdpi|xxxhdpi等多套图片资源,通常使用一套或两套图片资源即可满足需求。
关于图片格式选择,盗用一张图片如下,能够使用VectorDrawable的优先使用VectorDrawable,系统支持WebP的优先使用WebP((Android从4.0才开始支持WebP,Android 4.2.1开始支持包含透明的WebP),其他场景如果需要透明则使用PNG,否则可以使用JPG格式。关于图片压缩工具美团的这篇文章有介绍。

图片格式选择

七、资源优化之语言优化

一般APP只需要支持简体中文就行了,但是一些androidx库的文本支持多国语言,默认会把多国语言的文本打进包内,为了避免这种情况可以在gradle中明确支持的语言类型

android {
    ...
    defaultConfig {
        ...
        resConfigs "zh", "zh-rCN"
    }
    ...
}  

八、资源优化之开启资源压缩

资源文件中很多资源以及使用不到了,通过设置shrinkResources为true会将这些无用资源压缩(不删除,讲图片或layout替换为预定义好的很小的资源),设置方法如下:

 buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
        }
    }

参考文献:
安装包立减1M--微信Android资源混淆打包工具
Google I/O 2016 笔记:APK 瘦身的正确姿势
美团Android App包瘦身优化实践
Android App安装包瘦身计划
Android性能优化之安装包性能优化

相关文章

  • Android APP包瘦身总结

    一、原因 APP过大会影响用户的下载安装转化率。 二、APK构成 通过解压APK包分析,可以知道APK包的主要构成...

  • Android App安装包瘦身计划

    Android App安装包瘦身计划 Android App安装包体积优化: 理由, 指标和可以采用的方法. 本文...

  • App瘦身、性能优化总结

    App瘦身、性能优化总结 App瘦身、性能优化总结

  • Android应用瘦身实践

    参考文章 APK瘦身记,如何实现高达53%的压缩效果 Android APP终极瘦身指南 优化效果 优化前包大小是...

  • 从资源和代码两方面为App瘦身处理

    Git原文:从资源和代码方面为App瘦身处理       对App包瘦身处理是为了减少包的大小,节约用户下载App...

  • 性能优化题

    android性能优化 四个方面总结如下:稳定(内存溢出、崩溃)流畅(卡顿)耗损(耗电、流量)安装包(APK瘦身)...

  • APP包瘦身

    对 App 包大小做优化的目的,就是节省用户流量,提高用户下载速度。App Store 规定了安装包大小超过 15...

  • App包瘦身(一) —— App包瘦身初探(一)

    版本记录 版本号时间V1.02021.04.20 星期二 前言 随着App的持续功能迭代和常年的运营,最终包都会越...

  • iOS 应用包大小瘦身解决办法

    本文是借鉴 戴铭老师 iOS开发高手课 内容总结。 App 的安装包主要是由资源和可执行文件组成的。 App瘦身:...

  • 学习资料(二)

    Android7.0适配教程,心得 App瘦身最佳实践 Android热更新方案Robust Android推送技...

网友评论

      本文标题:Android APP包瘦身总结

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