Android编译打包的过程

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

Q&A

  1. xml文件怎么打包到项目中?
  • 通过aapt的compile和link命令,将项目中的xml文件,编译链接到项目当中。
  • 其中xml文件的具体内容,是以二进制形式存储在原项目的目录下的。
  • 此外利用aapt在编译的同时,会对资源建立相应的ID,将布局资源、控件资源、String资源、Drawable资源等xml的文件ID统一存储到R.java之中用于索引,R.java会随着项目的源码一起被javac成class文件,后又被dx成.dex文件。R.java除了索引的功能以外,另一个功能是,如果res目录中的某个资源在应用中没有被使用到,在该应用被编译的时候系统就不会把对应的资源编译到该应用的APK包中,这样可以节省Android手机的资源。
    R.java源码
  1. 如何通过R.java文件来引用到所需要的资源
    2.1 在java类中使用 按照java的语法来引用即:R.resource_type.resource_name。此外安卓本身有很多资源文件可以使用,方法为头部加上Android.也就是Android.R.resource_type.resouce_name 2.2 在res目录下使用 通过“@drawable/icon”的方式获取,其中“@”代表的是R.java类,drawable”代表的是R.java中的静态内部类“drawable”,“/icon”代表静态属性“icon”,,而该属性可以指向res目录下的“drawable-*dpi”中的icon.png资源。此外相类似的也可以使用Android系统中自带的文件,方法为"@android:color/red"。
  2. 配置文件打包的时候会进app吗,打在apk对应的哪个文件下?
    会打包进apk文件,打包在AndroidManifest.xml中 4. flutter是怎么做到热部署,他的代码是怎么样快速应用到你的app上,而不需要走一个打包流程 To be continued

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

【附】相关架构及资料

往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值