在Clion开发工具上使用NDK编译可以在安卓上执行的程序
创始人
2025-06-01 03:10:32
0

1. 前言

        因为工作需要,我要将一份C语言代码编译成可执行文件传送到某安卓系统里执行。

        众所周知,使用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的默认工具链都是独立工具链了,不需要再创建了。

        本文记录在Clion开发工具上使用NDK编译可以在安卓上执行程序的配置步骤。

2. NDK下载安装

从以下路径下载NDK

NDK 下载  |  Android NDK  |  Android Developers

选择 Windows 64 位 发表此博客时,最新版本是

android-ndk-r25c-windows.zip

我意外的选了个 不受支持的旧版本android-ndk-r19c,小伙伴们请安装最新的。

下载后解压缩。

然后将解压后的目录配置到系统环境变量 path 中

 CMD执行命令

ndk-build.cmd -v

看看是否安装成功

 OK,显示除了版本号,安装成功。

3.Clion配置与执行

        打开Clion,新建一个C project。

        打开菜单File->Settings->Build,Execution,Deployment->Toolchains,点击加号选择“MinGW”新建一个工具链,如果系统没有MinGW的话,可以点击菜单右边的“Download”,在新打开的网页中点击“Sourceforge”进行下载安装,安装完成后还需要添加环境变量。

        我的环境已经有了MinGw, 工具链配置如下图所示

主要是Make、C Compiler、C++ Compiler这三个路径的配置。

打开菜单File->Settings->Build,Execution,Deployment->CMake,点击加号添加新的CMake项目配置,Name名字随便起。Toolchains选择刚才的工具链配置。 CMake options点击右边的展开,输入以下配置项。

 CMake options配置内容复制如下:

-DCMAKE_TOOLCHAIN_FILE="D:\softwaretmp\android-ndk-r19c-windows-x86_64\android-ndk-r19c\build\cmake\android.toolchain.cmake"
-DCMAKE_SYSTEM_NAME=Android
-DANDROID_ABI=arm64-v8a
-DCMAKE_ANDROID_NDK="D:\softwaretmp\android-ndk-r19c-windows-x86_64\android-ndk-r19"
-DCMAKE_SYSTEM_VERSION=19
-DCMAKE_C_FLAGS=""
-DCMAKE_CXX_FLAGS=""
-DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang

        其中最重要的是CMAKE_TOOLCHAIN_FILE、CMAKE_SYSTEM_NAME以及ANDROID_ABI这三项的配置,第一个指定ndk的CMake配置文件,它位于/build/cmake/android.toolchain.cmake,第二个是目标系统平台,这里为Android,第三个是架构,这里手机CPU是arm64-v8a架构的,所以用arm64-v8a。

查看CMakelists.txt,如下,未做改动

cmake_minimum_required(VERSION 3.23)
project(C_plus_test)set(CMAKE_CXX_STANDARD 14)add_executable(C_plus_test main.cpp)

        配置完成,写一个最简单的hello world程序测试以下:

#include int main()
{printf("hello world\n");return 0;
}

点击编译:

执行日志:

"D:\Program Files\JetBrains\CLion 2022.2.4\bin\cmake\win\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=D:/softwaretmp/android-ndk-r19c-windows-x86_64/android-ndk-r19c/prebuilt/windows-x86_64/bin/make.exe -DCMAKE_C_COMPILER=D:/softwaretmp/android-ndk-r19c-windows-x86_64/android-ndk-r19c/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe -DCMAKE_CXX_COMPILER=D:/softwaretmp/android-ndk-r19c-windows-x86_64/android-ndk-r19c/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe -DCMAKE_TOOLCHAIN_FILE=D:\softwaretmp\android-ndk-r19c-windows-x86_64\android-ndk-r19c\build\cmake\android.toolchain.cmake -DCMAKE_SYSTEM_NAME=Android -DANDROID_ABI=arm64-v8a -DCMAKE_ANDROID_NDK=D:\softwaretmp\android-ndk-r19c-windows-x86_64\android-ndk-r19 -DCMAKE_SYSTEM_VERSION=19 -DCMAKE_C_FLAGS= -DCMAKE_CXX_FLAGS= -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang -G "CodeBlocks - MinGW Makefiles" -S C:\Users\harry_zhang\CLionProjects\C_plus_test -B C:\Users\harry_zhang\CLionProjects\C_plus_test\cmake-build-debug-mingw
-- ANDROID_PLATFORM not set. Defaulting to minimum supported version
16.
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: D:/softwaretmp/android-ndk-r19c-windows-x86_64/android-ndk-r19c/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/softwaretmp/android-ndk-r19c-windows-x86_64/android-ndk-r19c/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/harry_zhang/CLionProjects/C_plus_test/cmake-build-debug-mingw[Finished]

由于ANDROID_PLATFORM没有设置,系统默认取最小值16。

根据编译打印的最后一行,打开目录 C:/Users/harry_zhang/CLionProjects/C_plus_test/cmake-build-debug-mingw

这里的C_plus_test就是生成的文件。这个名字是我clion新建项目时随便取的。

4.adb传送到安卓设备调试成功

devicename:/data/local/tmp # ls -l | grep C_plus_test
-r--r--r-- 1 shell shell     10344 2023-03-21 19:18 C_plus_test
devicename:/data/local/tmp # chmod +x C_plus_test
devicename:/data/local/tmp # ./C_plus_test
hello world

执行成功。

5.最后

        其实我的安卓环境应该 APP_PLATFORM=android-29,但是低版本也是可以执行的。

相关内容

热门资讯

还得加钱!利物浦报价维尔茨再遭... 北京时间6月2日消息,据德国媒体报道称,利物浦求购维尔茨的第二份报价遭到勒沃库森拒绝,药厂坚持要价1...
罗马诺:欧冠决赛的0-5惨败,... 直播吧6月2日讯 欧冠决赛,国际米兰0-5完败巴黎圣日耳曼,无缘冠军。据转会名记罗马诺透露,本场失利...
刚刚!港股下挫,A50跌超2%... 每经编辑|何小桃 受全球关税负面信息的打击,6月2日上午,亚太股市几乎全线下跌。 截至发稿,恒生...
原创 权... 作者:吕东平 摘要 在全球化与文明对话日益深入的今天,某些国家仍呈现出权力结构对法治原则的系统性侵...
分手后男子起诉按现金价折算金饰... 近日,宁夏同心县人民法院公布一起案例,2024年9月,宝某与周某经人介绍相识并按照习俗结婚,宝某依习...
连连数字盘中一度涨超78% 香... 连连数字(02598)盘中一度涨超78% ,高见18港元,股价创新高,截至发稿,股价上涨65.47%...
官员饮酒聚餐致死,安徽:绝不姑... 据《安徽日报》报道,6月1日晚,安徽省委常委会召开会议,传达学习中央层面深入贯彻中央八项规定精神学习...
3名干部被查,均已退休,年龄最... 原江西省工业和信息化委员会党组成员、副主任杨人平被查 据江西省纪委监委5月30日消息:原江西省工业和...
曼联门神奥纳纳爆转会!沙特土豪... 各位球迷朋友们,转会市场这潭水啊,是越来越深,越来越浑!今儿个咱聊聊曼联的门神——安德烈·奥纳纳。这...
女子搬新家遭邻居多次持刀砍门,... 极目新闻记者 王柳钦 近日,有辽宁大连的网友发视频称,疑似患精神疾病的邻居多次持刀上门,用刀砍其家门...