1. 程式人生 > 實用技巧 >1、android Studio 使用jni 呼叫 C

1、android Studio 使用jni 呼叫 C

一、配置相關資訊

1、配置gradle.properties檔案
//在檔案中新增
android.useDeprecatedNdk=true

2、配置專案當中的build.gradle
(1)、在defaultConfig 中新增
ndk{
    abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
(2)、在android 中新增
externalNativeBuild {
    ndkBuild {
        path "src/main/jni/Android.mk"
    }
}

3、 建立Android.mk檔案

//在src\main\jni       這個路徑要和上面配置ndkBuild 中的path想同
//建立Android.mk檔案 新增資訊  可以檢視Android.mk語法檢視每句話是什麼意思

LOCAL_PATH := $(call my-dir)  

include $(CLEAR_VARS)

#LOCAL_ARM_MODE := $(_ARM_MODE)

LOCAL_MODULE:= jniSmaple   //這個是so庫名字  


LOCAL_CFLAGS :=

LOCAL_SRC_FILES:=  com_demo_jnitest_JniC.c


LOCAL_LDLIBS += -llog

#include $(BUILD_STATIC_LIBRARY)
include $(BUILD_SHARED_LIBRARY)
4、建立Java類
//在java目錄下建立一個新類
package com.demo.jnitest;

public class JniC {
    static {
        System.loadLibrary("jniSmaple");//載入so庫  名字需要和android.mk檔案中的 LOCAL_MODULE相同
    }
    //宣告native方法
    public static native String getString(); 

    public static native void jni_test();
}

5、生成h檔案
(1)、可以手動建立,需要了解 在jni目錄下方建立.c檔案

#include <jni.h>
#include <android/log.h>

int loglevel =ANDROID_LOG_DEBUG;

JNIEXPORT jstring JNICALL
Java_com_demo_jnitest_JniC_getString(JNIEnv *env, jclass jclass1){
    return (*env) -> NewStringUTF(env,"Hello jni");
}

JNIEXPORT void JNICALL
Java_com_demo_jnitest_JniC_jni_1test(JNIEnv *env, jclass jclass1){
    __android_log_print(loglevel,"native_jni","test");
}

(2)、命令列生成程式碼
命令列cd到當前工程目錄下java資料夾
輸入命令   javah -jni 包名.類名
按照上面的類  就是  javah -jni com.demo.jnitest.JniC
輸入之後會生成一個.h檔案  把裡面的方法複製出來 然後建立.c檔案  複製到.c當中