AOSP Native代码导入IDE(CLion)

AOSP可以很容易的导入到Android Studio,很舒服的跳转、调试,但是仅限于Java,Native代码连跳转都不行。

JB有一款C/C++的IDE CLion,很自然想到能不能导入到CLion呢?

1 编译
要让 IDE 正确地建立索引,我们需要让 IDE 能正确地知道源文件、头文件、宏定义等各种数据。

CLion是基于CMake的,AOSP的Soong可以生成CMakeLists.txt,build目录下有文档build/soong/docs/clion.md

// 打开开关,编译时生成CMakeLists.txt
export SOONG_GEN_CMAKEFILES=1
export SOONG_GEN_CMAKEFILES_DEBUG=1

// 全编译
make -j32
// 或者编译单独模块
make frameworks/native/service/libs/ui

// CMakeLists.txt会生成在
out/development/ide/clion/frameworks/native/libs/ui/libui-arm64-android/CMakeLists.txt

2 导入
合并模块
编译出来的是各个模块单独的CMakeLists.txt,一个CMakeLists.txt表示一个CLion工程,所以不能直接导入全部的工程。

可以新建一个总的out/development/ide/clion/CMakeLists.txt
导入CLion以后再编写这个文件可以享受IDE的补全功能,所以可以先add一个工程,导入到CLion后再add其他工程。

cmake_minimum_required(VERSION 3.6)
project(AOSP-Native)
// 添加子模块,导入了部分工程。工程很多,我是用到了再导入
add_subdirectory(frameworks/native)
add_subdirectory(art/dalvikvm/dalvikvm-arm64-android)
add_subdirectory(art/libdexfile/libdexfile-arm64-android)
add_subdirectory(art/runtime/libart-arm64-android)
add_subdirectory(bionic/libc/libc_bionic-arm64-android)
add_subdirectory(bionic/libc/libc_bionic_ndk-arm64-android)
add_subdirectory(bionic/libc/system_properties/libsystemproperties-arm64-android)
add_subdirectory(external/compiler-rt/lib/sanitizer_common/libsan-arm64-android)
add_subdirectory(frameworks/av/media/libaaudio/src/libaaudio-arm64-android)
add_subdirectory(frameworks/av/soundtrigger/libsoundtrigger-arm64-android)
add_subdirectory(frameworks/base/core/jni/libandroid_runtime-arm64-android)
add_subdirectory(frameworks/native/cmds/installd/installd-arm64-android)
add_subdirectory(frameworks/native/cmds/servicemanager/servicemanager-arm64-android)
add_subdirectory(frameworks/native/libs/binder/libbinder-arm64-android)
add_subdirectory(libcore/libjavacore-arm64-android)
add_subdirectory(libcore/libopenjdk-arm64-android)
add_subdirectory(libnativehelper/libnativehelper-arm64-android)
add_subdirectory(libnativehelper/libnativehelper_compat_libc++-arm64-android)
add_subdirectory(kernel/msm-4.4/unifdef-x86_64-linux_glibc)
// 内核的CMakeLists是自己写的,只导入了头文件,跳转还有问题
add_subdirectory(kernel/msm-4.4/kernel_custom)
add_subdirectory(system/core/base/libbase-arm64-android)
add_subdirectory(system/core/init/libinit-arm64-android)
add_subdirectory(system/core/libziparchive/libziparchive-arm64-android)
add_subdirectory(system/core/liblog/liblog-arm64-android)
add_subdirectory(system/core/libcutils/libcutils-arm64-android)
add_subdirectory(system/core/libutils/libutils-arm64-android)
add_subdirectory(system/core/libprocessgroup/libprocessgroup-arm64-android)
add_subdirectory(system/core/logcat/logcatd-arm64-android)
add_subdirectory(system/core/logcat/liblogcat-arm64-android)
add_subdirectory(system/core/logd/logd-arm64-android)
add_subdirectory(system/core/logd/liblogd-arm64-android)
add_subdirectory(system/core/lmkd/liblmkd_utils-arm64-android)
add_subdirectory(system/core/lmkd/lmkd-arm64-android)

导入
打开CLion
选择「New CMake Project from Sources」
指定包含 CMakeLists.txt 的目录out/development/ide/clion
选择「Open Existing Project」
导入之后目录结构是扁平的,需要修改工程根目录

Tools -> CMake -> Change Project Root
下面是效果图,JNIEnv等都能直接跳转

3 遇到的问题
audioflinger没有生成CMakeLists.txt?
我用的9.0系统,audioflinger是mk编译,可能需要bp才能生成CMakeLists.txt

no such file or directory: 'external/compiler-rt/lib/cfi/cfi_blacklist.txt
找不到这个文件,这里需要改成绝对路径

// CMakeLists.txt文件开头的ANDROID_ROOT设置为绝对路径
set(ANDROID_ROOT  /home/illusion/AOSP-Native)
// 修改
${ANDROID_ROOT}/external/compiler-rt/lib/cfi/cfi_blacklist.txt

改好后,在CMake窗口Reload CMake Project
————————————————
版权声明:本文为CSDN博主「freerunnig」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/iamdy/article/details/106658583

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值