-
Android C++ 程序开发现状
在 Android 下开发 C++ 程序,我见过绝大多数人都是不使用任何语法插件,就靠硬写,写完之后再根据编译报错来修改语法错误。这也怪不得程序员,一方面,Android 使用 Arm 平台的 clang 编译器,跟 x86 平台的开发环境并不是很兼容;另一方面,Android 要求我们将 C++ 程序放在 vendor 目录下,但是我们包含的头文件却是去 kernel/include 下面找的。如果想要自己配置插件的开发环境,通常都是一顿操作猛如虎,结果还是各种报错。 -
Compdb
深入了解 Android 之后,我发现其实 Android 内置有 compdb 可以用来生成 compile_commands.json,流程上只需要设置几个环境变量即可:
cd /path/to/android/root # Android 源码根路径
source build/envsetup.sh
lunch xxxx-userdebug
cd /path/to/app/dir # 项目 Android.mk/Android.bp 所在目录
export SOONG_GEN_COMPDB=1
export SOONG_GEN_COMPDB_DEBUG=1
export SOONG_LINK_COMPDB_TO=$(pwd)
mm
等待一段时间后,就会在 /path/to/app/dir 目录下看到生成好的 compile_commands.json 了。需要注意的是,有些平台似乎不接受 SOONG_LINK_COMPDB_TO,不管怎么设置都固定生成在 Android 源码根目录,所以如果你在项目目录找不到该文件或者该文件无效,就去 Android 根目录看看。
- 另一种办法 Compiledb-ninja (最简单)
https://github.com/schspa/compiledb-ninja
此方法不支持kernel仓库
This is Reference1, Reference2