加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

类比于微信,怎样对Apk举办极限压缩,谈下Android压缩8大步

发布时间:2019-10-12 10:18:22 所属栏目:业界 来源:SoftwareGames
导读:简介 跟着项目标不绝迭代,代码量跟资源文件不绝增多。那么就会呈现打包后的 APK 文件越来越大,假如溘然有一天你们老板或率领叫你优化 APK 巨细,你还不知道怎么优化那就有点说不外去了,这篇文章咱们就来一路说明并优化 APK 体积巨细吧。 说明 APK 资源

5. 开启夹杂

类比于微信,怎样对Apk举办极限压缩,谈下Android压缩8大步

优化了或许 1.7M 继承。

6.移除无用资源 shinkResource

开启 shinkResource = true

  1. buildTypes { 
  2. release { 
  3. minifyEnabled true 
  4. shrinkResources = true 
  5. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
  6. debug { 
  7. shrinkResources = true 
  8. minifyEnabled true 
  9. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 

类比于微信,怎样对Apk举办极限压缩,谈下Android压缩8大步

这个有也许 link 删除了无用资源,以是没有在优化了

7.开启删除无用资源 (严酷模式和平凡模式) - 这个我这里就不行测试,你们下来可以测试下结果

平凡模式也就是自界说模式

假如您有想要保存或舍弃的特定资源,请在您的项目中建设一个包括 标志的 XML 文件,并在 tools:keep 属性中指定每个要保存的资源,在 tools:discard 属性中指定每个要舍弃的资源。这两个属性都接管逗号脱离的资源名称列表。您可以行使星号字符作为通配符。

譬喻:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <resources xmlns:tools="http://schemas.android.com/tools" 
  3.  tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*" 
  4.  tools:discard="@layout/unused2" /> 

将该文件生涯在项目资源中,譬喻,生涯在 res/raw/keep.xml。构建不会将该文件打包到 APK 之中。

指定要舍弃的资源也许看似愚笨,由于您本可将它们删除,但在行使构建变体时,这样做也许很有效。譬喻,假如您明知给定资源外貌上会在代码中行使(并因此不会被压缩器移除),但现实不会用于给定构建变体,就可以将全部资源放入公用项目目次,然后为每个构建变体建设一个差异的 keep.xml 文件。构建器材也也许无法按照必要正确辨认资源,这是由于编译器会添加内联资源 ID,而资源说明器也许不知道真正引用的资源和刚巧具有沟通值的代码中的整数值之间的不同。

严酷模式

正常环境下,资源压缩器可精确鉴定体系是否行使了资源。不外,假如您的代码挪用 Resources.getIdentifier()(或您的任何库举办了这一挪用 - AppCompat 库会执行该挪用),这就暗示您的代码将按照动态天生的字符串查询资源名称。当您执行这一挪用时,默认环境下资源压缩器会采纳防止性举动,将全部具有匹配名称名目标资源标志为也许已行使,无法移除。

譬喻,以下代码会使全部带 img_ 前缀的资源标志为已行使。

  1. String name = String.format("img_%1d", angle + 1); 
  2. res = getResources().getIdentifier(name, "drawable", getPackageName()); 

资源压缩器还会赏识代码以及各类 res/raw/ 资源中的全部字符串常量,探求名目相同于 file:///android_res/drawable//ic_plus_anim_016.png 的资源网址。假如它找到与其相同的字符串,或找到其他看似可用来构建与其相同的网址的字符串,则不会将它们移除。

这些是默认环境下启用的安详压缩模式的示例。但您可以停用这一“防患未然”处理赏罚方法,并指定资源压缩器只保存其确定已行使的资源。要执行此操纵,请在 keep.xml 文件中将 shrinkMode 配置为 strict,如下所示:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <resources xmlns:tools="http://schemas.android.com/tools" 
  3.  tools:shrinkMode="strict" /> 

假如您确已启用严酷压缩模式,而且代码也引用了包括动态天生字符串的资源(如上所示),则必需操作 tools:keep 属性手动保存这些资源。

8. AndResGuard 微信资源压缩方案

什么是 AndResGuard

AndResGuard 是一个缩小 APK 巨细的器材,它的道理相同 Java Proguard ,可是只针对资源。它会将本来冗长的资源路径变短,譬喻将 res/drawable/wechat 变为 r/d/a。

为什么行使 AndResGuard

在以往的开拓中,我们凡是只夹杂了代码,资源文件却袒露在他人眼前,res 文件夹下全部文件名的可读性过强。

行使后的结果

类比于微信,怎样对Apk举办极限压缩,谈下Android压缩8大步

AndResGuard 的设置

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读