一、apk 分析工具:
使用 analyze Apk (2.2版本之后才有)
a、可以查看apk 组成及大小和占比等
b、查看dex文件组成
c、Apk对比
如下:直接把apk 拖拽到androidstudio 中。
二、apk 进行代码瘦身
a、代码混淆:把代码格式打乱,用特殊符号代替,以难理解的形式写成无意义的名字,防止被反编译。
android studio 自带的Proguard java 类文件处理工具,可以检测到无用的类和字段及变量,把代码中元素名称改短,移除冗余代码。
在app 项目的build.gradle文件中做如下处理:
在proguard-rules.pro中添加相应的混淆处理
b、三方库处理
统一功能相同的sdk三方库,比如图片加载库glide/pessico 、网络库retofit/okhttp等等,尽量选择更小的库,或者引用部分代码即可。
c、移除无用的代码
三、进行apk 资源瘦身
a、冗余资源:通过android studio 选择项目右键,然后选择Refactor—>RemoveUnused Resource----->
Preview,查看哪些资源没有用到:
b、图片压缩:使用插件TinyPngPlugin进行图片压缩,在官网(https://tinypng.com/developers)申请apikey ,在build.gradle文件中做以下配置:
在modle 添加 apply plugin: ‘com.waynell.tinypng’ 及以下配置:
c、资源混淆:AndResGuard 工具,使资源路径简化变短,例如:res/drawable/wechat变为r/d/a。
网址:https://github.com/shwenzhang/AndResGuard。
配置:apply plugin: ‘AndResGuard’
双击选中的任务,如下图:
四、so库瘦身
a、设置支持的so架构目录,so对应适配的cpu 架构它的运行效率是最高的,如果全部添加各种cpu架构,会导致apk 包会变大,一般选择armeabi目录即可,可以支持其他平台的架构。
b、优化方案
把所有的so 文件放到armeabi目录下,根据cpu架构选择相应的so 库文件。在调用so库的地方,编写以下代码:
String abi = “”;
if(Build.VERSION.SDK_INT <Build.VERSION_CODES.LOLLIPOP){
abi = Build.CPU_ABI;
}else {
abi = Build.SUPPORTED_ABIS[0];
}
if(TextUtils.equals(abi,"ARMV7")){
//加载特定的so
}else {
//正常加载
}
c、动态加载和插件化