1. 解决的问题

Android开发中,有很大一部分是Framework定制开发,即需要阅读、修改frameworks仓库下的java代码,本文解决如何配置一个好用的framework代码跳转环境问题。

本文介绍的是使用aidegen + android studio配置。

首先简单介绍一下aidegen是什么,它是谷歌内置的一个脚本,用于生成各个IDE的工程,包括Android Studio、CLion、IntelliJ、Eclipse、VSCode,其中用于的较多的是Android Studio,用于生成Java工程,C++工程这个方案并不理想,如果需要配置C++开发环境,可以参考我的另一篇文章:Android配置C++开发环境

2. 实践步骤

下面以Android12为例说明

2.1. 生成Android Studio工程

$ aidegen --help
usage: aidegen [module_name1 module_name2... project_path1 project_path2...]

AIDEgen

This CLI generates project files for using in IntelliJ, such as:
    - iml
    - .idea/compiler.xml
    - .idea/misc.xml
    - .idea/modules.xml
    - .idea/vcs.xml
    - .idea/.name
    - .idea/copyright/Apache_2.xml
    - .idea/copyright/progiles_settings.xml

- Sample usage:
    - Change directory to AOSP root first.
    $ cd /user/home/aosp/
    - Generating project files under packages/apps/Settings folder.
    $ aidegen packages/apps/Settings
    or
    $ aidegen Settings
    or
    $ cd packages/apps/Settings;aidegen

positional arguments:
  targets               Android module name or path.e.g. Settings or packages/apps/Settings

optional arguments:
  -h, --help            show this help message and exit
  -d {0,1,2,3,4,5,6,7,8,9}, --depth {0,1,2,3,4,5,6,7,8,9}
                        The depth of module referenced by source.
  -v, --verbose         Display DEBUG level logging.
  -i IDE, --ide IDE     Launch IDE type, j: IntelliJ, s: Android Studio, e: Eclipse, c: CLion, v: VS Code. The default value
                        is 'u': undefined.
  -p IDE_INSTALLED_PATH, --ide-path IDE_INSTALLED_PATH
                        IDE installed path.
  -n, --no_launch       Do not launch IDE.
  -r, --config-reset    Reset all saved configurations, e.g., preferred IDE version.
  -s, --skip-build      Skip building jars or modules that create java files in build time, e.g. R/AIDL/Logtags.
  -a, --android-tree    Generate whole Android source tree project file for IDE.
  -e [EXCLUDE_PATHS [EXCLUDE_PATHS ...]], --exclude-paths [EXCLUDE_PATHS [EXCLUDE_PATHS ...]]
                        Exclude the directories in IDE.
  -V, --version         Print aidegen version string.
  -l LANGUAGE, --language LANGUAGE
                        Launch IDE with a specific language, j: Java, c: C/C++, r: Rust. The default value is 'u':
                        undefined.

INFO: To report the AIDEGen tool problem, please use this link: https://goto.google.com/aidegen-bug

常用命令如下(以下用于生成frameworks仓库的Android Studio工程):

$ aidegen -i s -n frameworks/

2.2. Android Studio配置

其实我们的最终目标是想在Windows下面使用Android Studio打开远程服务器的工程,因为大部分的开发模式还是本地开发机为Windows,编译机为Linux,两者使用Samba进行文件互传。

在Windows电脑上直接打开以上生成的Android Studio工程是不行的,会直接闪退,因为其中的路径都是Linux下以/开头的路径,并不能被Windows识别。

以下是修改步骤:

  1. .idea/modules.xml

原本的配置:

<module fileurl="file:///$PROJECT_DIR$/frameworks.iml" filepath="$PROJECT_DIR$/frameworks.iml" />
<module fileurl="file:///$PROJECT_DIR$/dependencies.iml" filepath="$PROJECT_DIR$/dependencies.iml" />
<module fileurl="file:////data/code/roc_rk3588s_pc/Android12.0/RK3588_Android12.0/frameworks/base/framework_srcjars.iml" filepath="/data/code/roc_rk3588s_pc/Android12.0/RK3588_Android12.0/frameworks/base/framework_srcjars.iml" />
<module fileurl="file:////data/code/roc_rk3588s_pc/Android12.0/RK3588_Android12.0/frameworks/frameworks.iml" filepath="/data/code/roc_rk3588s_pc/Android12.0/RK3588_Android12.0/frameworks/frameworks.iml" />

需要改成如下配置:

<module fileurl="file://$PROJECT_DIR$/frameworks.iml" filepath="$PROJECT_DIR$/frameworks.iml" />
<module fileurl="file://$PROJECT_DIR$/dependencies.iml" filepath="$PROJECT_DIR$/dependencies.iml" />
<module fileurl="file://Z:/code/roc_rk3588s_pc/Android12.0/RK3588_Android12.0/frameworks/base/framework_srcjars.iml" filepath="Z:/code/roc_rk3588s_pc/Android12.0/RK3588_Android12.0/frameworks/base/framework_srcjars.iml" />
<module fileurl="file://Z:/code/roc_rk3588s_pc/Android12.0/RK3588_Android12.0/frameworks/frameworks.iml" filepath="Z:/code/roc_rk3588s_pc/Android12.0/RK3588_Android12.0/frameworks/frameworks.iml" />

首先需要将/data/code/roc_rk3588s_pc替换成Z:/code/roc_rk3588s_pc,其次特别需要注意的是Linux下是file:////data/code/roc_rk3588s_pc形式,而Windows下需要是file://Z:/code/roc_rk3588s_pc形式,区别是Linux下的file:后面是三个/随后跟着路径,而Windows下需要是file:后面是两个/随后跟着路径。

  1. .idea/vsc.xml
<mapping directory="$PROJECT_DIR$" vcs="Git" />

如果是以file:开头的路径,也要注意从Linux下转换成Windows下的形式。

  1. dependencies.iml 和 frameworks.iml

这两个文件在frameworks目录下,用于列举Java源码的目录。

只需要将/data/code/roc_rk3588s_pc替换成Z:/code/roc_rk3588s_pc即可。

至此,路径替换完成,可以使用Windows下的Android Studio打开Samba的frameworks目录,打开后注意Project SDK选择JDK,不能选Android SDK,因为我们就是需要修改本地工程的这部分代码,JDK的版本可以参考prebuilts/jdk下面的JDK版本,对于Android12可以选择JDK11。

然后等待Android Studio索引完毕吧!


马师傅777
1 声望0 粉丝