本文首发于微信公众号「刘望舒」html
关联系列
Android AOSP基础系列
Android系统启动系列
应用进程启动系列
Android深刻四大组件系列
Android深刻理解Context系列
Android深刻理解JNI系列
Android解析WindowManager
Android解析WMS系列
Android解析AMS系列
Android包管理机制系列
Android输入系统系列前端
在上一篇文章Android AOSP基础(三)Android系统源码的整编和单编中,咱们对系统源码进行了编译,这篇文章咱们接着来学习如何将系统源码导入到编辑器中,以便于查看和调试源码。关于查看源码,可使用Android Studio、Eclipse、Sublime、Source Insight等软件,这里我推荐使用Source Insight,可是有的同窗可能不是很习惯,并且Source Insight是Windows平台的软件,Mac平台用不了,那么使用Android Studio是一个不错的选择,并且使用Android Studio还能够调试源码。java
在《Android进阶解密》的第一章,我讲解了Source Insight如何导入系统源码,可能有的同窗没有买这本书,这里再来说一遍。 Source Insight只能查看源码,不能调试源码,若是只想在Source Insight中查看源码,能够直接从百度网盘:pan.baidu.com/s/1ngsZs 将源码下载下来。若是想在Android Studio中查看源码,那么最好仍是在Linux环境下将AOSP源码下载下来。linux
安装软件后,首先要新建源码项目。经过菜单项Project→New Project会弹出提示框。 android
上图箭头指向的Browse按钮来选择本地系统源码所在的路径,好比个人系统源码路径为:D:/Android/android-8.0.0_r1 。选择好加载路径后点击OK按钮会进入“Add and Remove Project Files”界面,在这个界面能够向项目中添加整个Android系统源码,也能够只把源码部分目录添加到项目中,之后再根据须要添加其余目录。若是向项目添加整个Android系统源码加载时会很是慢,这里咱们只添加以下源码目录:frameworks/、libcore/、packages/、system/、art/和libnativehelper/,这几个目录基本上能够知足平常的系统源码阅读了,以下图所示。程序员
Source Insight的定位文件功能十分强大,咱们只须要知道源码文件名就能够轻松找到它,好比咱们要找MediaPlayer.java,只要在文件搜索框输入MediaPlayer.java便可:ubuntu
Source Insight另外一个好用的功能就是全局搜索,默认快捷键为:CTRL+/,或者点击最上面工具栏相似R的图标。在Search in的输入选项中咱们能够自定义搜索的范围,好比咱们想查找全部Java文件中引用MediaPlayer类的状况,就能够像下图同样进行操做。 bash
固然,Source Insights的功能远不仅以上几种,相信随着使用次数的增多,你就会熟练掌握它的大部分功能,这里就不过多介绍了。微信
Source Insight导入源码不须要对源码进行编译,可是Android Studio导入整个系统源码须要对源码进行编译,生成AS的项目配置文件。ionic
若是你整编过源码,查看out/host/linux-x86/framework/idegen.jar是否存在,若是不存在,进入源码根目录执行以下的命令:
source build/envsetup.sh
lunch [选择整编时选择的参数或者数字]
mmm development/tools/idegen/
复制代码
若是没整编过源码,能够直接执行以下命令单编idegen模块:
source build/ensetup.sh
make idegen
复制代码
关于Android系统源码的编译能够查看Android AOSP基础(三)Android系统源码的整编和单编这篇文章。
idegen模块编译成功后,会在 out/host/linux-x86/framework目录下生成idegen.jar,执行以下命令:
sudo development/tools/idegen/idegen.sh
复制代码
这时会在源码根目录生成android.iml 和 android.ipr 两个文件,这两个文件通常是只读模式,这里建议改为可读可写,不然,在更改一些项目配置的时候可能会出现没法保存的状况。
sudo chmod 777 android.iml
sudo chmod 777 android.ipr
复制代码
因为要将全部源码导入AS会致使第一次加载很慢,能够在android.iml中修改excludeFolder配置,将不须要看的源码排除掉。等源码项目加载完成后,还能够经过AS对Exclude的Module进行调整。若是你的电脑的性能很好,能够不用进行配置。 在android.iml中搜索excludeFolder,在下面加入这些配置。
<excludeFolder url="file://$MODULE_DIR$/bionic" />
<excludeFolder url="file://$MODULE_DIR$/bootable" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/cts" />
<excludeFolder url="file://$MODULE_DIR$/dalvik" />
<excludeFolder url="file://$MODULE_DIR$/developers" />
<excludeFolder url="file://$MODULE_DIR$/development" />
<excludeFolder url="file://$MODULE_DIR$/device" />
<excludeFolder url="file://$MODULE_DIR$/docs" />
<excludeFolder url="file://$MODULE_DIR$/external" />
<excludeFolder url="file://$MODULE_DIR$/hardware" />
<excludeFolder url="file://$MODULE_DIR$/kernel" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/platform_testing" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/test" />
<excludeFolder url="file://$MODULE_DIR$/toolchain" />
<excludeFolder url="file://$MODULE_DIR$/tools" />
<excludeFolder url="file://$MODULE_DIR$/.repo" />
复制代码
在AS安装目录的bin目录下,打开studio64.vmoptions文件,根据本身电脑的实际状况进行设置,这里修改成以下数值:
-Xms1024m
-Xmx1024m
复制代码
若是你是在VirtualBox中下载的系统源码,那么将VirtualBox中的系统源码拷贝到共享文件夹中,这样源码就会自动到Windows或者Mac上,若是你不知道如何设置VirtualBox共享文件夹,能够查看Android AOSP基础(一)VirtualBox 安装 Ubuntu这篇文章。 经过AS的Open an existing Android Studio project选项选择android.ipr 就能够导入源码,这里我用了大概7分钟就导入完毕。导入后工程目录切换为Project选项就能够查看源码。
因为咱们下载的是9.0的AOSP源码,SDK版本也应该对应为API 28,若是没有就去SDK Manager下载便可。 点击File -> Project Structure-->SDKs配置项目的JDK、SDK。 建立一个新的JDK,这里取名为1.8(No Libraries),删除其中classpath标签页下面的全部jar文件。
接着设置将Android SDK的Java SDK设置为1.8(No Libraries),这样Android源码使用的Java就是Android源码中的。
确保的项目的SDK为源码对应的SDK。
File -> Project Structure -> Modules中能够经过Excluded来筛选代码目录,好比咱们选择bionic目录,点击Excluded,bionic目录会变为橙色,bionic字段会出如今右侧视图中,说明该目录已经被Excluded掉,通俗来说就是被排除在工程以外。若是不但愿bionic目录被Excluded掉,再次点击Excluded,bionic目录会变为灰色。
这篇咱们学习了Source Insight和Android Studio导入系统源码的方法,可是具体的查看源码的方式没有讲解,这些须要读者在使用中逐步去掌握,下一篇咱们会学习如何使用Android Studio去调试系统源码。
分享大前端、Android、Java等技术,助力5万程序员成长进阶。