aospc/c++的native 模块VScode和Clion

背景

平时做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。

原文地址:
https://mp.weixin.qq.com/s/VJvIr6j7OvkDoL4z3tu3Uw

相关推荐
liuqun03192 小时前
go进阶之gc
开发语言·后端·golang
洞见不一样的自己2 小时前
深度解析Kotlin泛型:从基础到实战
android
luanma1509802 小时前
Laravel3.x:PHP框架的里程碑
android
武藤一雄2 小时前
深入理解 C# 中的 sizeof 与非托管类型约束
开发语言·windows·c#·.net·.netcore
好家伙VCC2 小时前
**发散创新:用 Rust实现数据编织(DataWrangling)的高效流式处理架构**在现
java·开发语言·python·架构·rust
2401_876907522 小时前
《Python深度学习》
开发语言·python·深度学习
qwehjk20082 小时前
分布式计算C++库
开发语言·c++·算法
222you2 小时前
线程池的三个方法,七个参数,四个拒绝策略
java·开发语言