对于缩小APk大小,除了开启混淆
minifyEnabled true
还有使用
shrinkResources true
两者区别:minifyEnabled 这个是用来开启删除无用代码,比如没有引用到的代码
shrinkResources 用来开启删除无用资源,也就是没有被引用的文件(经过实测是drawable,layout,实际并不是彻底删除,而是保留文件名,但是没有内容,等等),但是因为需要知道是否被引用所以需要配合mififyEnable使用,只有当两者都为true的时候才会起到真正的删除无效代码和无引用资源的目的
可以把dex文件减小:
minifyEnabled true
曾经遇到过加载.so文件时由于开启 minifyEnabled true 导致c方法实现natvie里面的不识别
**实验结果 **
// 未 放一张1.32M大的无用图片
原包apk 大小: 1.43M 占用空间 1.43M 解压后:2.62M 占空间2.93M (其中 dex包 2.1M res 220K占用空间 516K)
1. minifyEnabled =false& shrinkResources = false
大小: 1.43M 解压后:2.62M 占空间2.93M (其中 dex包 2.1M res 220K占用空间 516K)
2. minifyEnabled =true& shrinkResources = false
大小: 857K占用空间 860K 解压后:1.35M 占用空间 1.66M (其中 dex包 848K占空间852K res 220K占用空间 516K)
3. minifyEnabled =false& shrinkResources = true
编译报错:
Removing unused resources requires unused code shrinking to be turned on. See http://d.android.com/r/tools/shrink-resources.html for more information.
4. minifyEnabled =true& shrinkResources = true
大小: 847K占用空间 848K 解压后:1.33M 占用空间 1.62M (其中 dex包 848K占空间852K res 200K占用空间 476K)
// 放一张1.32M大的无用未引用的图片
//原包apk 大小: 1.43M 占用空间 1.43M 解压后:2.62M 占空间2.93M (其中 dex包 2.1M res 220K占用空间 516K)
放过无用图片包的大小: 2.75M 解压后:3.94M 占空间4.25M (其中 dex包 2.1M res 1.53M占用空间 1.82M)
2.1. minifyEnabled =false& shrinkResources = false
大小: 2.75M 解压后:3.94M 占空间4.25M (其中 dex包 2.1M res 1.53M占用空间 1.82M)
2.2. minifyEnabled =true& shrinkResources = false
// 原包大小: 857K占用空间 860K 解压后:1.35M 占用空间 1.66M (其中 dex包 848K占空间852K res 220K占用空间 516K)
编译报错:
Failed to create directory 'F:\AuditionTest\MyApplication\app\build\outputs\apk\debug'
2.3. minifyEnabled =false& shrinkResources = true
编译报错:
ERROR: Removing unused resources requires unused code shrinking to be turned on. See http://d.android.com/r/tools/shrink-resources.html for more information.
Affected Modules: app
2.4. minifyEnabled =true& shrinkResources = true
里面放的zhuomian.jpg大小 1.32M 使用这两个属性后,没有引用的drawalbe zhuomian.jpg大小 变为 ok
大小: 848K占用空间 852K 解压后:1.33M 占用空间 1.62M (其中 dex包 848K占空间852K res 200K占用空间 476K)
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug{
minifyEnabled true
shrinkResources true
}
}