android java编译_Android APP 编译流程

流程

编译

DEX

打包

签名

对齐

对齐的作用

根本目的是帮助操作系统更高效率的根据请求索引资源,可以减少CPU访问内存的次数,但是缺点是增加了存储空间

android 编译流程:

8a4e52764534

android-build-flow.jpg

APK包结构

r 文件夹

项目工程中的 res目录,包括图片、字符串等等

该目录下的资源会被映射到R.java文件中

assets 文件夹

文件夹目录保留工程中assets目录,其他工程下的、jar包中的assets也会合并到该assets目录下,该目录下的资源不会被映射到R.java文件中,访问的时候需要AssetManager类

lib 文件夹

包含所有的so文件,so目录的路径保留原有的路径

META-INF目录

信息描述,签名

所有文件的SHA1-Digest 签名,防止其他程序篡改apk包中的文件

AndroidManifest文件

用来做组件查找

classes.dex文件

虚拟机执行的文件

resources.arsc文件

资源文件索引

D8 R8 和 DEX 的区别

D8 和 DX 比较

编译速度更快

输出的 .dex 文件更小

同时却能保持相同乃至更出色的应用运行时性能。

D8通过脱糖支持Java8,开启android.enableD8.desugaring的话,会影响所有读写.class字节码的开发工具,因为会使用JAVA8格式。如果不想.class文件中有JAVA8则可以将android.enableD8.desugaring关闭,则可以将JAVA8的特性转为JAVA7的特性。

D8脱糖

脱糖合并进D8可以减少编译时间,优化更多代码,但是字节码处理工具必须支持JAVA8

.class -> desugar -> ... -> D8 -> .DEX

.class -> [desugar-D8] -> .DEX

Jack编译器

之前的编译

graph LR

Java_Source-.Javac.->Java_ByteCode

Java_ByteCode-.dx.->dex

Jack编译:依赖Java字节码的第三方库在新的编译器体系下就不能使用了,成本偏大

graph LR

Java_Source-.Jack_Compiler.-dex

R8

R8的流程

desugaring(脱糖)

shrinking (压缩)

obfuscating(混淆)

optimizing (优化)

dexing (打包成dex)

R8包含D8所有功能

R8新增的功能

代码压缩:安全地从App及其库依赖项中删除未使用的类,字段,方法和属性。

资源压缩:从打包的App中删除未使用的资源,包括应用程序库依赖项中未使用的资源。它与代码压缩一起使用,这样一旦删除了未使用的代码,也可以安全地删除不再引用的资源。

代码混淆:使用简短无意义的名称重命名代码里的类,字段和方法,从而减少DEX文件大小。R8和Proguard 相比,R8 可以更快地缩减代码,同时改善输出大小

代码优化:删除未使用的代码或重写代码使其更简洁。

dex 拆分

refrence

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值