1.什么是NDK罐盔?
NDK的全稱是Native Development Kit, 是一套工具原生開發(fā)套件雕什,使你能夠在 Android 應用中使用 C 和 C++ 代碼节芥,并提供眾多平臺庫,你可使用這些平臺庫管理原生 Activity 和訪問物理設備組件调塌,例如傳感器和輕觸輸入晋南。
2.為什么使用NDK?
1.當我們需要完成以下一個或多個事項羔砾,那么 NDK 就能派上用場:
2.提高應用的執(zhí)行效率负间。將要求高性能的應用邏輯使用C開發(fā)偶妖,從而提高應用程序的執(zhí)行效率。
3.代碼的保護政溃。由于apk的java層代碼很容易被反編譯趾访,而C/C++庫反匯難度較大。
4.可以方便地使用現(xiàn)存的開源庫董虱。大部分現(xiàn)存的開源庫都是用C/C++代碼編寫的扼鞋。
5.便于移植。用C/C++寫得庫可以方便在其他的嵌入式平臺上再次使用愤诱。
3.NDK項目創(chuàng)建
使用Android Sudio創(chuàng)建DNK項目的方式有兩種:一種是直接創(chuàng)建C++ project云头;另一種是在Java 項目中手動配置,雖然更麻煩些淫半,但是更靈活值得學習溃槐。
現(xiàn)在官方推薦使用CMake工具來開發(fā)jni,cmake方式開發(fā)jni項目相對更簡單易上手科吭「吞担可以將NDK類別為SDK,將Cmake類別為build,將它看作一個編譯類工具砌溺。
1.native方法命名
extern "C" JNIEXPORT jstring JNICALL
Java_com_demo_myapplication_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
函數(shù)命名規(guī)則: Java_類全路徑_方法名,涉及的參數(shù)的含義如下:
JNIEnv*是定義任意native函數(shù)的第一個參數(shù)变隔,表示指向JNI環(huán)境的指針规伐,可以通過它來訪問JNI提供的接口方法。
jobject表示Java對象中的this匣缘,如果是靜態(tài)方法則表示jclass猖闪。
JNIEXPORT和JNICALL: 它們是JNI中所定義的宏,可以在jni.h這個頭文件中查找到。
下面肌厨,我們整理下Java和JNI的類型對照表培慌,如下所示。