众所周知,使用ndk编译代码有三种使用方式,分别是基于 Make 的 ndk-build、CMake以及独立工具链。以前进行ndk编程都是使用ndk-build进行的,新建jni目录,编写Android.mk和Application.mk,使用Notepad++进行代码编写,然后执行ndk-build进行编译。不过随着项目越来越大,这种基于记事本的编辑简直无法忍受了,于是想到了使用CLion IDE进行代码的编写和编译。CLion使用的是CMake进行项目构建的。
在ndk r19版本以前,要在CLion上编译ndk只能采用独立工具链的方式,创建独立工具链供CLion调用,官方文档如下:
独立工具链-官方文档
不过r19之后,ndk的默认工具链都是独立工具链了,不需要再创建了。截止至2020.7.1,最新的NDK版本为21.0.6113669,本文将基于该ndk版本使用CLion进行编程。
1.工具链配置
首先安装CLion和ndk工具包,然后新建工程,打开菜单File->Settings->Build,Execution,Deployment->Toolchains,点击加号选择“MinGW”新建一个工具链,如果系统没有MinGW的话,可以点击菜单右边的“Download”,在新打开的网页中点击“Sourceforge”进行下载安装,安装完成后还需要添加环境变量,网上教程很多就不再赘述了。这里我装在C盘,工具链配置如下图所示,主要是Make、C Compiler、C++ Compiler以及Debugger这四个路径的配置。
其中"\ndk\21.0.6113669\"为你的ndk根目录,根目录结构如下图所示。
2.CMake配置
打开菜单File->Settings->Build,Execution,Deployment->CMake,点击加号添加新的CMake项目配置,Name名字随便起。Toolchains选择刚才的工具链配置。 CMake options点击右边的展开,输入以下配置项。
1 2 3 4 5 6 7 8 | -DCMAKE_TOOLCHAIN_FILE="D:\AndroidStudioSDK\ndk\21.0.6113669\build\cmake\android.toolchain.cmake" -DCMAKE_SYSTEM_NAME=Android -DANDROID_ABI=arm64-v8a -DCMAKE_ANDROID_NDK="D:\AndroidStudioSDK\ndk\21.0.6113669" -DCMAKE_SYSTEM_VERSION=24 -DCMAKE_C_FLAGS="" -DCMAKE_CXX_FLAGS="" -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang |
CMake配置如下图所示,下面的三项可以留空。。
其中最重要的是CMAKE_TOOLCHAIN_FILE、CMAKE_SYSTEM_NAME以及ANDROID_ABI这三项的配置,第一个指定ndk的CMake配置文件,它位于
3.编译下载
演示就用最简单的Hello World!吧,main.c代码如下。
1 2 3 4 5 6 | #include <stdio.h> int main() { printf("Hello, World!\n"); return 0; } |
CMakeLists.txt配置如下。
1 2 3 4 5 6 | cmake_minimum_required(VERSION 3.16) project(Demo C) set(CMAKE_C_STANDARD 11) add_executable(Demo main.c) |
点击左边的锤子图标即可编译,编译完成后文件生成在cmake-build-CMake配置名目录下。
使用adb下载到手机或模拟器,赋给可执行权限,然后执行即可看到效果,JNI编程则引入头文件jni.h并把项目类型改为Libray即可生成so库。