不少so庫都是用NDK寫的, 方便作成工具庫
javascript
打開SDK Manager工具, 找到LLDB, NDK 兩個就能夠, 顯示未安裝的就選上確認安裝好,以下圖php
安裝好後,能夠在目錄下找看有沒有ndk文件夾, 或者ndk-bundle文件夾,兩個都同樣,備用
css
進入ndk文件夾, 按下Shift鍵+鼠標右鍵, 選擇 在此處打開命令窗口, 打開CMD窗口,輸入命令ndk-build, 打印結果以下圖是能正確使用的vue
接下來, 設置Android Studio 指定 ndk的路徑, 操做File->Project Structure, 設置Android NDK Location爲剛纔的路徑 以下圖java
上面ndk就算配置好了,繼續檢查一下java,輸入命令javah, 輸出以下圖是正常的, 不是的話,就須要配置javah 環境變量,,,此方法請自行百度
ios
筆者文件名是JNITest.java, 代碼以下c++
public class JNITest {
static {
System.loadLibrary("JNITest");
}
public native static String getText();
}複製代碼
而後點擊 Build -> Make Project , 將Java文件編譯成class文件,,文件能夠在下圖找有沒有生成的es6
文件路徑好像有點長, 項目路徑下,開始找 app/build/intermediatesweb
沒有classes就有javac,sql
而後, javac/debug/.../classes 找到了,
接下來是com/example/myapplication/jni 相似於應用包名 com.example.myapplication.jni, 包名下有,如圖
能夠打開JNITest.class看看,這個自動生成的,就不貼源碼了,其實這個是能夠用javac命令吧Java文件編譯成class的
也就是MainActivity類文件,在onCreate(Bundle savedInstanceState)加上調用上面的代碼
String text = JNITest.getText();
//showAlert(text);
new AlertDialog.Builder(this).setMessage(text).setPositiveButton("OK", null).create().show();複製代碼
後面若是正常,運行app效果圖以下,就是寫的NDK應用是成功的,最後就開始新的征程了...
Android Studio中選擇項目文件下的app/src/main文件夾,鼠標右鍵,點擊Open in Terminal, 相似於上面說的,在指定的路徑下打開cmd命令窗口
輸入命令按照格式來 ,以下
javah -d jni -classpath [存放class文件的路徑] [包名.class文件名]
筆者輸入,其中...省略了,太長不顯示:
javah -d jni -classpath D:\...\app\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes com.example.myapplication.jni
執行不出錯的話, 在項目app/src/main目錄下會出現jni文件夾,裏面就有編譯好的com_example_myapplication_jni_JNITest.h文件,打開看文件源碼,以下
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_myapplication_jni_JNITest */
#ifndef _Included_com_example_myapplication_jni_JNITest
#define _Included_com_example_myapplication_jni_JNITest
#ifdef __cplusplusextern "C" {
#endif
/* * Class: com_example_myapplication_jni_JNITest * Method: getText * Signature: ()Ljava/lang/String; */
JNIEXPORT jstring JNICALL Java_com_example_myapplication_jni_JNITest_getText (JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif複製代碼
須要建立剩下的三個文件,除了h文件, 在jni目錄下,如圖
第一個文件, test.c, 本身寫,源碼以下
#include <jni.h>
#include <stdio.h>
#include "com_example_myapplication_jni_JNITest.h"
JNIEXPORT jstring JNICALL Java_com_example_myapplication_jni_JNITest_getText (JNIEnv *env, jclass obj){
return (*env)->NewStringUTF(env, "This is my first NDK Application");
}複製代碼
第二個文件,Android.mk.內容以下
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := JNITest
LOCAL_SRC_FILES := test.c
include $(BUILD_SHARED_LIBRARY)複製代碼
第三個文件,Application.mk,內容以下
APP_ABI := all複製代碼
還有,改下項目的app/build.gradle文件, 在部分sourceSets添加jni
sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/main/java/lib']
jniLibs.srcDirs = ['src/main/libs']
jni.srcDirs = [] //屏蔽掉默認的jni編譯生成過程
}
}複製代碼
接着,cd 命令進入項目app/src/main/jni目錄, 用ndk-build命令生成so庫文件, 輸出以下結果算是正常的
生成so文件可在項目app/src/main/libs目錄下看到
最後, 項目能夠運行了,,運行過程順利的話, App會彈出一個對話框,這就完成了
參考文獻: