如何用CLion 导入android 系统项目的代码

本文介绍了如何使用CLion编辑器导入并管理Android系统的代码,强调了CLion的代码组织结构、高亮、补全等功能,以及在导入过程中需要调整的CMakeLists.txt配置。

很少写博客,没有什么动力啊,大家多支持下。

以前看android代码的时候一直想有一个神器能满足我的要求:

  1. 代码的组织结构不要变化,方便我定位代码的位置
  2. 要有代码高亮,代码补全,自动提示的功能
  3. UI要友好,使用方便

现在终于找到了, 进入正题:

把下面几个文件放到系统根目录下, 然后用 clion File->Open 选中 android_c.iml 文件

android_c.ipr

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
  <component name="CidrRootsConfiguration">
    <excludeRoots>
      <file path="$PROJECT_DIR$/.repo" />
      <file path="$PROJECT_DIR$/abi" />
      <file path="$PROJECT_DIR$/art" />
      <file path="$PROJECT_DIR$/bionic" />
      <file path="$PROJECT_DIR$/bootable" />
      <file path="$PROJECT_DIR$/build" />
      <file path="$PROJECT_DIR$/cts" />
      <file path="$PROJECT_DIR$/dalvik" />
      <file path="$PROJECT_DIR$/device" />
      <file path="$PROJECT_DIR$/external" />
      <file path="$PROJECT_DIR$/gen" />
      <file path="$PROJECT_DIR$/kernel" />
      <file path="$PROJECT_DIR$/libnativehelper" />
      <file path="$PROJECT_DIR$/ndk" />
      <file path="$PROJECT_DIR$/out" />
      <file path="$PROJECT_DIR$/packages" />
      <file path="$PROJECT_DIR$/pdk" />
      <file path="$PROJECT_DIR$/platform_testing" />
      <file path="$PROJECT_DIR$/prebuilts" />
      <file path="$PROJECT_DIR$/res" />
      <file path="$PROJECT_DIR$/rkst" />
      <file path="$PROJECT_DIR$/rockdev" />
      <file path="$PROJECT_DIR$/sdk" />
      <file path="$PROJECT_DIR$/tools" />
      <file path="$PROJECT_DIR$/u-boot" />
      <file path="$PROJECT_DIR$/vendor" />
    </excludeRoots>
  </component>
  <component name="InspectionProjectProfileManager">
    <profile version="1.0">
      <option name="myName" value="Project Default" />
      <inspection_tool class="LossyEncoding" enabled="false" level="WARNING" enabled_by_default="false" />
    </profile>
    <version value="1.0" />
  </component>
  <component name="ProjectModuleManager">
    <modules>
      <module fileurl="file://$PROJECT_DIR$/android_c.iml" filepath="$PROJECT_DIR$/android_c.iml" />
    </modules>
  </component>
</project>

android_c.iml

<?xml version="1.0" encoding="UTF-8"?>
<module classpath="CMake" type="CPP_MODULE" version="4" />

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
project(android_c)
add_definitions(-DANDROID)

set(PROJECT_DIR "path/of/your/android/project")
set(CMAKE_C_COMPILER ${PROJECT_DIR}/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-gcc)
set(CMAKE_CXX_COMPILER ${PROJECT_DIR}/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-gcc)

include_directories(kernel/include)
include_directories(prebuilts/ndk/9/platforms/android-19/arch-arm/usr/include)

include_directories(external/libcxx/include)
include_directories(external/libpcap)

include_directories(bionic/libc)
include_directories(bionic/libc/kernel/uapi)
include_directories(bionic/libc/include)
include_directories(bionic/libc/arch-arm/include)
include_directories(bionic/libstdc++/include)
include_directories(bionic/libc/upstream-netbsd/libc/include)
include_directories(bionic/libthread_db/include)
include_directories(bionic/libm/include)


include_directories(frameworks/native/include)
include_directories(frameworks/base/include/)
include_directories(frameworks/av/include/)
include_directories(system/core/include)
include_directories(hardware/libhardware/include)
include_directories(hardware/rockchip/camera/SiliconImage/include)
include_directories(hardware/rockchip/camera/SiliconImage/include/isp_cam_api)
include_directories(hardware/rockchip/camera/SiliconImage/isi/include)

file(GLOB_RECURSE BIONIC_SOURCES "bionic/*.cpp" "bionic/*.c" "bionic/*.cxx" "bionic/*.h")
file(GLOB_RECURSE HARDWARE_SOURCES "hardware/*.cpp" "hardware/*.c" "hardware/*.cxx" "hardware/*.h")
file(GLOB_RECURSE FRAMEWORK_SOURCES "frameworks/*.cpp" "frameworks/*.c" "frameworks/*.cxx" "frameworks/*.h")
file(GLOB_RECURSE SYSTEM_SOURCES "system/*.cpp" "system/*.c" "system/*.cxx" "system/*.h")
file(GLOB_RECURSE LIBCORE_SOURCES "libcore/*.cpp" "libcore/*.c" "libcore/*.cxx" "libcore/*.cc" "libcore/*.h")


add_executable(android_c ${BIONIC_SOURCES} ${LIBCORE_SOURCES} ${HARDWARE_SOURCES} ${FRAMEWORK_SOURCES} ${SYSTEM_SOURCES} )

