背景:随着业务迭代,Apk体积逐渐变大。项目中积累无用资源,未压缩的图片等都会增加apk的size,而Apk的size会影响app运行时的加载速度,使用内存,耗电量等等。
基础:Apk的结构如下简介:
//===============================
优化方案:
No1:Android Size Analyzer
Android Size Analyzer 工具可轻松地发现和实施多种缩减应用大小的策略。
选择 Analyze > Analyze App Size,对当前项目运行应用大小分析。分析了项目后,系统会显示一个工具窗口,其中包含有关如何缩减应用大小的建议
No2: 移除未使用资源
No3:启用资源缩减 (不打包)
aaaa.png
NO4:使用Lint分析器(物理删除)不建议的操作
lint 工具是 Android Studio 中附带的静态代码分析器,可检测到 res/ 文件夹中未被代码引用的资源。
lint 工具不会扫描 assets/ 文件夹、通过反射引用的资源或已链接至应用的库文件。此外,它也不会移
除资源,只会提醒您它们的存在。 与资源缩减不同,这里点击删除,那就是把文件删了。
反射引用资源:getResources().getIdentifier("layout_main","layout",getPackageName());
No5:指定备用资源: 这样就可以在不删除的情况下,针对某个国家的语言打包。
1.-->自己变异的so配置可以如上代码所示,
2.-->针对其他平台如:baidu地图,bugly等提供了全平台支持,我们可以使用productFlavor都项目配置,只关注项目运行设备的架构,比如:
对于arm64架构的设备,如果使用armeabi-v7a也能够兼容,但是不如使用arm64的so性能。因此现在部分应用市场会根据设备提供不同架构的Apk安装。此时我们需要打包出针对arm64的apk与armv7a的apk,可以使用productFlavor productFlavor.png No7: 图片处理:大图webp,小的icon使用矢量图svg,系统渲染每个 VectorDrawable 对象需要花费大量时间,而较大的图片则需要更长的时间才能显示在屏幕上。因此,建议仅在显示小图片时使用这些矢量图
其他的优化建议:
1,使用精简的依赖,如protobuf-lite版本;对于分模块的库按需引入
2,主动移除无用代码(开启R8、Progurad自动移除)
3,开启资源混淆:https://github.com/shwenzhang/AndResGuard
4,支付宝删除Dex debugItem https://juejin.im/post/6844903712201277448
5,发布Google paly的应用选择使用AAB https://developer.android.google.cn/guide/app-bundle
网友评论