Android 的嵌入式寫法,呼叫C\C++檔案
阿新 • • 發佈:2019-01-01
剛剛學了NDK與JNI,肯定是用來呼叫c\c++檔案的,接下來,就給大家帶來一種很簡單的嵌入式呼叫C|C++檔案的一種方法
新建一個工程
在main資料夾下新建一個目錄jni
在jni目錄下新建一個檔案 hello-jni.c
在hello-jni.c 中編寫c程式碼
#include <jni.h> //jstring: 返回值型別 String //規則: Java_包名_類名_方法名(jvm虛擬機器的指標,呼叫者物件) jstring Java_com_lhy_jnidemo01_MainActivity_helloFromC(JNIEnv* env,jobject thiz){ return (*env)->NewStringUTF(env, "你好,我來自C程式碼 !!!"); }
在jni目錄下新建Android.mk檔案
新增如下內容::#指定編譯的資料夾 指定當前檔案目錄 LOCAL_PATH := $(call my-dir) #編譯器會定義很多的臨時變數,中間變數,最好清空所有的中間變數。 include $(CLEAR_VARS) #編譯出來模組的名稱 LOCAL_MODULE := hello-jni # 編譯的原始碼的名稱 LOCAL_SRC_FILES := hello-jni.c #編譯一個動態庫,靜態庫 #靜態庫 檔名.a 包含所有的函式並且函式執行的依賴,體積大,包含所有的API #動態庫 檔名.so 包含函式,不包含函式執行的依賴,體積小,執行的時候,去作業系統尋找需要的API include $(BUILD_SHARED_LIBRARY)
在build.gradle中配置
externalNativeBuild {
ndkBuild {
path file("src\\main\\jni\\Android.mk")
}
}
點選 Make Project(或Ctrl+F9) 即可生成.so檔案
.so檔案的路徑: app\build\intermediates\ndk-build
好了,到這你的so檔案已經生成了,這種方法很簡單,
接下來我們來呼叫c檔案裡的方法,簡單的執行一下。 1、建立NdkJniUtils類同時加入:public class NdkJniUtils { public native int add(int a,int b); }
static{
//System.loadLibrary("庫檔名稱不帶字首,字尾名");
System.loadLibrary("hello-jni");
}
2、在MainActivity中呼叫NdkJniUtils
package rise.lung.sow.dra.ndkjni_text;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
NdkJniUtils ndkJniUtils;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = findViewById(R.id.tv);
ndkJniUtils = new NdkJniUtils();
int add = ndkJniUtils.add(2, 6);
tv.setText(add+"");
}
}
好了,到這裡就完成了,執行就可以顯示出結果了。
謝謝~~~