深入理解Android:Java虚拟机ART
上QQ阅读APP看书,第一时间看更新

1.2.2 准备Source Insight

Source Insight是阅读源码的必备工具,它是一个Windows软件,在Linux平台上可通过wine进行安装。

提示 Source Insight推出3.5版本之后,很长一段时间都没有更新。最近推出了全新的4.0版本。但经过笔者测试,4.0版本的Source Insight在Linux上表现不稳定,建议读者在Linux上使用3.5版本的Source Insight。下面的讲解也以3.5版本的Source Insight为主。

首先,打开Source Insight,通过菜单项Project→New Project新建一个源码工程。工程可建立在Android 7.0源码根目录。笔者存放的位置是~/workspace/aosp/android-7.0,工程名为android-7.0。

接下来我们要先设置源码文件的后缀名。在ART中,C++的实现文件以.cc为文件后缀名。而汇编源码存储在以.S为后缀的文件里。Source Insight默认的配置不识别.cc和.S为后缀的源码文件,所以我们需要修改它。

单击菜单项Options→Document Options,弹出图1-1所示的文件类型对话框。

图1-1用于为C++源码添加.cc结尾的文件类型。接着还要为汇编源码做类似的处理,来看图1-2。

图1-1 为C++源码类型增加.cc结尾的文件

图1-2 为汇编源码增加.S结尾的文件

接下来我们为android-7.0工程添加具体的源码文件。单击菜单项Project→Add and Remove Project Files,弹出工程文件选择对话框,如图1-3所示。

请读者添加如下目录到android-7.0工程中。

·art目录(通过图中的Add Tree按钮可添加整个目录):ART虚拟机源码文件。

·libcore目录:包含JDK相关源码文件。

·libnativehelper目录:包含JNI相关源码,如jni.h等。

·frameworks/base/cmds/am、frameworks/base/core、frameworks/base/include三个目录:包含Zygote相关源码文件。

图1-3 添加或删除工程中的目录

另外,上述目录中还有很多用于测试的源码文件,数量非常多。由于它们对本书的学习并无影响,建议读者移除其中test目录下的源码文件——通过图1-2中的Remove Tree可移除指定目录中的源码。比如art/test包含的1800多个源码文件都可以移除。

接着要进一步配置Source Insight。ART是一个复杂系统,所以谷歌用了一些工具来辅助编写正确的源码。这些工具要求在源码函数声明、变量定义等地方使用一些特殊的宏,而Source Insight不认识这些宏,所以很多函数、变量都无法解析和识别。为此,我们需要配置Source Insight,让它忽略这些宏。配置方法下面将详细介绍。

首先,找到Source Insight的C.tom文件,它位于~/.wine/drive_c/Program Files(x86)/Source Insight 3/下。打开该文件,在文件末尾添加如下的内容。

[C.tom文件]

;C.tom是C Token Macros的意思,用于重定义C/C++文件中的宏
;下面的条目都是ART源码中出现的宏,我们将它们定义为空,这样,Source Insight碰到这些宏
;时就会忽略它们
SHARED_TRYLOCK_FUNCTION(...)
ACQUIRE_SHARED()
EXCLUSIVE_TRYLOCK_FUNCTION(...)
SCOPED_CAPABILITY
SHARED_REQUIRES(...)
REQUIRES(...)
UNLOCK_FUNCTION(...)
ASSERT_SHARED_CAPABILITY(...)
ASSERT_CAPABILITY(...)
__noreturn
__mallocfunc
EXCLUSIVE_LOCKS_REQUIRED(...)
LOCKS_EXCLUDED(...)
SHARED_LOCKS_REQUIRED(...)
SHARED_LOCK_FUNCTION(...)
DEFAULT_MUTEX_ACQUIRED_AFTER
ACQUIRE(...)
ACQUIRE()
RELEASE()
RELEASE_SHARED()
ACQUIRED_AFTER(...)
GUARDED_BY(...)
PACKED(...)
__nonnull(...)
OVERRIDE
SHARED_LOCKABLE
ATTRIBUTE_UNUSED
NO_THREAD_SAFETY_ANALYSIS
ALWAYS_INLINE

配置好C.tom后,关闭并重新打开Source Insight,单击Project→Rebuild Project,弹出图1-4所示的对话框。

图1-4 Rebuild Project对话框

图1-4中,选择Re-Create the whole project from scratch即可。

提示 图1-4所示对话框的下方展示了源码文件个数,笔者设置的工程包含源码文件8688个。