1.新建java类,创建native方法
public class JniTest {
public static native String get();
public static native void set(String str);
}
2.生成class文件
javac JniTest.java
3.生成.h文件
F:\ProjectCode\TestJNI\app\src\main\java>javah -d ..\jni com.xsy.testjni.JniTest
4.创建c文件
#include "com_xsy_testjni_JniTest.h"
#include<stdio.h>
JNIEXPORT jstring JNICALL Java_com_xsy_testjni_JniTest_get(JNIEnv *env, jobject thisz)
{
printf("invoke get from C\n");
return (*env)->NewStringUTF(env,"hello from JNI !");
}
JNIEXPORT void JNICALL Java_com_xsy_testjni_JniTest_set(JNIEnv *env, jobject thisz, jstring string)
{
printf("invoke set from C\n");
char* str=(char*)(*env)->GetStringUTFChars(env,string,NULL);
printf("%s\n",str);
(*env)->ReleaseStringUTFChars(env,string,str);
}
5.创建Android.mk、Application.mk
5.1Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jni-test
LOCAL_SRC_FILES := test.c
include $(BUILD_SHARED_LIBRARY)
APP_ABI := all
6.生成.so库
Name:自己定义
Program:D:\AndroidSDK\ndk-bundle\build\ndk-build.cmd
Working directory:$ProjectFileDir$\app\src\main
7.在app的build.gradle里面
android {
ndk {
moduleName "jni-test"
}
}
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs 'src/main/jni'
jni.srcDirs =[] // disable automatic ndk-build
}
8.调用so库
static {
System.loadLibrary("jni-test");
}
tv.setText(JniTest.get());