减小apk体积二

主流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左右;

瘦身无极限



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值