编译过程
第一步:
工具:aapt
输入:assets目录,AndroidManifest.xml,res目录
输出:resources.ap_,R.java
其中,resources.ap_其实就是一个压缩文件,将其重命名为resources.zip,解压后可看到内容包括
assets目录(保持原样),
res目录(类型为res/animator、res/anim、res/color、res/drawable(非Bitmap文件,即非.png、.9.png、.jpg、.gif文件)、res/layout、res/menu、res/values和res/xml的资源文件会转换为二进制文件,图片等保持原样),
AndroidManifest.xml(已转换为二进制文件),
resources.arsc(资源索引表,二进制文件,存放的时xml资源的地址,位于寄存器中,便于快速高效访问)。
第二步:
工具aidl工具
输入:aidl文件
输出:对应的.java文件
第三步:
工具:javac
输入:程序的.java文件,第一步生成的R.java文件,第二步aidl生成的相关.java文件,引入的包(.jar)等
输出:.class文件
第四步:
工具:dx.bat工具
输入:第三步生成的所有.class文件
输出:一个classes.dex文件
第五步:打包签名
输入:第一步resources.ap_中的四个文件(assets目录,res目录,AndroidManifest.xml,resources.arsc),第四步的classes.dex文件,libs目录(.so文件等)
输出:.apk文件
第一步:
工具:aapt
输入:assets目录,AndroidManifest.xml,res目录
输出:resources.ap_,R.java
其中,resources.ap_其实就是一个压缩文件,将其重命名为resources.zip,解压后可看到内容包括
assets目录(保持原样),
res目录(类型为res/animator、res/anim、res/color、res/drawable(非Bitmap文件,即非.png、.9.png、.jpg、.gif文件)、res/layout、res/menu、res/values和res/xml的资源文件会转换为二进制文件,图片等保持原样),
AndroidManifest.xml(已转换为二进制文件),
resources.arsc(资源索引表,二进制文件,存放的时xml资源的地址,位于寄存器中,便于快速高效访问)。
gen目录下生成R.java文件,赋予每一个非assets资源一个ID值,这些ID值以常量的形式定义在一个R.java文件中
参考下图:
第二步:
工具aidl工具
输入:aidl文件
输出:对应的.java文件
第三步:
工具:javac
输入:程序的.java文件,第一步生成的R.java文件,第二步aidl生成的相关.java文件,引入的包(.jar)等
输出:.class文件
第四步:
工具:dx.bat工具
输入:第三步生成的所有.class文件
输出:一个classes.dex文件
第五步:打包签名
输入:第一步resources.ap_中的四个文件(assets目录,res目录,AndroidManifest.xml,resources.arsc),第四步的classes.dex文件,libs目录(.so文件等)
输出:.apk文件
.apk文件解压后发现多了个META-INF目录,这是存放签名信息的目录
如下图: