当前位置:首页 > 体育

shrink Android Gradle 编译过程中的优化

前言

AndroidStudio在编译APK的过程中做了很多优化,包括删除无用的代码,无用的资源等。本文具体介绍了具体的优化过程,在遇到编译问题时可以快速分析问题,解决问题。

编译优化

当使用Gradle编译APK的版本时,通常会将以下配置添加到buildTypes的版本标记中:

发布{

minifyEnabledtrue

shrinkResources true

proguard files GetDefaultproguardfile(' proguard-Android . txt '),' proguard-rules.pro '

}

其中,minifyEnabled和shrinkResources是优化的交换机。当两个开关都打开时,将在编译APK时执行以下优化过程:

以下重点介绍在上述过程中进行的优化。

收缩代码

功能 shrink code为删除没有用的类,方法,变量和属性的过程,该过程能很大程度缩减APK体积,如当使用一个aar中部分功能接口,没有使用的那部分将被删除,如下例所示:

其中,库中未被调用的类文件将被删除。

收缩代码过程需要知道入口点,换句话说,收缩代码需要知道哪些类是入口类,然后根据这个入口类构建一个调用链来确定哪些类、方法、属性和变量是未使用的。

入口的确定 shrink code的入口是根据proguard文件中keep标签的 以及代码中@keep的注解确定的,Android中的四大组件是默认的入口,如下两种情况代码可能被误删除:JNI中的native方法,没法找到调用链会被误删反射调用类或者方法 其中第一种情况Android已经意识到,所以在默认的proguard文件中已经处理了,代码如下:

-keepclasseswithmembernames类* {

本地<。方法>。;

}

但是没有办法识别反射,所以如果在代码中使用了反射,需要自己处理,避免被删除。

收缩资源

功能 shrink code流程执行完后删除了无用的代码后,就能确认哪些资源文件没有使用,shrink resource流程就是确定哪些资源没有使用并且删除。特点 shrink resource流程比较简单,所有在字节码中出现的资源不会被删除,但是有如下两种注意点:

1.通过Resources.getIdentifier动态获取资源当收缩资源删除资源时,会对API调用进行模糊匹配,但匹配的不会被删除,例如:

Stringname = String.format("img_%1d", angle + 1string name = String . format(" img _ % 1d ",角度+ 1

RES = GetReSources . GetIdentifier(name," drawable ",GetPackageName);

所有img_开头的图片资源都会被认为有调用,不会被删除img_开头的所有图片资源将被视为已调用,不会被删除

2.通过工具主动标记:保留标签以防止删除。通过创建res/raw/keep.xml文件并在该文件中主动标记来防止删除,如下所示:

& lt?xml version="1.0 "编码="utf-8 "?>。

& ltresources xmlns:tools = " http://schemas . Android . com/tools "

工具:keep="@layout/l_used*_c,@layout/l_used_a,@ layout/l _ used _ b * "/& gt;

使模糊

模糊将类、方法、属性和变量重命名为简短且无意义的名称,从而减小包的大小并保护代码。在Gradle 3.4之后,AndroidStudio不再为了混淆而使用ProGuard,而是使用R8插件,但保留了ProGuard的配置选项。

这里注意将反射调用的类和方法keep住,不然即使没被删除也无法调用到了optimize

要优化代码流程,优化会直接修改代码逻辑。如果if判断始终为真,则将删除if判断和假代码块。当一个类只有一个方法和一个调用时,该类将被删除,该方法将被链接。

优化过程可以进一步减小数据包大小

总结

充分了解Gradle编译过程中的优化过程,对于我们APK的优化有很大的启发意义,比如微信对外开放混淆资源名称的功能,减少安装包的大小,同时可以快速定位问题,解决发布包不一致的问题。

链接:https://juejin.im/post/5d36eacee51d454f73356e18

如有侵权,请联系我们,谢谢。

1.《shrink Android Gradle 编译过程中的优化》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《shrink Android Gradle 编译过程中的优化》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/tiyu/1073942.html

上一篇

谢娜调侃沈腾入围亚太区最帅面孔 具体是什么情况?

下一篇

国内油价最新消息:11月18日95/97号汽油价格查询

总胆红素偏高如何治疗 总胆红素偏高的原因及治疗方法

总胆红素偏高如何治疗 总胆红素偏高的原因及治疗方法

肝细胞性黄疸导致高总胆红素 间接胆红素和直接胆红素都偏高,这是由于肝细胞受损,无法将所有间接胆红素处理成直接胆红素,使得血液中的间接和直接胆红素偏高。此时高胆红素的原因是肝病,尤其是乙肝等病毒性肝炎,肝内、肝外梗阻性黄疸、胰头癌、毛细胆管肝炎等胆汁淤积综合征。 2.梗阻性黄疸导致高总胆红素...

金刚川电影国语完整版在线观看 高清未删减资源免费下载

  • 金刚川电影国语完整版在线观看 高清未删减资源免费下载
  • 金刚川电影国语完整版在线观看 高清未删减资源免费下载
  • 金刚川电影国语完整版在线观看 高清未删减资源免费下载

天官赐福动漫在线观看完整版 1-12集风车动漫免费资源

  • 天官赐福动漫在线观看完整版 1-12集风车动漫免费资源
  • 天官赐福动漫在线观看完整版 1-12集风车动漫免费资源
  • 天官赐福动漫在线观看完整版 1-12集风车动漫免费资源

变频模块 图文讲解变频器IGBT更换维修方法

  • 变频模块 图文讲解变频器IGBT更换维修方法
  • 变频模块 图文讲解变频器IGBT更换维修方法
  • 变频模块 图文讲解变频器IGBT更换维修方法

从结婚开始恋爱全集免费播放 全网资源1-35集在线看天天

  • 从结婚开始恋爱全集免费播放 全网资源1-35集在线看天天
  • 从结婚开始恋爱全集免费播放 全网资源1-35集在线看天天
  • 从结婚开始恋爱全集免费播放 全网资源1-35集在线看天天

海大鱼张予曦在线观看免费资源 1080P超清蓝光流畅播放

  • 海大鱼张予曦在线观看免费资源 1080P超清蓝光流畅播放
  • 海大鱼张予曦在线观看免费资源 1080P超清蓝光流畅播放
  • 海大鱼张予曦在线观看免费资源 1080P超清蓝光流畅播放

金刚川在线视频资源国语版免费观看 完整无删减手机在线播放抢先版

  • 金刚川在线视频资源国语版免费观看 完整无删减手机在线播放抢先版
  • 金刚川在线视频资源国语版免费观看 完整无删减手机在线播放抢先版
  • 金刚川在线视频资源国语版免费观看 完整无删减手机在线播放抢先版

海大鱼免费资源腾讯在线提前观看 全集高清免费观看西瓜视频

  • 海大鱼免费资源腾讯在线提前观看 全集高清免费观看西瓜视频
  • 海大鱼免费资源腾讯在线提前观看 全集高清免费观看西瓜视频
  • 海大鱼免费资源腾讯在线提前观看 全集高清免费观看西瓜视频