背景:
当开发Android Native服务时,我们很难在源码的环境下使用文本编辑器之类的直接编写程序,需要使用到IDE来帮助我们开发,我们希望最好带有语法和头文件提示。本文就对在Windows环境下开发Android Native服务提供一种解决方案,你可以使用任何支持CMakeLists.txt开发的IDE,本文使用的是CLion。此外还将手把手教读者开发完成一个完整的Android Native服务。
1.1 创建demo工程
在vendor目录下创建我们需要开发的Native程序:clion_demo。

在Android.bp编写好依赖库
cc_binary {
name: "clion_demo",
shared_libs: [
"libbase",
"libprocessgroup",
"libcutils",
"libutils",
"libbinder",
"liblog",
"libziparchive",
],
srcs: [
"clion_demo.cpp",
],
}
Clion_demo.c,随便写点儿,之后导入Clion后再写具体的业务代码
#pragma GCC diagnostic warning "-Wunused"
#define LOG_TAG "clion_demo"
#include <string>
#include <android-base/file.h>
#include <android-base/stringprintf.h>
#include <utils/Log.h>
int main(int /* argc */, char **/* argv */)
{
std::string msg = android::base::StringPrintf("Hello AOSP~");
ALOGD("The message is: %s.", msg.data());
return 0;
}
1.2 编译并创建Clion工程
创建好如上文件后,开始编译工程,在编译之前,需要设置几个环境变量,打开生成CMakeLists.txt的编译开发
$ export SOONG_GEN_CMAKEFILES=1
$ export SOONG_GEN_CMAKEFILES_DEBUG=1
之后在demo工程执行mm编译单编该模块

编译成功后,可以在:
out\development\ide\clion\vendor\clion_demo
目录下,找到生成的CMakeLists.txt文件,如果你的工程在其他目录也是同样的原理:

之后使用CLion打开工程即可:

其最重要的功能就是可以帮你自动导入依赖库的头文件位置:

1.3 属性调整
这里还有几个地方需要调整一下:

因为是在linux编译服务器上生成的CMakeList.txt文件,但是一般我们都是使用本地的Window环境开发的,所以这里需要将ANDROID_ROOT更换为Window中映射的linux编译服务器的对应的地址,以我的为例:
set(ANDROID_ROOT Z:/work/android_project)
此外CMAKE_C_COMPILER和CMAKE_CXX_COMPILER用的都是linux-x86版本的,需要替换为Windows版本,可以到
https://github.com/llvm/llvm-project/releases/tag/llvmorg-17.0.1
下载LLVM来安装Windows版本的clang和clang++

安装好后,修改CMAKE_C_COMPILER和CMAKE_CXX_COMPILER,还是以我的为例:
set(CMAKE_C_COMPILER "D:/install/LLVM/bin/clang")
set(CMAKE_CXX_COMPILER "D:/install/LLVM/bin/clang++")
最后的CMakeList.txt文件内容是:

重新reload工程,即可看到项目可以正常索引了:

External Sources Outside Project Root就是我们的源代码目录,External Libraries就是我们的各种依赖库。
同时可以看到,函数跳转和语法提示都是可以正常的:


如此,我们就可以在Window下开发Android的Native程序了。
如果在开发过程中要导入更多依赖库的话,需要先在AOSP中放好,然后修改CMakeList.txt引入,同时别忘了在Android.bp文件中将第三方库放到目标模块的依赖中,不过更推荐先在Android.bp文件中将第三方库放到目标模块的依赖中,再重新生成CMakeList.txt,这里不过多赘述了。此外编写完代码也需要我们在AOSP的环境中编译,Windows环境下无法编译,当然也可以设置交叉编译环境,不过这里就不建议这样做了。直接在AOSP的环境中编译,比较省心,且也能验证AOSP的环境中编译能不能通过。
至此我们的开发环境就搭建完成了,可以愉快的开发了!
下一篇将在该篇的基础上开发一个Android Native Service,具体见Windows环境下开发Android Native服务#第二篇:开发Android Native Service