《深入理解Android:Java虚拟机ART》 —1.2.2 准备Source Insight

举报
华章计算机 发表于 2019/12/18 22:21:37 2019/12/18
【摘要】 本节书摘来自华章计算机《深入理解Android:Java虚拟机ART》 一书中第1章,第1.2.2节,作者是邓凡平。

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。

 image.png

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

 image.png

图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相关源码文件。

 image.png

图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所示的对话框。

 image.png

图1-4 Rebuild Project对话框

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

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


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。