新闻类App (MVP + RxJava + Retrofit+
2019-04-27 本文已影响264人
Peakmain
Github地址:新闻类App (MVP + RxJava + Retrofit+Dagger+ARouter)
优势
- 最主要的是转换率:下载转化率
- 头部App都有Lite版
- 渠道合作要求
APK组成
- 代码相关:classes.dex
- 资源相关:res,asserts,resources.arsc
-
so相关:lib
比如:反编译百思不得姐之后的结构
image.png
APK分析
Analyze APK
- Android studio 2.2之后
- 查看apk组成,大小,占比
- 查看Dex文件组成
- Apk对比
直接将apk拖到Android Studio中即可
image.png
性能分析工具
https://nimbledroid.com/
- 文件大小及排行
- Dex方法数,SDK方法书
- 启动时间,内存等
android-classyshark:二进制检查工具
- Github:https://github.com/google/android-classyshark
- 支持多种格式:APK,Jar,Class,So等
代码混淆
- 花指令,功能等价但改变形式
- 代码中各个元素改成无意义的名字
- 以便更能解的形式重写部分逻辑
- 打乱代码格式
- Proguard:java类文件处理工具,优化字节码
代码中元素名称改短,移除冗余代码
增加代码反编译难度 - 使用
配置minifyEnabled为true,debug下不要配置
proguard-rules配置相应规则 - 推荐博客:https://rockycoder.cn/android/2018/03/15/Android-proguard-rules.html
第三方库处理
- 基础库统一
- 选择更小的库,推荐:Android Methods Count(显示依赖库中得方法数 )
- 仅引入所需的部分代码
移除无用的代码
- 业务代码只增不减
- 业务太多不敢删除
- AOP统计使用情况
比如记录Task使用情况
@After("execution (com.peakmain.baselibrary.launchstarter.task.Task.new(..))")
public void newObject(JoinPoint joinPoint) {
Log.e("SectionAspect","new:"+joinPoint.getTarget().getClass().getSimpleName());
}
资源瘦身实战
-
冗余资源
image.png - 图片压缩
推荐网站:https://tinypng.com/ - 资源混淆
Github:https://github.com/shwenzhang/AndResGuard
冗长的资源变短
使用
添加依赖:看github
结果点击右侧的Gradle
image.png - 图片只保留一份
So瘦身
- so是Android上的动态链接库
- 七种不同类型的CPU架
so移除
- abiFilters:设置支持的so架构,一般设置armeabi即可
- 更优的解决方案
支持所有类型设备代价太大
都放在armeabi目录,根据CPU类型加载对应架构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{
//正常加载
}
其他方案
- 插件化
- So动态下载