apk优化,其实就是缩小apk的体积。最近在做一个海外贷款项目,对apk的体积大小有要求,不能大于8M,所以专门调研了一下apk优化技巧,并做记录。
apk体积优化关注点:
- 资源图片,小于200px的图片,建议使用SVG形式,进行矢量图适配,形成xml文件来使用,可以大幅缩小apk体积, 其他图片使用webp压缩。 使用方法: res --> new --> vector asset就可以生成SVG格式图片。在selector中也可以使用,只需要配置一下即可
- 国际化配置,限定使用的语言,可以缩小大概几百k的体积。在分析apk的时候,可以看到点击resources.arsc下,下面选择string,会发现有很多种语言出现,我们可以配置限定使用的语言,配置方法,在build.gradle中使用resconfigs指定语言为中文或者英文等
- 重点:so库,使用armeabi-v7a,因为查看微信apk,发现它也只是使用了armeabi-v7a的
- 移除无用资源,使用lint工具删除。在as中,analyze下,run inspection by name,然后输入unused resource,就会把未使用的文件找出来
- 代码混淆,代码压缩,使用motifyEnable设置为true
- 资源压缩,shrinkResource ,配置为true
- apk使用7zip极限压缩,会将apk压缩到很小。
App卡顿优化点:
- 内存抖动,启动速度,跳转,响应速度。频繁的内存抖动,也会导致App卡顿掉帧现象。
典型例子:
for(int i = 0;i < 50;i++){
String str = "hello world";
str = str + "i";
}
上面的代码就会造成频繁创建String对象和销毁String对象,导致频繁的gc,从而导致App卡顿。
跳转:在Activity A跳转到Activity B时,先执行Activity A的onPause,然后才执行Activity B的onResume方法,所以,应该尽量避免在onPause方法中做耗时操作。
- leakcanery工具检测内存泄漏,as的profiler也可以用来监控内存抖动和泄漏
- 内存抖动会伴随着大量的GC,频繁的GC也会导致App卡顿
App启动速度优化:
- 启动时间统计,可以使用命令 adb shell am start -W com.gpshet.wmfbuu.ewqcm/.activity.Start_Activity 来查看
thistime:最后一个activity启动耗时
totaltime:所有activity启动耗时
waittime:AMS启动所有activity总耗时 - App端优化方案: 属于伪优化
2.1、添加一个启动过程的过渡窗口,目的是提高启动响应体验,不会影响到冷启动速度,具体实现:
<!-- 提升app打开速率,实现秒开 -->
<style name="AppTheme.Launcher">
<item name="android:windowBackground">@mipmap/splash</item>
<!-- 下面这个方法可以取消启动黑白屏,但是点击桌面launcher时会有500ms左右的等待时间,体验不好 -->
<!-- <item name="android:windowDisablePreview">true</item> -->
</style>
2.2、application初始化的异步改造,在application的onCreate方法中会初始化很多第三方库,这些库如果不需要在主线程中启动,那么可以采用异步初始化的方法来优化。