CMakeLists.txt 中的 PROJECT_DIR , CMAKE_C_COMPILER ,CMAKE_CXX_COMPILER 可能需要修改


文件简单说明

  • .ipr project 文件
  • .iml module 文件
  • .iws workspace 文件(自动生成)
  • CMakeLists.txt clion使用cmake编译

<think> 根据用户的问题,用户想要了解如何使用Android Studio阅读Android代码。结合提供的引用内容,我们可以整理出以下步骤: 1. **准备工作**: - 确保已经下载了Android代码(通过repo等工具)。 - 建议在Linux环境下操作,但也可以将源码复制到Windows下阅读(注意文件系统路径问题)。 2. **生成Android Studio配置文件**: -源码根目录下执行命令生成配置文件: ```bash make idegen # 生成idegen.jar ./development/tools/idegen/idegen.sh # 生成android.iml和android.ipr ``` 这两个文件(`android.iml`和`android.ipr`)是Android Studio的项目配置文件。 3. **使用Android Studio打开项目**: - 启动Android Studio,选择`File -> Open`,然后选择生成的`android.ipr`文件。 - 首次打开需要较长时间(因为要索引整个源码)。 4. **配置项目SDK(可选,但推荐)**: - 为了避免SDK冲突,建议将项目SDK设置为`<No SDK>`: - `File -> Project Structure -> Project` -> 设置`Project SDK`为`<No SDK>`。 - 在模块(Modules)设置中: - 选择`Dependencies`选项卡,设置`Module SDK`为`<No Project SDK>`。 - 将`Module source`移动到依赖列表的最上面(确保跳转时优先使用源码)。 5. **添加源码目录(如果需要)**: - 引用[1]提到,可以手动添加源码目录(如`frameworks`, `hardware`, `kernel-5.10`等): - `File -> Project Structure -> Modules` -> 点击`+`(Add Content Root)添加目录。 - 然后标记为`Sources`(这样Android Studio会将这些目录识别为源代码)。 - 但通过`idegen.sh`生成的配置文件通常已经包含了所有源码目录,所以这一步可能不需要。 6. **解决C/C++代码跳转问题**: - 引用[1]提到,C/C++代码跳转可能不直接支持,可以采用以下方法: - 使用`Shift + Shift`(全局搜索)或`Ctrl + Shift + F`(在路径中查找)来定位代码- 另外,可以通过配置NDK或使用CLion(专门用于C/C++的IDE)来提高C/C++代码的阅读体验,但这超出了本问题的范围。 7. **性能优化**: - 由于Android源码庞大,首次打开和索引会消耗大量内存和时间。 - 可以调整Android Studio的内存设置(如增大`-Xmx`参数)来提升性能。 - 如果只关注部分模块,可以在`android.iml`中排除不需要的目录(如`out`目录、`prebuilts`等)。 8. **注意事项**: - 引用[3]提到,在生成配置文件前可能需要确保源码已经编译过(特别是`idegen`模块),因此建议先编译整个源码或至少编译`idegen`模块(`mmm development/tools/idegen/`)。 综上所述,主要步骤是生成配置文件并导入Android Studio,然后进行必要的配置。需要注意的是,对于C/C++代码的支持有限,可能需要结合搜索功能。 </think> ### 如何用Android Studio阅读Android源码 #### 📝 核心步骤(Linux/macOS环境) 1. **生成配置文件** ```bash cd /path/to/android_source # 进入源码根目录 make idegen # 编译idegen工具 ./development/tools/idegen/idegen.sh # 生成android.ipr/android.iml ``` > 生成项目配置文件(需先完成源码编译)[^2][^3] 2. **Android Studio配置** - 打开项目:`File > Open > 选择android.ipr` - 设置SDK: `File > Project Structure > Project SDK`设置为`<No SDK>`[^1] - 优化依赖: `Modules > Dependencies > Module SDK`设为`<No Project SDK>`,拖动`Module source`到顶部[^1] 3. **添加源码目录(可选)** 若部分代码未索引: `Project Structure > Modules > + Add Content Root` 添加关键目录:`frameworks/`, `hardware/`, `system/`等[^1] #### ️ 注意事项 1. **C/C++代码跳转限制** - Java代码支持直接跳转 - C/C++需使用全局搜索: `Ctrl+Shift+F`(Win/Linux)或 `Shift+Shift`(所有平台)[^1] 2. **性能优化建议** - 首次加载需30+分钟(建立索引) - 在`android.iml`中排除非必要目录(如`.repo/`, `out/`) - 调整内存:`Help > Edit Custom VM Options`增加`-Xmx8g` 3. **Windows特殊处理** 需将Linux编译生成的`android.ipr`复制到Windows,注意: - 文件路径需保持一致 - 建议使用NTFS分区(符号链接支持) #### 💡 进阶技巧 - **版本切换**:通过`repo forall -c git checkout branch_name`切换分支后重新生成配置 - **内核源码**:单独添加`kernel/`目录并标记为`Sources`[^1] - **代码搜索**:利用`Ctrl+N`(类搜索)和`Ctrl+Alt+Shift+N`(符号搜索)高效定位 > 提示:完整编译源码(`make -j8`)可解决90%代码跳转问题[^2][^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值