主流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左右;
瘦身无极限