使用CLion调试Android Native源码

简介

网上流传的使用Android Studio调试Framework的教程很多,很多同学已经可以使用AS轻松的attach任意进程并进行动态调试。但是对于调试Android Native,虽然有着传统的使用Console运行GDB Client来进行调试的方法,但是我一直在期望着Android Native也可以有一种类似于AS调试Framework调试体验:

  1. 可以任意选择进程进行调试
  2. 切换进程进行调试不需要大费周折,可以随切随调
  3. 同时也可以支持代码跳转,方便阅读 Native 源码
  4. 开启IDE的速度在可接受的范围内

Prerequisite

我目前成功搭建调试环境的配置是:

  1. MacOs High Sierra(10.13.1)
  2. Xcode 9.3
  3. IDE: CLion 2018.1
  4. 手机: Nexus 6P
  5. 编译源码:android-8.1.0_r25
  6. VPN

搭建步骤

编译环境配置

环境配置和AS搭建Framework阅读环境一致

  • 下载并配置repo
mkdir ~/bin
PATH=~/bin:$PATH

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
  • 安装JDK1.8

地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下载的话需要账号,如果不想注册的话可以像我一样从网盘下载

  • 设置可打开文件上限
vim ~/.bash_profile

加入以下

#set the number of open files to be 1024 
ulimit -S -n 1024
  • 创建大小写敏感的磁盘映像
hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 120g ~/android.dmg.sparseimage

以上,还有一些编译的环境配置,自行安装吧

下载并编译

repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r25

repo sync -c -d --force-sync --no-tags --prune -j12

make -j12
  1. 注1:android-8.1.0_r25 是我选择的下载分支,自行选择可以到 https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds 按需挑选
  2. 注2: sync 后加入 --no-tags 是为了避免下载调试不需要用到的tag,可以大量减少下载体积
  3. 注3: 遇见Xcode SDK版本不符合编译所需的问题,可以到 https://github.com/phracker/MacOSX-SDKs 下载,解压后放置到对应目录。使用xcrun --show-sdk-path命令可以找到对应的目录
  4. 注4: High Sierra目前编译存在bison的BUG,需要cherry-pick代码,重编bison并替换原文件,再次重编即可。该change地址:lib: vasnprintf: Fix illegal instruction

编译完成后对手机进行刷机:

# 重启并进入bootloader模式
adb reboot bootloader

# 刷机后重启
sudo fastboot -w
sudo fastboot flash boot boot.img
sudo fastboot flash system system.img
sudo fastboot flash userdata userdata.img
sudo fastboot reboot

调试环境配置

  • 创建ipr, iml文件
cd /Volumes/Android
touch clion.ipr clion.iml
  • 修改配置文件内容,这里参考我的写法:

clion.ipr

```






top Created with Sketch.