VS Code 打开Android AOSP源码进行Java代码的跳转
新建code-workspace工作区文件针对每个folders,新建.project、.classpath文件需要引用另一个folders的项目,需要在.classpath里加入到src中通过VS code 打开aosp.code-workspace工作区,等待(Language Support for Java™ by Red Hat)插件进行检索工作(可能需要手动打开项目中的一个Java文件
举一个具体的例子: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里的另一个项目。
总结:
-
新建code-workspace工作区文件
-
针对每个folders,新建.project、.classpath文件
-
需要引用另一个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比较重,占内存太大了,打开时间长了,电脑容易卡。
更多推荐

所有评论(0)