背景
平时做aosp framework代码开发时候都会使用IDE工具进行代码的编写和阅读,但是aosp代码其实也不是固定一类的代码,比如主要的两类代码:Java/konlin和c/c++代码,对于这两类代码使用的ide也是不一样的。
对于Java/kotlin代码一般使用 android studio就可以,android studio也是最常用的IDE工具,但是搭建源码环境跳转和代码编写时候还是会有坑,相关的经验下面这篇文章已经进行了详细说明:
aosp源码导入android studio无法跳转-学员答疑
所以对于aosp的java代码部分,ide的选择一般都只有一个那就是android studio。
对于C/C++代码这块的开发,目前马哥使用的都是VSCode居多,但是很多学员朋友也反馈现在clion也免费了,使用clion也非常非常方便,跳转代码百分百准确,完全不会像VScode一样部分代码无法跳转。
那么事实针真的如此么,在aosp的native开发部分真的Clion比VSCode体验好太多么,今天马哥亲自带你来解密到底是Clion是不是可以完全替代VSCode开发呢?

VSCode使用方式及特点
1、下载vscode,这个其实官网有,但是因为实在是网络太卡,建议可以
https://code.visualstudio.com/下载,实在觉得太慢同学私聊马哥获取
2、安装下载deb文件,命令如下:
bash
sudo dpkg -i xxxx.deb
3、启动vscode,直接取Ubuntu应用列表中打开VSCode,刚开始进入建议先
安装vscode的插件,c/c++,c++ intelligent

4、然后在file -->open folder打开我们的代码文件夹,我这里是仅仅打开的aosp/frameworks文件夹,没有打开整个aosp源码目录,因为整个aosp代码量太大,运行太卡,基本做完这几个就可以愉快的看到漂亮的native代码了

习惯了eclipse的快捷命令,肯定会不知道怎么操作VSCode类似的场景,这里总结一些快捷键:
*1、查找当前工程中某个文件:ctl+p
*2、查找当前cpp文件中某个方法展示出方法列表 :ctl+shift+o
*3、返回上一个操作:在Linux中可以使用快捷键Ctrl+Alt + -
5、打开某个文件夹比如framework这个文件夹,但是文件夹中的代码模块,可能依赖其他的目录的代码模块,比如system/core下面的很多头文件等。
这里就可以使用点击 File ----> add Folder and Workspace,再进行额外更多的文件夹加入既可以。
所以对于查看源码来说VSCode也算非常方便的,要查看哪个目录源码直接打开或者添加就可以,即开即用,根本不需要什么额外编译对于cmake文件等。
本质上VSCode 通过语言服务器和灵活的文件扫描机制,能够在不依赖完整构建系统的情况下实现代码跳转。
当然它也有写缺点:
比如跳转代码方法经常无法非常准确判断哪个类的方法,会展示较多类供我们用户自己选择类,再偶尔会有少量代码无法跳转,但是不会太影响使用,写代码提示关联不是非常准确,如果代码量太大比如整个aosp目录跳转,那么就会比较卡,所以一般按需要加载代码文件夹。
VScode使用场景:
适合快速阅读大量aosp代码情况,可以实现打开即用,不需要什么前置操作,适合aosp源码中的多个模块本身有相互依赖的情况,这样跳转也方便。
Clion使用方式及特点
下载Clion地址:
https://www.jetbrains.com/clion/download/?section=linux
下载完成后,会有如下压缩包,有大概2G

然后进行解压,再进入clion的bin目录,执行./clion既可以

运行后,大家可以新加一个c++的demo,体验一下clion开箱即用的感觉
确实clion开发起c++应用程序非常的发表,这点相比VSCode还要安装插件情况来说还是很有优势。
但是注意哈,clion其实是需要MakeLists.txt文件的,所以说clion可以正常使用各种跳转功能的前提是提前让项目生成CMakeLists.txt。
使用clion开发aosp的native代码:
1、编译相关的CMakeLists.txt
准备正常的源码编译环境,lunch目标
bash
. build/envsetup.sh
lunch sdk_phone_x86_64
然后export环境变量,目的是让生成CMakeLists
bash
export SOONG_GEN_CMAKEFILES=1
export SOONG_GEN_CMAKEFILES_DEBUG=1
2、编译有Android.bp的一些模块,比如这里以inputflinger为例
编译自己需要开发的模块,可以mmm直接加目录方式
bash
mmm frameworks/native/services/inputflinger/
在out目录中会有对应的CMakeLists
bash
out/development/ide/clion/
在这里选着libinputfliner-x86_64_android的情况
进入后确实可以看到这个模块相关的代码:

体验总结如下:
1、代码跳转基本湿滑无任何阻碍,所有都可以跳转,而且跳转基本上可以准确无误,不太需要人工确认
2、但是跳转如果是外部模块代码,一般只可以跳转到对应的.h文件,无法跳到对应的实现文件.cpp,所以这个对于要多模块开发,就是一个非常大痛点
3、在编写代码时候,基本上写代码的提示完整,编写代码效率较高
4、不支持和vscode一样随意打开加入一个目录就可以使用clion
clion适合场景:
1、对于aosp的某个native模块是需要精通源码分析或者编写大量代码情况,那么clion完整跳转方式和编写代码提示,其实clion是最好选择
2、对于aosp中是需要分析若干模块一起耦合分析,而且这些模块也无法使用共同的CMakeLists,那么clion就不适合
总结二者差异及适用场景
VSCode 通过语言服务器和灵活的文件扫描机制,能够在不依赖完整构建系统的情况下实现代码跳转。而 CLion 依赖于 CMake 项目模型和编译数据库,确保了对大型项目的精确索引和跳转支持。因此,在使用 aidegen 生成项目后,若要实现完整的代码跳转功能,必须确保生成的 CMakeLists.txt 正确包含了所有源文件,并且存在有效的 compile_commands.json 文件。
最后用一句话告诉大家,在做aosp的c/c++代码 native开发时候应该如何选择IDE工具,VSCode还是Clion。
VScode:适用于与aosp中存在多个模块耦合的源码分析场景,编写代码量比较少情况,不适合需要大量编写代码情况。
Clion:适用于需要精通某一个单独模块的源码阅读和频繁开发写代码情况,不适用于aosp中若干个模块一起阅读开发。
所以平常的aosp源码阅读一般还是首选VSCode,除非要对某个模块或者新建的模块要进行大量代码修改才选clion。