安卓打包机制和拓展(持续补充)

安卓打包流程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上图打包流程分析:

1、应用资源文件(布局,图片)使用aapt(资源处理工具)进行处理(布局等文件生成R.java包含资源唯一ID,静态资源文件不做处理)。

2、aidl接口、应用的java代码、R.java文件进行编译生成Class文件(字节码文件)

3、然后使用dx工具将生成的class文件和三方库、其他class文件进行翻译、重构、解释、压缩等处理,变成dex文件

4、使用apkbuilder工具进行dex文件,其他静态资源文件等进行打包成APK文件

5、使用签名工具jarSinger对打包成的APK进行签名

6、最后对签名后的APK文件进行优化(字节对齐,加快定位资源索引的速度,增加应用运行效率,将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。对齐的作用主要是为了减少运行时内存的使用。)

aapt工具

全称 Android Asset Packaging Tool

res下的资源都会被编译成一个资源索引文件resource.arsc以及一个R.java类。asset下的资源不会编译,直接压缩进apk

作用:查看和处理apk中的资源文件,可通过其加深对apk文件结构的理解。

1、查看包名、版本号、权限等信息

2、查看资源列表

3、查看apk配置信息

4、编译安卓资源文件

dx工具

将class文件和jar包进行编译优化打包成dex文件。(AGP3.0.1之后使用的是D8)

为什么要打包成dex文件?

Dalvik 是 Google 设计的用于 Android平台的运行时环境,适合移动环境下内存和处理器速度有限的系统。但Dalvik虚拟机不支持直接执行字节码,因此需要对class文件进行进行翻译、重构、解释、压缩等处理(由 dx 进行进行该过程),生成 Dex 文件

^: 掌握dex文件结构,能够帮助其他技术开发:APK 的瘦身、热修复、插件化、应用加固、Android 逆向工程、64 K 方法数限制。

D8/R8工具

dex 编译器和混淆压缩工具

java ——》class——》D8——》R8——》Dex

apkbuilder/zipflinger工具

将manifest文件、resources文件、dex文件、assets文件等等打包成一个压缩包,也就是apk文件。(AGP3.6.0后使用zipflinger)

jarsign工具

JDK提供的签名工具为jarsigner,安卓专门的签名工具为apksigner。

jarsigner:只能进行v1签名

apksigner:可以进行v2、v3、v4签名

zipalign工具

apk中未压缩的数据进行4字节对齐,对齐的主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,对齐后就可以使用mmap函数读取文件,可以像读取内存一样对普通文件进行操作。如果没有4字节对齐,就必须显式的读取,这样比较缓慢并且会耗费额外的内存。

  • 如果使用的是 apksigner,只能在为 APK 文件签名之前执行 zipalign
  • 如果使用的是 jarsigner,只能在为 APK 文件签名之后执行 zipalign
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值