主流apk大小
一 开启minifyEnabled代码混淆
除了能对代码优化混淆,还能对字节码文件进行优化,缩减体积,一般能减小500k左右
Proguard示例代码
-optimizationpasses 5 # 指定代码的压缩级别
-dontusemixedcaseclassnames # 是否使用大小写混合
-dontpreverify # 混淆时是否做预校验
-verbose # 混淆时是否记录日志
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所采用的算法
-keep public class * extends android.app.Activity # 保持哪些类不被混淆
-keep public class * extends android.app.Application # 保持哪些类不被混淆
-keep public class * extends android.app.Service # 保持哪些类不被混淆
-keep public class * extends android.content.BroadcastReceiver # 保持哪些类不被混淆
-keep public class * extends android.content.ContentProvider # 保持哪些类不被混淆
-keep public class * extends android.app.backup.BackupAgentHelper # 保持哪些类不被混淆
-keep public class * extends android.preference.Preference # 保持哪些类不被混淆
-keep public class com.android.vending.licensing.ILicensingService # 保持哪些类不被混淆
-keepclasseswithmembernames class * { # 保持 native 方法不被混淆
native <methods>;
}
-keepclasseswithmembers class * { # 保持自定义控件类不被混淆
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {# 保持自定义控件类不被混淆
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆
public void *(android.view.View);
}
-keepclassmembers enum * { # 保持枚举 enum 类不被混淆
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆
public static final android.os.Parcelable$Creator *;
}
-keepattributes Signature #过滤泛型
-ignorewarnings #忽略警告
#zxing
-dontwarn com.google.zxing.**
-keep class com.google.zxing.** { *;}
#gson
-dontwarn com.google.gson.**
-keep class com.google.gson.** { *;}
二 开启 shrinkResources
能够删除无用资源,一些临时占位的图片
这样开启上面二个功能就好了
三 使用tinypng有损压缩
png无损,jpg有损;jpg会有一定的压缩,占体积小;
启动页,引导页,大背景,此类图片大概130kb左右,可以使用jpg替代;
同一张图片,jpg比png大概小40%左右,瘦身大概300kb左右;
四 so库的合理建议
每每集成三方看见一大丢的so库感觉无法抉择
只能是参考别人的
armeabi
默认选项
支持所有 ARM* 设备
armeabi-v7a
支持基于 ARM* v7 的设备
支持硬件 FPU 指令
支持硬件浮点运算x86
x86
支持基于硬件的浮点运算的 IA-32 指令集
mips
支持二进制接口
根据so库功能决定;根据自身应用想达到的兼容效果决定
瘦身效果明显,可能瘦身0-10m左右
分析了几个大型应用,armeabi必须包含,x86选择性包含,其他指令集极少包含
微薄 armeabi
qq armeabi
微信 armeabi
uc浏览器 armeabi armeabi-v7a
美团 armeabi
天猫 armeabi
58同城 armeabi
今日头条 armeabi armeabi-v7a
这么牛逼的公司都选择armeabi ,你懂的
五 切图分辨率
六 对assets目录优化
assets目录下的db文件,静态文本都可以通过gzip之类的压缩
瘦身效果视静态文件大小,瘦身大概0-3m
七 选择性使用webp图片
参考网站
http://isux.tencent.com/introduction-of-webp.html
八 使用微信ResProguard方案
参考网站
http://blog.csdn.net/rzleilei/article/details/52205545
九 小细节处理 瘦身效果有限
1.一些纯色背景,边框使用shape文件替换
2.使用矢量图
Vector图像刚发布的时候,是只支持Android 5.0+的,对于Android pre-L的系统来说,并不能使用,所以,可以说那时候的Vector并没有什么卵用。
从AppCompat 23.2之后,Google对p-View的Android系统也进行了兼容,也就是说,Vector可以使用于Android 2.1以上的所有系统,只需要引用com.android.support:appcompat-v7:23.2.0以上的版本就可以了,这时候,Vector应该算是迎来了它的春天。
简单来说,一些矢量图可以用代码完成;
看具体情况,大概10kb左右;
瘦身无极限