1分鐘學(xué)會NDK開發(fā)

一、android studio的ndk環(huán)境搭建

1、下載安裝包

File-setting-Appearance&Behavior-System Settings-Android SDK-SDK Tools
找到NDK Cmake選項并選中,點擊Apply,會下載對應(yīng)的安裝包。

2、配置路徑

File-Project Structure-SDK Location配置下載的NDK的路徑
D:\software\sdk\ndk\21.0.6113669
(這個是我ndk下載存放的目錄,路徑一定要帶上ndk的版本號,如果遇到手動選路徑不可點擊的情況,就要去local.properties文件中,手動添加
sdk.dir=D:\software\sdk
ndk.dir=D:\software\sdk\ndk\21.0.6113669)

二、新建一個C++的工程

File-new-New Project 選擇 native C++ ,點next,生成C++工程,直接運行,會出現(xiàn)Hello from C++ 的提示語,這就是java直接調(diào)用本地C++代碼的Demo。

下面是C++代碼的實現(xiàn)部分,也是后面編譯成so文件的核心代碼
//#include <jni.h>
//#include <string>
//extern "C" JNIEXPORT jstring JNICALL
//Java_com_kn_ctest_MainActivity_stringFromJNI(
// JNIEnv* env,
// jobject /* this */) {
// std::string hello = "Hello from C++12567";
// return env->NewStringUTF(hello.c_str());
//}

三、CMake編譯生成so文件

Build-Make Project 就會在app/build/intermediates/cmake/debug/obj 目錄底下生成
armeabi-v7a arm64-v8a x86 x86_64四個文件,以及對應(yīng)平臺的libxxx.so文件(xxx默認就是新建項目的名稱,比如我的叫CTest,對應(yīng)的so文件名就叫l(wèi)ibctest.so)
(每次build-make project 的時候,要先刪除jniLibs文件夾下的so文件,否則會報錯
If you are using jniLibs and CMake IMPORTED targets, see )

四、調(diào)用.so及其方法

1、新建jniLibs文件

在app-src-main目錄底下,新建一個jniLibs文件,將app/build/intermediates/cmake/debug/obj 生成的armeabi-v7a文件一塊拷貝過來。

2、gradle配置jniLibs

gradle的android{}中 配置
sourceSets {
main {
jniLibs.srcDirs = ['src/main/jniLibs']
}
}

并注釋掉 (不注釋掉,會導(dǎo)致調(diào)用stringFromJNI方法,調(diào)用不到so的方法,而是本地c++的方法)
// externalNativeBuild {
// cmake {
// path file('src/main/cpp/CMakeLists.txt')
// version '3.18.1'
// }
// }

Sync Now一下

3、調(diào)用so方法

在要調(diào)用C++的activity中,添加so文件加載方法
static {
System.loadLibrary("ctest");
}
調(diào)用C++中聲明的方法:
tv.setText(stringFromJNI());
public native String stringFromJNI();//該方法一定要和C++中聲明的方法一樣,而且包名路徑都要一樣,否則會調(diào)用失敗的。

直接運行,android調(diào)用自己ndk編譯的so文件,就成功了,soEasy!?。?/strong>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容