最后笔者收集整理了一份Flutter高级入门进阶资料PDF

以下是资料目录和内容部分截图



里面包括详细的知识点讲解分析,带你一个星期入门Flutter。还有130个进阶学习项目实战视频教程,让你秒变大前端。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  1. 反射调用类或者方法

其中第一种情况Android已经意识到,所以在默认的proguard文件中已经处理了,代码如下:

-keepclasseswithmembernames class * {

native ;

}

但是反射没有办法能很好的识别,所以如果代码中有使用反射需要自行处理,以免被删除。

shrink resource
  • 功能

shrink code流程执行完后删除了无用的代码后,就能确认哪些资源文件没有使用,shrink resource流程就是确定哪些资源没有使用并且删除。

  • 特点

shrink resource流程比较简单,所有在字节码中出现的资源不会被删除,但是有如下两种注意点:

1.通过Resources.getIdentifier()动态获取资源,当shrink resource删除资源时会对该API调用进行模糊匹配,反是匹配上的都不会删除,例如:

String name = String.format(“img_%1d”, angle + 1);

res = getResources().getIdentifier(name, “drawable”, getPackageName());

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

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

<?xml version="1.0" encoding="utf-8"?>

<resources xmlns:tools=“http://schemas.android.com/tools”

tools:keep=“@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*”/>

obfuscate

obfuscate 将类,方法,属性和变量重命名为短小且无意义的名字,减小包体积并且进行代码防护,Gradle 3.4及以后AndroidStudio不再使用ProGuard进行混淆,而是使用R8插件进行,但是会保留ProGuard的配置选项。

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

optimize为优化代码过程,会直接修改代码逻辑,如if判断始终为true时则会删除if判断和false代码块;当一个类只有一个方法且只有一处调用则会删除这个类并且将方法内链。

optimize过程能进一步缩减包大小

总结

充分理解Gradle编译过程中的优化流程有重要的意义,对我们APK优化有很大的启发,如微信对外开放的混淆资源名减小安装包大小的功能,同时对release 包出现的不一致现象能快速定位问题并且解决。

Android开发资料+面试架构资料 免费分享 点击链接 即可领取

《Android架构师必备学习资源免费领取(架构视频+面试专题文档+学习笔记)》

结语

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是目录截图:

由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。

再附一部分Android架构面试视频讲解:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

需要这份系统化学习资料的朋友,可以戳这里获取**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