??既然用到了JNI幔妨,那不妨可以再踏深一步闻镶,如果有個(gè)需求是要求你去裝飾一個(gè)SO
庫,或者是封裝幾個(gè)SO
庫将鸵。那這篇文章一定要看勉盅。
跟上一章一樣,在build.gradle
添加
sourceSets{
main{
jni.srcDirs=[] //不使用gradle編譯本地c/c++代碼
jniLibs.srcDirs = ['libs','src/main/libs'] //加載so庫 lib是第三方so src/main/libs 是準(zhǔn)備生成的so庫位置
}
}
在gradle.properties
添加android.useDeprecatedNdk=true
在main
目錄下新建jni
文件夾顶掉,再在jni
文件夾新建simplejinlib
文件夾(名稱隨意)將要被調(diào)用的so
庫放入草娜,并將此SO
庫的 .h
文件放入simplejinlib
文件夾中,如若沒有則用命令生成一個(gè)痒筒,再新建Android.mk
文件宰闰,目錄結(jié)構(gòu)如下圖
Android.mk
中寫入
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := SimpleJni
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libSimpleJni.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_SHARED_LIBRARY)
隨后跟第一章過程一樣寫native
接口茬贵,用命令生成.h
文件,將.h
文件移入jni
文件移袍,并新建一個(gè)c
文件解藻,Android.mk
,Application.mk
文件葡盗,文件結(jié)構(gòu)如下
monke_jnidemo_Utils.h
文件中引用部分添加
#include "simplejinlib/com_monke_simplejnidemo_SimpleJniUtils.h"
externdemojin.c
文件中實(shí)現(xiàn)方法
#include <monke_jnidemo_Utils.h>
JNIEXPORT jint JNICALL Java_monke_jnidemo_Utils_checkDoubleData
(JNIEnv *env, jclass j, jint a){
return Java_com_monke_simplejnidemo_SimpleJniUtils_doubleData(env,j,a);
這里注意螟左,jni
文件下的Android.mk
填
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SHARED_LIBRARIES :=SimpleJni
LOCAL_MODULE := ExternJni
LOCAL_SRC_FILES := externdemojin.c
LOCAL_LDLIBS += -llog
include $(BUILD_SHARED_LIBRARY)
include $(LOCAL_PATH)/simplejinlib/Android.mk
LOCAL_SHARED_LIBRARIES
引用的庫名,如果有多個(gè)用 \ 分割觅够,最后使用Terminal 將目錄定位到main
胶背,ndk-build
打包出so
庫,這里注意打包出來的so
會包含多個(gè)喘先,自身的以及引用的
最后將
static{
System.loadLibrary("ExternJni");
}
填寫進(jìn)接口類中
測試下