首先来看一个生成Andriod 程序的步骤
首先
生成一个R.java文件,调用aapt源码目录下的Resource.cpp中的buildResource函数,检查AndriodMainifest.XML合法性
然后对res目录下的资源子目录进行处理。处理函数为makeFileResources(),处理内容为资源文件名合法性检查(没啥用)
不行 我要简练一点。我觉得需要注意的就是 最后的compileXmlFile()对res目录的子目录的xml分别编译,和经过compileResourceFile()编译过得res
和asserts目录下的资源生成resources.arsc文件打包压缩成resouces.ap_文件
(貌似并不简练啊!需要总结)
第二步
处理aidl文件,生成相应的java文件
第三步
调用javac编译工程下的src目录下的所有java源文件
第四步
//终于轮到我们的Dalvik登场了。
转换所有的class文件,生成classes.dex
第五步
打包生成APK
第六步
对APK文件进行签名
第七步
对签名后的APK进行处理
//前排提示,后面感觉有类似于PE文件结构的东西出现,那时候我看WIN的PE看了若干天都没看明白
//而且还会忘
DEX文件格式
这里就写一下关于dex文件用到的数据类型中的
sleb128 有符号LEB128 可变长度1-5个字节
uleb128 无符号LEB128 可变长度1-5个字节
uleb128p1 无符号LEB128+1 可变1-5个字节
这些都是dex特有的LEB128,每个LEB128由5个字节组成,组合在一起可以表示一个32位的程序
每个字节只有7位有效,开头为1则表示需要后面的字节,为0则不需要 直到第五位
//关于DEX文件整体结构还是不搬运上来了。。我选择狗带
最后的最后还是必须 搬运DexCode结构。
1.registersSize 字段制定了方法中使用的寄存器个数,就是Smali语法里的.register 指令的值
2.Insize字段指定了方法的参数个数 对应.paramter 指令
3.outsSzie调用外部方法的时候使用的寄存器个数
4.triesSize 指定方法中Try/Catch作用
想想最后仍然需要各种结构体组合起来看才能真正发挥作用。