主要思路
CLion开发NDK,思路就是在代码开发编译的时候必须使用ndk提供的依赖环境。代码编译完成后,然后将二进制包发送到目标机器上,然后进行远程调试。
下载软件与系统相关配置
下载安装CLion 2021.2.2版本
下载安装Android Studio最新版本,如下图进入设置,然后下载最新版本的NDK和CMake
进入Android Studio下载的SDK,SDK包含了Android开发的所有套件以及依赖,包含了C++, Java等依赖都在这里。
下载完成了Android SDK后,Android中的adb一些组件加入操作系统的环境变量,这样的目的是我们可以在命令行使用adb这些组件了。
我们在windows系统中的命令行界面敲入adb,就能正常使用adb命令了。
Android模拟器配置
这里我使用夜神模拟器,需要给夜神模拟器分配一个局域网静态IP地址,需要注意的是子网页面要和操作系统的一致,局域网静态IP不要被其他设备已经占有的。
配置完成了网络后,需要将夜神模拟器中的adb替换成Android Studio SDK中的adb,夜神模拟器中nox_adb与adb都需要更换成Android Studio SDK中的adb(nox_adb与adb都是Android Studio SDK中的adb只是名字不一样)。
CLion配置(NDK的关键,重要)
首先需要配置Toolchains
make配置成
C:\Users\crdch\AppData\Local\Android\Sdk\ndk\23.0.7599858\prebuilt\windows-x86_64\bin\make.exe
C Compiler配置成
C:\Users\crdch\AppData\Local\Android\Sdk\ndk\23.0.7599858\toolchains\llvm\prebuilt\windows-x86_64\bin\clang.exe
C++ Compiler配置成
C:\Users\crdch\AppData\Local\Android\Sdk\ndk\23.0.7599858\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe
debugger也是配置NDK中的debugger,地址:
C:\Users\crdch\AppData\Local\Android\Sdk\ndk\23.0.7599858\prebuilt\windows-x86_64\bin\gdb.exe
本小节总结:发现到一个点是,NDK开发的时候不需要用操作系统MinGW的编译与调试工具,谷歌官方提供完整的编译与调试组件,编译器与调试器必须要使用他们提供的。
同时在后面的开发也是如此,代码中所需要的依赖也必须使用NDK中提供的,不能使用其他的,否则肯定会报错运行不了。
配置CMake
如下图的配置,名称可以随便起,Toolchain那个配置,就是我们刚才配置的Toolchain。其中的CMake options需要着重注意。
下面是CMake options的内容。DCMAKE_TOOLCHAIN_FILE 和 DCMAKE_ANDROID_NDK 需要根据你的Android Studio SDK中的NDK配置改变而改变。
-DCMAKE_TOOLCHAIN_FILE="C:\Users\crdch\AppData\Local\Android\Sdk\ndk\23.0.7599858\build\cmake\android.toolchain.cmake"
-DCMAKE_SYSTEM_NAME=Android
-DANDROID_ABI=x86
-DCMAKE_ANDROID_NDK="C:\Users\crdch\AppData\Local\Android\Sdk\ndk\23.0.7599858"
-DCMAKE_SYSTEM_VERSION=24
-DCMAKE_C_FLAGS=""
-DCMAKE_CXX_FLAGS=""
-DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang
DANDROID_ABI 这个参数是你打算把代码编译成什么架构运行的二进制代码,我使用的是夜神模拟器,CPU架构是x86 32位的。所以这里是x86,如果是其他架构的CPU需要改变,改变的链接和图片如下。
https://developer.android.google.cn/ndk/guides/abis
代码配置
一般情况下,在使用 https://github.com/strazzere/android-unpacker 的代码时候,通常是没有CMakeLists.txt的。那么你需要根据业务的需要创建一个,其中在创建的时候这引入依赖是不能缺少的。
文本内容的如下
cmake_minimum_required(VERSION 3.6)
project(android_unpacker C)
set(CMAKE_C_STANDARD 11)
#include_directories(hide-emu)
include_directories(C:\\Users\\crdch\\AppData\\Local\\Android\\Sdk\\ndk\\23.0.7599858\\toolchains\\llvm\\prebuilt\\windows-x86_64\\sysroot\\usr\\include)
include_directories(C:\\Users\\crdch\\AppData\\Local\\Android\\Sdk\\ndk\\23.0.7599858\\toolchains\\llvm\\prebuilt\\windows-x86_64\\sysroot\\usr\\include\\x86_64-linux-android)
link_directories(C:\\Users\\crdch\\AppData\\Local\\Android\\Sdk\\ndk\\23.0.7599858\\toolchains\\llvm\\prebuilt\\windows-x86_64\\sysroot\\usr\\lib)
#include_directories(native-unpacker)
add_executable(kisskiss
definitions.h
kisskiss.c
kisskiss.h)
创建gdb remote debug
如下图中的ip地址,就是夜神模拟器中的静态ip地址,端口号是任意指定的。
夜神模拟器启动gdbserver
adb shell进入Android系统./gdbserver :1234 ./tmp/kisskiss
其中的./tmp/kisskiss
是代码中编译完成的二进制可执行程序,需要通过gdbserver指向它。
gdbserver也是由Android Studio提供,如下图方框中是不同的Android系统环境的gdbserver。
启动配置好调试器就