//专门调用jni C++接口的类
public class BridgeUtils {
private static BridgeUtils instance = null;
//设置一个单例
public static BridgeUtils getInstance() {
if (instance == null) {
instance = new BridgeUtils();
}
return instance;
}
//提供一个调用JNI接口的成员方法
public native void hello_jni();
public native String hello_jni_string();
//加载cpp给提供的 动态库
static {
System.loadLibrary("FunUtils"); //libtestjni.so
}
}
com_ldw_jnitest_JniDataUtil.h
/ DO NOT EDIT THIS FILE - it is machine generated /
#include <jni.h>
/ Header for class com_ldw_jnitest_JniDataUtil /
#ifndef _Included_com_ldw_jnitest_JniDataUtil
#define _Included_com_ldw_jnitest_JniDataUtil
#ifdef __cplusplus
extern "C" {
#endif
/*
Class: com_ldw_jnitest_JniDataUtil
Method: get
*/
JNIEXPORT jstring JNICALL Java_com_ldw_jnitest_JniDataUtil_get
(JNIEnv *, jclass);
/*
Class: com_ldw_jnitest_JniDataUtil
Method: test_jni
*/
JNIEXPORT jint JNICALL Java_com_ldw_jnitest_JniDataUtil_test_1jni
(JNIEnv *, jobject, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
test.cpp
#include<jni.h>
#include <android/log.h>
//导入我们创建的头文件
#include "com_ldw_jnitest_JniDataUtil.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
Class: com_ldw_jnitest_JniDataUtil
Method: get
*/
JNIEXPORT jstring JNICALL Java_com_ldw_jnitest_JniDataUtil_get
(JNIEnv * env, jclass obj)
{
return env->NewStringUTF("This is my NDK Application");
}
JNIEXPORT jint JNICALL Java_com_ldw_jnitest_JniDataUtil_test_1jni
(JNIEnv * env, jobject obj, jint jni_a, jint jni_b)
{
int a = (int) jni_a;
int b = (int) jni_b;
__android_log_print(ANDROID_LOG_ERROR,"jni_show", "JNI:a = d%, b = d%", a, b);
int c = 20;
return (jint)c;
}
#ifdef __cplusplus
}
#endif
调用JNI方法的java文件MainActivity.java
针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!
领取获取往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。
标签: