APK怎么从18M减小到9M

APK怎么从18M减小到9M

背景

一开始由于业务的增加,导致APK的体积也与日俱增,已经增加到了18M,这对整个产品的推广的成本会受到影响,所以需要通过一系列的优化将APK降下来,经过了几个方面的优化之后,成功的使得apk降低了9-10M之多;

Lint审查–减少300-600K

Android Studio —>Analyze —>Inspect Code通过lint检查可以筛选出没有用到的资源(图片、layout)项目当中可能存在的BUG代码书写的不规范

不懂lint代码可以看另一篇文档 Android Lint 优化

图片压缩和图片转换为webP 可以减少6M

tinypng图片压缩神器

这是一个针对png或者jpg的图片压缩网站,我们都知道在Android打包的时候会自动针对图片进行无损压缩,但是如果对于图像画质要求不高的app(游戏、设计类的APP除外)可以使用tinypng进行75%(官方推荐)的压缩;

网址:https://tinypng.com/

webP格式转换

WebP(发音 weppy,项目主页),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8。根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使这些 PNG 文件经过其他压缩工具压缩之后,WebP 还是可以减少 28% 的文件大小。

WebP 的优势体现在它具有更优的图像数据压缩算法,能带来更小的图片体积,而且拥有肉眼识别无差异的图像质量;同时具备了无损和有损的压缩模式、Alpha 透明以及动画的特性,在 JPEG 和 PNG 上的转化效果都非常优秀、稳定和统一。

webP格式转换工具

智图isparta

Android 当中利用webP

在Android4.0之后,Android已经原生支持webP的使用,使用方法和以前使用png的图片一样(R.drawable.ic_launcher或者是R.mipmap.ic_launcher),但是需要注意的是如果图片有透明度(Alpha) 是在4.0.0的上如果使用webP的话会把Alpha给取消,知道Android4.2.+以上才会避免这个问题;所以如果你还有4.0.0到4.2之间的用户时请注意webP图片的使用限制;

如果在4.0.0以下的系统也是有办法支持webP的格式的,不过需要增加so和jar包,但是增加jar包和so包同样会增大apk的体积,在这里需要开发者自己衡量是否需要去使用;

Android 4.0以下使用webP的方法

通过Proguard混淆 可以减少1-2M

AS当中开启混淆

  buildTypes {

    release {

        //签名

        signingConfig signingConfigs.release

        //是否可debug调试

        debuggable false

        //混淆

        minifyEnabled true

        //Zipalign优化

        zipAlignEnabled true

        // 移除无用的resource文件

        shrinkResources true

        //加载默认混淆配置文件

        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

    }

}

proguard混淆规则

-keep class 保持这条规则下的内容不被混淆

-dontwarn 不需要理会 warn

 #保存 native方法不被混淆

-keepclasseswithmembernames class * {

native <methods>;

 }

 #View的构造函数

-keepclasseswithmembers class * {

    public <init>(android.content.Context, android.util.AttributeSet);

}



-keepclasseswithmembers class * {

    public <init>(android.content.Context, android.util.AttributeSet, int);

}

-keepclassmembers class com.example.wisdomoperating.activity.WidelyWebViewActivity{

    public *;

}



-keepclassmembers class * extends android.app.Activity {

   public void *(android.view.View);

}

#枚举类

-keepclassmembers enum * {

    public static **[] values();

    public static ** valueOf(java.lang.String);

}

#实现Parcelable的类

-keep class * implements android.os.Parcelable {

  public static final android.os.Parcelable$Creator *;

}

一些常用的第三方类的混淆

 # 友盟

-dontwarn com.umeng.**

-dontnote com.umeng.**

-keep public class * extends com.umeng.**

-keep class com.umeng.** {*;}

# 友盟

# 腾讯

-dontwarn com.tencent.**

-dontnote com.tencent.**

-keep class com.tencent.** { *;}

# 腾讯

# 百度地图

-dontwarn com.baidu.**

-dontnote com.baidu.**

-keep class com.baidu.** { *;}

# 百度地图

# OKHttp

-keep class com.google.android.gms.** {*;}

-dontwarn com.google.android.gms.**

-dontnote com.google.android.gms.**

-keep class com.squareup.okhttp.**$* {*;}

-keep class com.squareup.picasso.**$* {*;}

-dontwarn com.squareup.okhttp.**$*

-dontwarn com.squareup.okhttp.**

-dontnote com.squareup.okhttp.**

-keep class com.parse.** {*;}

-dontnote com.parse.**

-dontnote com.parse.**$*

-dontwarn com.parse.**$*

-keep class okio.** {*;}

# OKHttp

 注解 js不被混淆<br/>
-keepattributes *Annotation*

-keepattributes *JavascriptInterface*

微信资源压缩1-2M

微信资源压缩是微信2014年推出res资源混淆工具,现已经提供AS插件andresguard github地址

基本使用方法,官方文档已经给出,在这里要提醒大家需要注意的一点就是 whitelist 白名单;如果你的资源文件有通过resource反射获取的话,那必须要在白名单中写上,还有如果用了一些第三方的sdk,例如umeng或者sharesdk,这个时候也要把其string或者drawable放入白名单当中;还有一个需要注意的就是最后取包是去7zip压缩之后的包,因为这个apk压缩的更小,同样推荐在linux上进行压缩,apk会比windows小100-300k之间;

忽略其他语言版本

大部分应用其实并不需要支持几十种语言的国际化支持。还好强大的gradle支持语言的配置,比如国内应用只支持中文:

    android {

        defaultConfig {

            resConfigs "zh"

        }

    }

使用一套资源

对于绝大对数APP来说,只需要取一套设计图就足够了。鉴于现在分辨率的趋势放到xxhdpi目录。

相对于多套资源,在视觉上差别不大,很多大公司的产品也是如此,但却能显著的减少资源占用大小,顺便也能减轻设计师的出图工作量了。

注意,这里不是说把不是xxhdpi的目录都删除,而是强调保留一套设计资源就够了。

删除armable-v7包和x86包下的so

基本上armable的so也是兼容armable-v7的,armable-v7a的库会对图形渲染方面有很大的改进,如果没有这方面的要求,可以精简。

这里不排除有极少数设备会Crash,可能和不同的so有一定的关系,请大家务必测试周全后再发布。

相关参考文档连接

Android APP终极瘦身指南

APK瘦身看这一篇文章就够了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值