Android系统HAL层驱动实现原理是基于谷歌提供的框架来展开,从而更好的规避因底层使用linux内核开源核心代码的要求,同时因为其安卓本身遵循Apache Lincence协议,允许厂商修改而不必公开修改的源代码。本文章就其HAL层(硬件抽象层),主要介绍此框架的组成部分、原理框架以及调用流程,为后续的HAL驱动具体实现提供相关的理论基础。
Binder系统分析之SM大管家的获取流程
之前介绍了Binder跨进程通信中AIDL文件的具体实现流程,之后又实现Native层、framework层Binder框架的具体使用范例。其使用规范都是基于底层设计好的框架之上,本章节就针对其框架,步步分析其实现流程背后的原理,对着代码一步一步追溯到源头,废话不多说,Fucking Code!
Binder系统分析之Native层、framework层使用
上篇文章中,我们详细的了解了AIDL的使用流程。其关键点在于对系统编译生成的AIDL生成中间文件中Binder类以及IBinder接口的实现。系统提供的这两个类很关键,下面我们分别从Native层以及framework实现一下自定义的Binder程序。
Binder系统分析之应用层AIDL的具体实现
提及安卓的跨进程通信机制,那肯定非Binder机制莫属了!然而安卓为什么不采用原生linux提供的管道、消息队列、信号、secket以及共享内存呢?而是自己大费周章的写了一套自己的Binder跨进程通信机制,由此可见Binder通信机制的重要性。本人学习Binder后,感悟颇深。为了更好的理解,避免方便上层应用开发者直接看底层c实现难度太大,便拿其最直接的aidl文件实现跨进程开刀,庖丁解牛,由表及里,拨开云雾见天日!
Android源码编译之make流程分析
前面分别分析了安卓源码编译过程中 source 和 lunch 命令下的具体操作流程。其中source是向shell环境导入相关变量,lunch命令则是执行build/envsetup.sh文件中定义好的函数,与lunch函数相似,编译系统命令m(make),mm,mmm等命令也是其中定义好的方法,下面我们就来具体分析一下。
Android源码编译之lunch流程分析
通过之前介绍的source导入编译源码的相关配置,下面就进入了lunch操作。用户通过source build/envsetup.sh命令后,系统初始化相关变量环境工作,脚本提供一个lunch函数,让用户选择自己想要编译的版本分支,下面我们就来具体分析一下。
Android源码编译之source初始化环境分析
Android这个庞大的系统,采用的是自己的Android Makefile来进行编译的。在编译系统时,我们通常需要命令行 source build/envsetup.sh 导入相关环境变量,之后 lunch 选择自己想要编译的版本,最后 make 才可进行系统的全局编译。首先我们来分析source build/envsetup.sh的具体执行流程。
Andnroid系统odex优化加快开机速度
对于如何提高安卓6.0首次开机启动的时间,其关键就是打开系统的预编译odex优化开关。简而言之,就是将系统的jar包提前在服务器上根据相对应的平台进行预优化,对应的预装应用也从apk的class文件中优化得到odex文件从而加快首次开机PMS便利扫描apk包的时间。
源码分析之Launcher启动流程
之前分析了安卓开机启动流程,详细可以查看Zygote和SystemServer相关的博客。系统开机经由init进程拉起后,调用Zygote孵化器开启SystemServer服务,其中系统核心重要的服务都在SystemServer中加载完成,之后便进入各个服务的SystemReady状态。由此,我们从这里开始分析。
源码分析之智能指针RefBase
智能指针,是安卓为了照顾Java层代码,为C层适配的一种自动管理内存对象的方案。由于C层对象不能够像Java层代码一样由虚拟机自动释放,很容易造成内存泄漏等问题,其生命周期要求开发者自行管理,为了解决这个问题,安卓系统便引入了智能指针的概念。在我们了解它之后,对于源码的阅读,无疑将会变得更加轻松!