6. 安卓系统源码分析

一、前言

安卓系统因其代码开源性,成为了目前安装量最多的操作系统,大部分手机安装的都是安卓系统,大概占手机用户群体的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模块:

image-20231120182550831

art模块你可以理解为一个虚拟机,毕竟Java代码最终生成的是可以跨平台的字节码,并不能直接在系统上执行,这就是虚拟机的用途,它是安卓软件运行的基础。

它里面又有很多模块,我这里要介绍的是里面的运行时模块:runtime

image-20231120182733027

里面的源码文件数量非常之多,这里我重点关注三个部分:类、方法、字段。

因为Java语言的核心思想就是面向对象,它内部任何东西都是对象,可问题是,java代码需要依赖虚拟机Art来运行,虚拟机为了效率用的C++写的,所以其中必然需要用某种方式在C/C++代码中来组织Java的这些概念。

目前经过我的分析,在art/runtime模块中,它是通过ClassArtMethodArtField这三个类来分别表示上述Java中三个概念的。

三、类、方法、字段

首先是Java中的类,它用的Class这个C++中类进行的映射表示:

image-20231120183407254

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux