我日常在项目开发中,刚开始的APK包可能不太大,可是随着时间的变迁,项目的迭代,慢慢的就回发现打出来的APK包愈来愈大,包每大一点可能用户下载的欲望就小一些,因此在日常的项目迭代过程当中,对APK瘦身的工做也要持续进行,这篇文章就会记录一下从几个方面对apk进行瘦身java
咱们生成一个包,把包拖到Android studio中就能够看到包的构成了android
apk的构成如上图,下面具体看下各个部分都是什么git
apk的构成咱们已经有了初步的了解,接下来咱们就能够对apk进行瘦身优化了github
android {
buildTypes {
release {
minifyEnabled true
}
}
}
复制代码
在proguard-rules.pro编写混淆规则web
android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
}
}
}
复制代码
shrinkResources和minifyEnabled必须同时开启才有效api
特别注意:这里须要强调一点的是开启以后无用的资源或者图片并无真正的移除掉,而是用了一个同名的占位符号,咱们拿图片举例来看一下bash
如上面两张图所示,best.png图片并无使用到,大小为3.3K,属于无用资源 ,在开启 shrinkResources以后,发现best.png确实打包进apk中了,但大小变成了67B,具体内容是个小黑块的占位符微信
咱们经过Android studio提供的lint工具去排查没有使用到的资源文件,而后让无用的资源文件删除掉 经过Analyze - Run Inspection By Name... 选项 ,而后输入 unused resources来查找无用的资源文件架构
如上图所示无用的资源文件就找到了就能够对其进行删除工具
咱们经过Android studio提供的lint工具去排查没有使用到的代码,而后让无用的代码删除掉 经过Analyze - Run Inspection By Name... 选项 ,而后输入 unused declaration来查找无用的代码
特别注意:经过反射引用的方法或者类,lint是识别不了的,也会给检查出来,因此在删除的时候要特别注意,经过的反射引用的方法或者类千万不能删除
能够经过如下几种方式就图片进行压缩
不少点击效果或者背景图可能会使用到图片,能够换成shape进行代替实现,可以有效的减小apk大小
Android应用自己是支持国际化的,但国内的项目好多都是在国内使用,不须要国际化,这时候能够对相关的String进行减法操做,使其只包含特定的语言(例如中文)
android {
defaultConfig {
...
//语言资源,只支持中文
resConfigs "zh-rCN"
}
}
复制代码
如上图所示经过resConfigs配置,打包进apk的语言就只有中文了
使用微信大神张绍文的AndResGuard工具对项目的资源文件进行混淆,在压缩apk大小的同时,提高了反破解难度
具体的源码和使用方法以下 github.com/shwenzhang/…
咱们在引入第三方sdk时,有不少sdk都有对应的so库,且给到的so库分好多架构(armeabi,armeabi-v7a,x86等等)
Android系统目前支持如下七种不一样的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起)
全部的架构设备x8六、x866四、armeabi-v7a、arm64-v8a都支持armeabi架构的.so文件,因此咱们能够根据本身的业务需求选择使用armeabi或者armeabi-v7a进行支持
好比 微信,QQ ,网易云音乐等不少大的应用就只保留了armeabi-v7a
android {
defaultConfig {
ndk {
abiFilters 'armeabi','armeabi-v7a'
}
}
}
复制代码
如上图因此优化完成以后apk的lib包中就只有'armeabi','armeabi-v7a'两种架构了
项目瘦身是一项旷日持久的工做,也只有就apk的构成有所了解以后才能更好的对apk进行瘦身,经过上面的步骤以后你的apk必定会有不同的变化