安卓使用記錄筆記(1)ndk使用之Java呼叫c++程式碼
阿新 • • 發佈:2019-01-07
1.在Java中新建一個Utils類
1)指定路徑下新建一個資料夾 ,包名為Utils
2) 新建類
NativeUtils.java
package com.sample.Utils; public class NativeUtils { public static native int LoadFile(); //函式名字可以自定義,只需要對應起來即可 public static native int StartPoisson(); static{ System.loadLibrary("TeapotNativeActivity"); //用來連結so庫,本例中庫名對應的是libTeapotNativeActivity.so } }
3)Java中呼叫方式為
NativeUtils.LoadFile();//名字對應
NativeUtils.StartPoisson();
4)c++中函式實現
extern "C" JNIEXPORT jint JNICALL Java_com_sample_Utils_NativeUtils_LoadFIle(JNIEnv *env, jclass type) { //函式名字規則:這裡Java_開頭,然後包名com_sample_Utils_, //然後類名NativeUtils_,然後函式名LoadFIle // TODO return 0; }
5)注意,如果提示找不到函式實現時,說明so沒有連結進去
類中定義,詳見(2)
static{
System.loadLibrary("TeapotNativeActivity"); //用來連結so庫,本例中庫名對應的是libTeapotNativeActivity.so
}
在gradle中新增以下程式碼:
sourceSets {
// main {
// jniLibs.srcDirs = ['libs']
// }
// }
注意在資料夾中新增libs資料夾,和armeabi-v7a子資料夾,裡面放對應的so檔案