APK的打包流程/编译流程 aapt编译/aapt2编译

APK的编译流程

APK的目录接口

APK目录结构可见另一篇文章。

编译流程简化图

在这里插入图片描述

Android打包流程

aapt阶段

aapt工具编译res资源文件,将大部分xml文件编译生成二进制文件(图片文件除外),同时生成R.java文件和resources.arsc文件,resources.arsc中里面保存了资源的ID和在APK中的路径。

aidl阶段

如果项目中有使用AIDL,那么就会把.aidl文件编译成.java文件。

javaCompiler阶段

将所有.java文件(包括R文件和AIDL生成的.java文件),通过javac工具生成class文件。

dex阶段

将生成的.class文件和第三方库的.class文件通过dx工具生成classes.dex文件(如果有分包,那么可能有多个)。

apkBuilder阶段

aapt阶段中的资源文件、dex文件和第三方的非java资源包(.so),通过apkbuilder工具生成未签名的apk包。

jarSigner阶段

签名,jarsigner工具,如果是debug模式用默认签名,release模式用开发者的签名。

zipAligin阶段

对齐,通过zipalign工具对apk中的未压缩资源(图片、视频)进行“对齐操作”,让资源按4字节的边界进行对齐,使得资源访问速度更快。

各详细阶段的编译过程。

aapt阶段

aapt.exe工具

aapt.exe工具(The Android Asset Packaing Tool),位于android-sdk/platform-tools目录下。
在这里插入图片描述

概念

  • 使用aapt来打包res资源文件,生成 R.java、resources.arsc和 res文件,res文件分为 二进制 和 非二进制 文件,典型的非二进制文件如:res/raw和图片,它们保持原样,不被编译。
  • res目录有9种目录,如下:
  1. animator :这类资源以XML文件保存在res/animator目录下,用来描述属性动画。
  2. anim:这类资源以XML文件保存在res/anim目录下,用来描述补间动画。
  3. color:这类资源以XML文件保存在res/color目录下,用描述对象颜色状态选择。
  4. drawable:这类资源以XML或者Bitmap文件保存在res/drawable目录下,用来描述可绘制对象。例如,我们可以在里面放置一些图片(.png, .9.png, .jpg, .gif),来作为程序界面视图的背景图。注意,保存在这个目录中的Bitmap文件在打包的过程中,可能会被优化的。例如,一个不需要多于256色的真彩色PNG文件可能会被转换成一个只有8位调色板的PNG面板,这样就可以无损地压缩图片,以减少图片所占用的内存资源。
  5. layout:这类资源以XML文件保存在res/layout目录下,用来描述应用程序界面布局。
  6. menu:这类资源以XML文件保存在res/menu目录下,用来描述应用程序菜单。
  7. raw:这类资源以任意格式的文件保存在res/raw目录下,它们和assets类资源一样,都是原装不动地打包在apk文件中的,不过它们会被赋予资源ID,这样我们就可以在程序中通过ID来访问它们。例如,假设在res/raw目录下有一个名称为filename的文件,并且它在编译的过程,被赋予的资源ID为R.raw.filename,那么就可以使用以下代码来访问它:Resources res = getResources(); InputStream is = res .openRawResource(R.raw.filename);
  8. values:这类资源以XML文件保存在res/values目录下,用来描述一些简单值,例如,数组、颜色、尺寸、字符串和样式值等,一般来说,这六种不同的值分别保存在名称为arrays.xml、colors.xml、dimens.xml、strings.xml和styles.xml文件中。
  9. xml:这类资源以XML文件保存在res/xml目录下,一般就是用来描述应用程序的配置信息。

R.java 文件

R.java 文件是自动生成的,如下:

aapt2指令

1.res目录如下:
在这里插入图片描述
2、使用aapt2生成R.java时,需要先删除public.xml。
在这里插入图片描述
3.aapt2指令如下

aapt2 compile --dir .\res\ -o .\aapt\ --no-crunch --legacy
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学知识拯救世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值