1. 前言
????????因?yàn)楣ぷ餍枰乙獙⒁环軨語言代碼編譯成可執(zhí)行文件傳送到某安卓系統(tǒng)里執(zhí)行。
????????眾所周知,使用ndk編譯代碼有三種使用方式,分別是基于 Make 的 ndk-build、CMake以及獨(dú)立工具鏈。以前進(jìn)行ndk編程都是使用ndk-build進(jìn)行的,新建jni目錄,編寫Android.mk和Application.mk,使用Notepad++進(jìn)行代碼編寫,然后執(zhí)行ndk-build進(jìn)行編譯。不過隨著項(xiàng)目越來越大,這種基于記事本的編輯簡直無法忍受了,于是想到了使用CLion IDE進(jìn)行代碼的編寫和編譯。CLion使用的是CMake進(jìn)行項(xiàng)目構(gòu)建的。
????????在ndk r19版本以前,要在CLion上編譯ndk只能采用獨(dú)立工具鏈的方式,創(chuàng)建獨(dú)立工具鏈供CLion調(diào)用。
????????不過r19之后,ndk的默認(rèn)工具鏈都是獨(dú)立工具鏈了,不需要再創(chuàng)建了。
????????本文記錄在Clion開發(fā)工具上使用NDK編譯可以在安卓上執(zhí)行程序的配置步驟。
2. NDK下載安裝
從以下路徑下載NDK
NDK 下載 ?|? Android NDK ?|? Android Developers
選擇?Windows 64 位 發(fā)表此博客時,最新版本是
android-ndk-r25c-windows.zip
我意外的選了個?不受支持的舊版本android-ndk-r19c,小伙伴們請安裝最新的。
下載后解壓縮。
然后將解壓后的目錄配置到系統(tǒng)環(huán)境變量 path 中
?CMD執(zhí)行命令
ndk-build.cmd -v
看看是否安裝成功
?OK,顯示除了版本號,安裝成功。
3.Clion配置與執(zhí)行
????????打開Clion,新建一個C project。
????????打開菜單File->Settings->Build,Execution,Deployment->Toolchains,點(diǎn)擊加號選擇“MinGW”新建一個工具鏈,如果系統(tǒng)沒有MinGW的話,可以點(diǎn)擊菜單右邊的“Download”,在新打開的網(wǎng)頁中點(diǎn)擊“Sourceforge”進(jìn)行下載安裝,安裝完成后還需要添加環(huán)境變量。
????????我的環(huán)境已經(jīng)有了MinGw, 工具鏈配置如下圖所示
主要是Make、C Compiler、C++ Compiler這三個路徑的配置。
打開菜單File->Settings->Build,Execution,Deployment->CMake,點(diǎn)擊加號添加新的CMake項(xiàng)目配置,Name名字隨便起。Toolchains選擇剛才的工具鏈配置。 CMake options點(diǎn)擊右邊的展開,輸入以下配置項(xiàng)。
?CMake options配置內(nèi)容復(fù)制如下:
-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這三項(xiàng)的配置,第一個指定ndk的CMake配置文件,它位于/build/cmake/android.toolchain.cmake,第二個是目標(biāo)系統(tǒng)平臺,這里為Android,第三個是架構(gòu),這里手機(jī)CPU是arm64-v8a架構(gòu)的,所以用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 <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
點(diǎn)擊編譯:
執(zhí)行日志:
"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沒有設(shè)置,系統(tǒng)默認(rèn)取最小值16。
根據(jù)編譯打印的最后一行,打開目錄?C:/Users/harry_zhang/CLionProjects/C_plus_test/cmake-build-debug-mingw
這里的C_plus_test就是生成的文件。這個名字是我clion新建項(xiàng)目時隨便取的。
4.adb傳送到安卓設(shè)備調(diào)試成功
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
執(zhí)行成功。
5.最后
????????其實(shí)我的安卓環(huán)境應(yīng)該?APP_PLATFORM=android-29,但是低版本也是可以執(zhí)行的。
????????如果你想改會原來的編譯和執(zhí)行環(huán)境,可以選擇Custom Compier,打勾保存,即可。
文章來源:http://www.zghlxwxcb.cn/news/detail-410921.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-410921.html
到了這里,關(guān)于在Clion開發(fā)工具上使用NDK編譯可以在安卓上執(zhí)行的程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!