最近刚接手一项目,项目开发已经差不多了,因为我也不是很熟悉项目业务所以做了两个页面的需求后变开始转到了apk瘦身这块。之前也做过瘦身下面简单来说一下具体实现吧。首先我们需要打一个正式的apk,这里说一下几个坑,刚开始打的时候用的studio的可视化页面,一直报" Task :app:mergeReleaseResources Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details"错误,关键看不到错误日志。后来便用命令在studio的Terminal打包,一下子看到错误了原来是图片的问题。
命令行打包
执行命令:
gradle assembleRelease 生成release版本
gradle assembleDebug 生成debug版本
mac 伙伴请自觉 把gradle换成 ./gradlew
渠道的release版本,执行如下命令就好了:
gradlew assemble+(渠道名字自定义)+Release/Debug
图片错误
/Users/wavewave/AndroidStudioProjects/MyWork/app/src/main/res/drawable-xhdpi/bg_blue_gradient2.png: error: failed to read PNG signature: file does not start with PNG signature.
错误:读取PNG签名失败:文件不是以PNG签名开始的。
图片格式出问题了 可能是后缀更改了,可能是图片压缩时产生的问题。
解决方法:
找UI重新切图呗
打包一般都要混淆,在app--build---android里面配置
buildTypes {
release {
minifyEnabled true//是否开启混淆
shrinkResources true //是否去除没有引用资源
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.relealse
}
debug {
signingConfig signingConfigs.debug
}
}
你要的混淆配置都在这
配置完就可以打包了,这次我用的可视化操作的。。。。。。。。
一般生成的apk目录都在 app---release目录下,双击apk查看详细信息,
命令生成的目录
工具生成目录
第一步
使用Lint 先检查没有引用的资源
Android studio 顶部导航
输入unused resources 回车,由于我们项目是好多人写的,一些lib 工程就不去检查了所以我选择了
只检查app里面的,发现了220个没有引用到到xml、图片和资源。。。。。一个一个删除吧。
我们用的xhdpi的一套图片,继续分析发现有几张图片比较大 都是几百k,
不多说压缩吧,推荐一个免费压缩网站还不错哦。
图片压缩 了百分之九十几,也不怎么失真不错吧!
赶紧打个包看看体积,期待期待!!
还不错减少了多少体积-------算一下 52.2-45.8 一下子就少了这么多好开心那!
继续进行
这下子就剩下 lib的so库和dex了
由于我不是项目主要负责人,,,所以没有优化代码
lib库我查了一些资料列出来
数据是 2017/4/8看的市场最新版,采集的几个代表性样本如下:
仅有 armeabi : 微博,今日头条,淘宝,QQ,微信。
armeabi 与 armeabi-v7a: UC 浏览器。
armeabi,armeabi-v7a,armeabi-x86:优酷,哔哩哔哩动画。
7种类型全有:知乎。
删除吧,老大说不能这样优化于是我。。只好改一下配置了
app--build---android下
ndk {
//设置支持的SO库架构
abiFilters 'arm64-v8a', 'armeabi' //, 'x86', , 'x86_64', 'arm64-v7a','mips','mips64'
}
体积一下子少了一半。上图
坚持记录吧!为了找一份更好的工作,不致于面试聊两句就让等通知,"咱们先到这把,有消息再通知你!门在那!!!!!"