1. -v:会以table的形式输出目录,
  2. table的表目有:Length、Method(压缩形式,deflate(同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法)Stored()直接存储,压缩率为0%)、Size、Ratio、Date、Time、CRC-32、Name。

android 源码 编译环境 android编译原理_XML

  1. aapt r base.apk AndroidManif 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 est.xml, 这个就是将apk中的AndroidManifest移除掉

android 源码 编译环境 android编译原理_面试_02

  1. aapt a <*.apk> <要添加的文件路径>, 这个就是将文件添加到打包好的apk文件中

其中.class为字节码的形式,用Intellj可以直接反编译打开,看到其中的内容,发现相比于.java文件,已经做了一定的优化

android 源码 编译环境 android编译原理_xml_03

用于生成apk

  1. 编译:aapt可以用于编译xml文件和图片文件

aapt2 compile -o extrahub/app/src/main/res/values/strings.xml

  1. 链接:合并编译阶段生成的文件,然后将其打包成一个apk文件。此外,在此阶段可以生成其他辅助文件,如R.java、ProGuard。但此时链接生成的apk文件并不全。

aapt2 link -o output.apk -I /Users/nxiangbo/Library/Android/sdk/platforms/android-28/android.jar myBuild/values_strings.arsc.flat myBuild/mipmap-xhdpi_ic_launcher.png.flat --manifest app/src/main/AndroidManifest.xml -v

  1. Dump:打印通过link命令产生的APK文件的资源和配置文件

aapt2 dump filename.apk [options]

apk文件分析 ```

android 源码 编译环境 android编译原理_XML_04

打开其中的文件全是火星文,之前一直遇到这种情况,这次深层次的百度了下,发现了不同的乱码其实也有规律可循。然而按照下述方法在FileEncoding里面转换,发现仍旧乱码,后来才得知AndroidManifest.xml已被编译成二进制文件,ps:下图为正常文件可能修复的方法:(与本文无关)

android 源码 编译环境 android编译原理_android 源码 编译环境_05

可以看到asset资源没有被改变 ! (upload-images.jianshu.io/upload_imag…

! (upload-images.jianshu.io/upload_imag… res中的xml文件也被编译成了二进制,名字也发生了改变(混淆),但其中的png内容都是可以直接打开的。 ! (upload-images.jianshu.io/upload_imag…

XML的解析方法

SAX解析方式

  • 对xml文档进行逐行扫描,一边扫描一边解析。
  • 当扫描到文档(document) 开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
  • 如果只需要文档前边或是中间一小部分数据,使用SAX解析就浪费了处理器资源,这时可以使用PULL解析
  • 事件驱动的XML解析方式,在读到文档开始和结束标签时就会回调一个事件,

在读取到其他节点 与内容的时候也会回调一个事件

Pull解析方式

  • PULL解析继承了SAX解析速度快、占用内存少等优点,
  • 同时它也保持了接口简单、编程容易等特点。
  • PULL解析器的工作方式为允许应用程序代码主动从解析器中获取事件,
  • 正因为是主动获取事件,因此可以在满足了需要的 条件后不再获取事件,结束解析。

Dom解析方式

  • DOM解析是W3C组织提供的标准,
  • 把所有内容一次性的装载入内存,并构建一个驻留在内存中的树状结构,然后根据节点之间

的关系来解析XML。

  • 把所有内容一次性的装载入内存,并构建一个驻留在内存中的树状结构,然后根据节点之间

的关系来解析XML。