Android 系统源码分析——Android Studio 导入android 8.0源码

https://rainmonth.github.io/posts/A191017.html

摘要

在之前的文章Android MacOs 下的源码下载及编译中介绍了源码下载以及编译的方法,本文介绍如何把下载编译好的源码导入Android Studio,并且可以进行代码调试

[toc]

前提

已经成功的下载并编译出了Android的某个版本

开始

先修改Android Studio 支持的内存上限,因为android 源码是是否巨大的,找到Android Studio的根目录,更改bin子目录下的studio.vmoptions文件

1
2
--Xms1024m
--Xmm 1280m

生成支持导入的文件

android源码编译成功后,看看有没有out/host/linux-x86/framework/idegen.jar文件生成,如果没有执行以下命令生成一个:

1
2
3
4
5
source build/envsetup.sh
lunch
# 输入之前编译源码时采用的那个编号,我的是5
# 再运行下面的命令
mmm development/tools/idegen/

我执行上面的命令的时候报错如下:

build/core/config.mk:692: error: Error: could not find jdk tools.jar at /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/../lib/tools.jar, please check if your JDK was installed correctly.

出现这个错误是因为JDK环境没有配置成功,Mac自带的Java没有tools.jar这个文件,
将自己安装的Java添加到PATH即可,运行如下命令可以快速查看用户安装的JDK目录:

1
/usr/libexec/java_home -V

输出:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home,这正是我的JDK安装目录,将其加入到PATH,加入后再次运行命令mmm development/tools/idegen/,看到如下输出
1
#### build completed successfully (02:18 (mm:ss)) ####

就会生成out/host/linux-x86/framework/idegen.jar,然后在根目录执行:

1
development/tools/idegen/idegen.sh

我这边执行这个命令花的时间比较长

1
2
Read excludes: 27ms
Traversed tree: 1189735ms

该命令执行后,会在根目录下生成如下两个文件:

  • android.iml,用来描述modules。它包括modules路径、 依赖关系,顺序设置等。一个项目可以包含多个 *.iml 文件。
  • android.ipr,一般保存了工程相关的设置,比如modules和modules libraries的路径,编译器配置,入口点等
    到上面这一步其实就可以将源码导入到Android Studio了,但为了优化导入速度(不优化的话导入的时间会相当长),请接着往下看

    优化导入的速度

    修改android.xml文件,找到excludeFolder标签,加入如下内容
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
        <excludeFolder url="file://$MODULE_DIR$/.repo"/>
    <excludeFolder url="file://$MODULE_DIR$/abi"/>
    <excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/>
    <excludeFolder url="file://$MODULE_DIR$/art"/>
    <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-3.18"/>
    <excludeFolder url="file://$MODULE_DIR$/libcore"/>
    <excludeFolder url="file://$MODULE_DIR$/libnativehelper"/>
    <excludeFolder url="file://$MODULE_DIR$/ndk"/>
    <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$/rc_projects"/>
    <excludeFolder url="file://$MODULE_DIR$/sdk"/>
    <excludeFolder url="file://$MODULE_DIR$/system"/>
    <excludeFolder url="file://$MODULE_DIR$/tools"/>
    <excludeFolder url="file://$MODULE_DIR$/trusty"/>
    <excludeFolder url="file://$MODULE_DIR$/vendor"/>
    然后再开始导入。

支持调试