JNI開(kāi)發(fā)(二) 在JNI開(kāi)發(fā)中調(diào)用第三方so庫(kù)

??既然用到了JNI,那不妨可以再踏深一步,如果有個(gè)需求是要求你去裝飾一個(gè)SO庫(kù),或者是封裝幾個(gè)SO庫(kù)。那這篇文章一定要看。

跟上一章一樣,在build.gradle添加

sourceSets{
        main{
            jni.srcDirs=[]     //不使用gradle編譯本地c/c++代碼
            jniLibs.srcDirs = ['libs','src/main/libs']    //加載so庫(kù) lib是第三方so   src/main/libs 是準(zhǔn)備生成的so庫(kù)位置
        }
    }

gradle.properties添加android.useDeprecatedNdk=true

main目錄下新建jni文件夾,再在jni文件夾新建simplejinlib文件夾(名稱隨意)將要被調(diào)用的so庫(kù)放入,并將此SO庫(kù)的 .h 文件放入simplejinlib文件夾中,如若沒(méi)有則用命令生成一個(gè),再新建Android.mk文件,目錄結(jié)構(gòu)如下圖

Android.mk中寫(xiě)入

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)

隨后跟第一章過(guò)程一樣寫(xiě)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引用的庫(kù)名,如果有多個(gè)用 \ 分割,最后使用Terminal 將目錄定位到main,ndk-build打包出so庫(kù),這里注意打包出來(lái)的so會(huì)包含多個(gè),自身的以及引用的

最后將

static{
        System.loadLibrary("ExternJni");
    }

填寫(xiě)進(jìn)接口類中



測(cè)試下


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容