新建工程:
一定要把這個勾上:

flag.png
在defaultConfig里加入如下代碼:
ndk {
abiFilters "x86_64", "armeabi-v7a", "x86" //輸出指定三種平臺下的so庫 可以自己決定
}
另外默認(rèn)的so名稱是:native-lib,也可以修改,修改步驟如下:
1:打開項目中的 app\CMakeLists.txt ,找到:
add_library( # Sets the name of the library.
native-libs
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/native-lib.cpp )
僅僅修改上面代碼中,第一個native-lib以及加載庫時,設(shè)定的類名字符串:
static {
System.loadLibrary("native-lib");
}
還有一個地方,下面代碼第一個native-lib:
target_link_libraries( # Specifies the target library.
native-libs
# Links the target library to the log library
# included in the NDK.
${log-lib} )
注意:你要寫的JNI要和自己的工程路徑一樣,即“System.loadLibrary("native-lib");”這個代碼寫在哪個類里,JNICALL的路徑就是哪個,并且在該類里定義原生方法:
public native String stringFromJNI();
我的路徑是“com.example.jackieyao.hellojni.MainActivity”所以,jni代碼如下:
extern "C"
JNIEXPORT jstring
JNICALL
Java_com_example_jackieyao_hellojni_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++ dsdsf";
return env->NewStringUTF(hello.c_str());
}
build后,在“/Users/jackieyao/Downloads/HelloJNI2/app/build/intermediates/cmake”里就會出現(xiàn)多平臺的so文件。
如果運行失敗,嘗試在項目的gradle里的android{...}里加入如下代碼:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
在MainActivity里使用如下:

ff.png