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个。