1、android Studio 使用jni 呼叫 C
阿新 • • 發佈:2020-08-11
一、配置相關資訊
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當中