《android framework常用api源码分析》之apk打包过程解析
《android framework常用api源码分析》android生态在中国已经发展非常庞大了,一方面是因为手机移动端的覆盖,另一方面是从事android开发的人也月来越多。那么用人单位对android要求也变高了,对android不仅要熟练使用而且要懂得原理。而就程序员自身阅读源码有什么那些?这里我通过自己理解归纳了一下。
1、提高程序执行效率,正确理解api可以高效使用,优化内存和执行效率。
2、避免八阿哥强势逆袭,android开发同学都知道android找bug比较麻烦,尤其是一下jni底层调用错误信息不够明确地方更加难找。
3、帮助自己写出优雅的代码,开发需要规范,而源码中有很多优秀的谷歌规范。
4、优秀的设计模式,帮助自己提升程序造诣。
5、黑科技,通过反射高一些api不能够达到的功能,例如插件化、热更新。
上面是简单个人理解,有更多补充欢迎留言。所以这里准备出一个系列的文章来分析android framework api, 这些文章也是来自整理于网络,所以要高些那些具有分享精神的大神们。
文章目录:
- apk 打包过程解析。
- handler 消息机制。
- AsyncTask 异步任务。
- HandlerThread handler线程。
- IntentService意图服务。
- Zygote进程。
- SystemServer进程。
- Launcher 程序。
- app 进程启动流程。
- 系统app启动安装流程。
- app应用安装流程。
- Activity启动流程。
- LruCache内存缓存
平时开发过程中我们通过android studio编写完成android项目之后直接点击 Run ‘app’就可以在build/outputs/apk生成可以在android设备中安装的apk文件了,但是其中流程用到什么工具这些东西也是很重要知识点?
我们可以根据Google官方提供的流程图来具体了解构建的过程:
通常的构建过程就是如上图所示,下面是具体描述:
1.AAPT(Android Asset Packaging Tool)工具会打包应用中的资源文件,如AndroidManifest.xml、layout布局中的xml等,并将xml文件编译为二进制形式,当然assets文件夹中的文件不会被编译,图片及raw文件夹中的资源也会保持原来的形态,需要注意的是raw文件夹中的资源也会生成资源id。AAPT编译完成之后会生成R.java文件。
2.AIDL工具会将所有的aidl接口转化为java接口。
3.所有的java代码,包括R.java与aidl文件都会被Java编译器编译成.class文件。
4.Dex工具会将上述产生的.class文件及第三库及其他.class文件编译成.dex文件(dex文件是Dalvik虚拟机可以执行的格式),dex文件最终会被打包进APK文件。
5.ApkBuilder工具会将编译过的资源及未编译过的资源(如图片等)以及.dex文件打包成APK文件。
6.生成APK文件后,需要对其签名才可安装到设备,平时测试时会使用debug keystore,当正式发布应用时必须使用release版的keystore对应用进行签名。
7.如果对APK正式签名,还需要使用zipalign工具对APK进行对齐操作,这样做的好处是当应用运行时会减少内存的开销。
上面有不正确地方欢迎留言交流。