Android apk 瘦身

Android apk 瘦身

开发过程中apk不可避免的会越来越臃肿,在升级更新时会消耗越多的流量,占用用户更多的存储空间,影响产品的转化率,所以很有必要对apk进行瘦身。网上有很多关于apk瘦身的优秀文章,这里只是简单做个记录。

使用Android studio分析apk大小

点击Build–>Analyze APK,选择要分析的apk文件,可以看到apk中不同资源所占比例大小。接下来就可以针对性的对apk进行瘦身了
这里写图片描述

APK瘦身

  1. 去除一些第三方库
    由于项目中用到百度导航,融云等第三方服务,导入这些资源后,发现apk变的很大,出于减少apk大小的目的,只保留armeabi一个目录。这里如果只保留一个目录,注意依赖的module中的对应目录也要去除。

  2. 查找并清除无用资源
    使用Android studio自带的lint工具查找无用资源,有以下两种方式:
    a. Analyze–>Inspecting Code,选择是对整个工程查找,还是对module查找。
    这里写图片描述

    这里写图片描述

    b. Analyze–>Run Inspection by Name,搜索Unused resouces
    这里写图片描述

    对于Android Lint分析出来的结果,确认无用后,直接删除即可。在删除图片时,运行时出现报错,发现是在无用的布局文件中用到,删除无用布局文件后正常。

  3. 使用tinyPng对图片进行压缩处理
    tinyPng官网地址:https://tinypng.com/

    每个apk中都会用到很多图片,图片往往在apk包中占有很大的空间,对图片的压缩处理变的很必要了。tinyPng支持对png/jpg/.9图片的压缩,在图片不失真的情况下可以多次压缩。
    这里写图片描述

    可以看到压缩比例还是挺大的,而且和原图相比看不出什么区别。

  4. 使用WEBP,SVG图片资源格式
    WebP是Google在2010年发布的一种新型图片格式,支持无损和有损压缩。在无损压缩方面,同质量的WebP图片比PNG的体积小26%,而在有损压缩方面,同质量的WebP图片比JPEG小25-34%。WebP在不降低图片质量的同时,减少了约三分之一的体积。

    这里提供一个在线转换webp工具:http://zhitu.isux.us/

  5. 对代码进行混淆

在app下的build.gradle文件中添加如下代码:
    buildTypes {
        release {
            minifyEnabled true
            // 混淆文件的位置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

在proguard-rules.pro文件中编写自定义混淆代码:

#-----------------混淆配置设定------------------------------------------------------------------------
-optimizationpasses 5                                     #指定代码压缩级别
-dontusemixedcaseclassnames                               #混淆时不会产生形形色色的类名
-dontskipnonpubliclibraryclasses                          #指定不忽略非公共类库
-dontpreverify                                            #不预校验,如果需要预校验,是-dontoptimize
-ignorewarnings                                           #屏蔽警告
-verbose                                                  #混淆时记录日志
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*    #混淆时所采用的算法

#-----------------不需要混淆第三方类库---------------------------------------------------------------
-dontwarn android.support.v4.**                             #去掉警告
-keep class android.support.v4.** { *; }                    #过滤android.support.v4
-keep interface android.support.v4.app.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment

#-----------------不需要混淆系统组件等----------------------------------------------------------------
-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.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);
}

对apk的瘦身暂时写到这里,当然还有很多其他方式,以后会慢慢研究使用。

路漫漫其修远兮,吾将上下而求索!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值