一、前言
安卓系统因其代码开源性,成为了目前安装量最多的操作系统,大部分手机安装的都是安卓系统,大概占手机用户群体的80%以上。
所以研究安卓系统源码应该可以说是一个比较有‘钱途’的事情。
但由于安卓系统源码很大部分都是用C/C++代码写的,复杂而庞大,想要将其彻底研究清楚还是一件比较困难的事情,本文只是我目前对其部分源码的理解,不一定准确,仅供参考。
如果后续有机会的话,我想我会继续研究下去的。
二、理解安卓系统
安卓是基于linux系统之上开发的一个系统,为了效率,其底层是用C/C++写的,中间层是一个叫做jni的模块,用于让上层的Java代码与底层的C/C++代码进行交互。
所以说安卓软件目前是从系统层面绑定了java语言的,如果你想要学习开发安卓程序,那么Java至少需要有一定程度的理解才行,如果后续有空的话,我应该也会考虑出一套java相关的简单入门教程。
不过相比于java
,我更加看好Kotlin
,这个以后有机会再聊吧。
安卓源码就公布在了Android Code Search
不过你需要翻墙才能查看,这个是违规内容,这里这不进一步讲述了,下面默认你已经能够访问这个官方了。
然后进入这个链接就能够查看到安卓系统的源码:platform/superproject/main - Android Code Search
每个文件夹中就代表着一个安卓系统的一个模块,其模块非常的多,这里我主要介绍的是ART
模块:
art模块你可以理解为一个虚拟机,毕竟Java代码最终生成的是可以跨平台的字节码,并不能直接在系统上执行,这就是虚拟机的用途,它是安卓软件运行的基础。
它里面又有很多模块,我这里要介绍的是里面的运行时模块:runtime
里面的源码文件数量非常之多,这里我重点关注三个部分:类、方法、字段。
因为Java语言的核心思想就是面向对象,它内部任何东西都是对象,可问题是,java代码需要依赖虚拟机Art来运行,虚拟机为了效率用的C++写的,所以其中必然需要用某种方式在C/C++代码中来组织Java的这些概念。
目前经过我的分析,在art/runtime模块中,它是通过Class
、ArtMethod
、ArtField
这三个类来分别表示上述Java中三个概念的。
三、类、方法、字段
首先是Java中的类,它用的Class
这个C++中类进行的映射表示: