举一个具体的例子:MTK平台下的MtkSettings跳转到framework/base源码;

平台:Android 14 (U)

一、配置code-workspace:aosp.code-workspace

该文件可以自行选择位置放置。如果放在aosp根目录,可以按照以下设置folders的path,放置其他位置,可以选择用绝对路径设置path。

{
  "folders": [
    { "name": "framework-base", "path": "frameworks/base" },
    { "name": "MtkSettings", "path": "vendor/mediatek/proprietary/packages/apps/MtkSettings" }
  ],
  "settings": {
    "java.import.maven.enabled": false,
    "java.import.gradle.enabled": false,
    "java.configuration.updateBuildConfiguration": "disabled",
    "java.autobuild.enabled": false,
    "java.maven.downloadSources": false,
    "java.gradle.buildServer.enabled": "off",
    "java.compile.nullAnalysis.mode": "disabled",

    "files.exclude": {
      "**/.git": true, "**/.repo": true, "**/out": true, "**/out*/": true,
      "**/prebuilts": true, "**/device": true, "**/kernel": true, "**/toolchain": true,
      "**/external": true, "**/hardware": true, "**/art": true, "**/dalvik": true,
      "**/development": true, "**/ndk": true
    },
    "search.exclude": {
      "**/out": true, "**/out*/": true, "**/prebuilts": true, "**/device": true,
      "**/kernel": true, "**/toolchain": true, "**/external": true, "**/hardware": true,
      "**/art": true, "**/dalvik": true, "**/development": true, "**/ndk": true
    },
    "java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx4G -Xms100m -Xlog:disable"
  }
}

通过VS code打开工作区,选择这个aosp.code-workspace,就可以加入该两个模块framework/base、MtkSettings;
在这里插入图片描述

二、 设置.project和.classpath文件

1、framework/base
.project:
这个模块里本身就带有.project文件,如下:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>framework-base</name>
    <comment>Android Framework Base Module</comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
    </natures>
</projectDescription>

不需要做其他修改。
.classpath:
需要新建一个,如下:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <!-- 源码路径 -->
    <classpathentry kind="src" path="core/java"/>
    <classpathentry kind="src" path="services/core/java"/>
    <classpathentry kind="src" path="media/java"/>

    <!-- 依赖的 bootclasspath(重要,否则不能解析 android.*) -->
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>

    <!-- 输出目录(VSCode 只需要识别,不会真的编译到这里) -->
    <classpathentry kind="output" path="out"/>
</classpath>

如果有其他的地方Java包名需要引入进来,可以再加入src。
2、MtkSettings
.project:
需要新建一个,如下:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>MtkSettings</name>
    <comment>Mediatek Settings App</comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
    </natures>
</projectDescription>

与framework/base模块类似,也就是name和comment有区别,可自定义。
.classpath:
需要新建一个,如下:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="age/src"/>
    <classpathentry kind="src" path="/framework-base"/> <!-- 关键:引用同 Workspace 的另一个项目 -->
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="output" path="out"/>
</classpath>

这里有个关键地方,需要另外引用Workspace里的另一个项目。

总结:

  1. 新建code-workspace工作区文件

  2. 针对每个folders,新建.project、.classpath文件

  3. 需要引用另一个folders的项目,需要在.classpath里加入到src中

通过VS code 打开aosp.code-workspace工作区,等待(Language Support for Java™ by Red Hat)插件进行检索工作(可能需要手动打开项目中的一个Java文件,才会自动工作)。这样MtkSettings里引用framework/base源码里的代码基本上都可以正常跳转了。

但可能还是会有很多引用的代码无法进行跳转。比如:
在这里插入图片描述

这很正常,因为不管是MtkSettings还是framework/base都会引用一些其他地方的包名。

针对MtkSettings项目,有一些需要引用的Java代码不在framework/base下的时候,通过上述的方式,再加一套folders、.project、.classpath,类似于MtkSettings引用framework/base项目一样。

但也有无源码的情况,比如androidx包名,是由Google 单独维护的 Jetpack 工程,通过 Maven 以 AAR/JAR 的形式下发给应用使用。
我这里检索Android 14项目时,androidx这个aar目录是在prebuilts/sdk/current/androidx/m2repository/androidx。一般情况下,我们主要修改的也就是framework或者各个系统apk源码,所以有些不需要改动的地方爆红可以不用管它,需要查看具体实现,再用linux指令去查看。VS code的各种AI插件,用VS code处理经常需要改动的代码,可以大大的提高工作效率(以前都是用vi、或者windows映射,用文件编辑器等)。

也可以用Android Studio打开AOSP吧,我感觉AS比较重,占内存太大了,打开时间长了,电脑容易卡。

Logo

惟楚有才,于斯为盛。欢迎来到长沙!!! 茶颜悦色、臭豆腐、CSDN和你一个都不能少~

更多推荐