Android Studio导入整个Android系统源码

简介


偶然发现一个神器 idegen,通过它我们可以用Android Studio阅读整个系统源码,非常方便。

话不多说直接来看怎么使用idegen,导入系统源码到Android Studio。

见证奇迹的时候 Windows / Ubuntu环境下,将整个Android系统源码导入到Android Studio中。


首先,我们要做的就是在源码环境下,即Linux环境下,执行以下命令:

$ source build/envsetup.sh
$ lunch aosp_x86-eng #(or pick your favorite lunch target)
$ make

// 上面的编译命令以实际的系统编译命令为准

$ mmm development/tools/idegen/
$ development/tools/idegen/idegen.sh

// 依次执行完上面的命令,就会在系统根目录下生成如下文件
.classpath (Eclipse)
android.ipr (IntelliJ / Android Studio)
android.iml (IntelliJ / Android Studio)


这里用的是Android Studio导入源码,只需要选择导入 android.ipr 这个文件即可。

同时,在development/tools/idegen/目录下有个README文件,我们来看下其中的内容。

development/tools/idegen/README

IDEGen automatically generates Android IDE configurations for IntelliJ IDEA
and Eclipse. Your IDE should be able to compile everything in a reasonable
amount of time with no errors.

If you're using IntelliJ...

    If this is your first time using IDEGen...

        IDEA needs a lot of memory. Add "-Xms748m -Xmx748m" to your VM options
        in "IDEA_HOME/bin/idea.vmoptions" on Linux or
        "IntelliJ IDEA.app/Contents/Info.plist" on OS X.

        Create a JDK configuration named "1.6 (No Libraries)" by adding a new
        JDK like you normally would and then removing all of the jar entries
        under the "Classpath" tab. This will ensure that you only get access to
        Android's core libraries and not those from your desktop VM.

    From the project's root directory...

        Repeat these steps after each sync...

        1) make (to produce generated .java source)
        2) development/tools/idegen/idegen.sh
        3) Open android.ipr in IntelliJ. If you already have the project open,
           hit the sync button in IntelliJ, and it will automatically detect the
           updated configuration.

        If you get unexpected compilation errors from IntelliJ, try running
        "Build -> Rebuild Project". Sometimes IntelliJ gets confused after the
        project changes significantly.

If you're using Eclipse...

    If this is your first time using IDEGen...

        Edit eclipse.ini ("Eclipse.app/Contents/MacOS/eclipse.ini" on OS X) and
        add "-Xms748m -Xmx748m" to your VM options.

        Configure a JRE named "1.5 (No Libraries)" under "Preferences -> Java ->
        Installed JREs". Remove all of the jar entries underneath "JRE system
        libraries". Eclipse will not let you save your configuration unless at
        least one jar is present, so include a random jar that won't get in the
        way.

    From the project's root directory...

        Repeat these steps after each sync...

        1) make (to produce generated .java source)
        2) development/tools/idegen/idegen.sh
        3) Import the project root directory into your Eclipse workspace. If you
           already have the project open, simply refresh it (F5).

Excluding source roots and jars

    IDEGen keeps an exclusion list in the "excluded-paths" file. This file
    has one regular expression per line that matches paths (relative to the
    project root) that should be excluded from the IDE configuration. We
    use Java's regular expression parser (see java.util.regex.Parser).

    You can create your own additional exclusion list by creating an
    "excluded-paths" file in the project's root directory. For example, you
    might exclude all apps except the Browser in your IDE configuration with
    this regular expression: "^packages/apps/(?!Browser)".

Controlling source root ordering (Eclipse)

    You may want some source roots to come before others in Eclipse. Simply
    create a file named "path-precedence" in your project's root directory.
    Each line in the file is a regular expression that matches a source root
    path (relative to the project's root directory). If a given source root's
    path matches a regular expression that comes earlier in the file, that
    source root will come earlier in the generated configuration. If a source
    root doesn't match any of the expressions in the file, it will come last,
    so you effectively have an implicit ".*" rule at the end of the file.

    For example, if you want your applications's source root to come first,
    you might add an expression like "^packages/apps/MyApp/src$" to the top
    of the "path-precedence" file.  To make source roots under ./out come last,
    add "^(?!out/)" (which matches all paths that don't start with "out/").


   上面的文档介绍了IntelliJ和eclipse怎么导入系统源码的方法,这里我们就只使用Android Studio来导入源码。所以就不管eclipse部分的东西了。因为Android Studio的前身就是IntelliJ,所以Android Stduio的导入方法和IntelliJ是一样的。

在执行完上面Linux系统部分的编译工作后,来看看我们正式进入Android Studio导入系统源码环节:

第一步:
  找到 Android Studio的安装路径中的 vmoptions文件并打开:”Android Studio Path”/bin/studio.exe.vmoptions或者studio64.exe.vmoptions
修改如下:

// 依据个人电脑配置,适量修改
-Xms2048m
-Xmx1024m

第二步:
打开Android Studio,选择 File -> Open

弹出路径选择框,输入相应的源码根路径,然后选择 android.ipr文件,就开始导入源码啦。

在导入过程中,需要等待索引的建立相关的关联,大概需要花15~30分钟,具体依据个人PC配置而定。


第三步:
当我们导入完源码后,我们就可以查看整个系统的源码啦,但是我们在跳转公共的类时,并没有跳转到frameworks目录下对应的源码类,而是jar包中的类,这不是我们想要的,我们需要让其跳转到相应的类中。我们就需要新建一个没有任何jar库的SDK给到系统源码项目的依赖。


那么,问题来了??!!

要怎么创建一个没有jar的SDK呢?

步骤如下:
右键项目名 -> Open Module Settings -> Project -> New(JDK)
然后选择 SDKs -> 编辑刚刚添加的jdk -> 删除Classpath目录下的所有包并命名为1.6(No Libraries)
再选择 Modules -> Module SDK 选择刚刚编辑的SDK(1.6(No Libraries)), 并删除下面所有的包。
大功告成,完成上面的步骤后,公共的类就直接指向系统的源码啦。

这里写图片描述

这里写图片描述


参考文章
AOSP Sources in the IDE

发布了46 篇原创文章 · 获赞 74 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/MLQ8087/article/details/101351207