由于静态注册要用javah生成头谁的,所以一般采用动态注册
代码如下
#include <jni.h>
#ifndef HELL_JNI
#define HELL_JNI
static const char *className = "com/braver/jni/dy/HelloJni";
#ifdef __cplusplus
extern "C" {
JNIEXPORT jstring JNICALL hello(JNIEnv *, jobject);
#endif
#ifdef __cplusplus
}/*extern "C" {*/
#endif
#endif
#include "Hello_JNI.h"
//绑定函数指针
static JNINativeMethod gMethods[] = {
{"hello","()Ljava/lang/String;" , (void *)hello}
};
JNIEXPORT jstring JNICALL hello(JNIEnv *env, jobject object)
{
return (*env).NewStringUTF("hello");
}
//当在java层调System.loadLibrary("DyJNI");时会调用
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
{
JNIEnv *env;
//得到env
if(vm->GetEnv((void**)&env , JNI_VERSION_1_4) != JNI_OK)
{
return JNI_ERR;
}
jclass claz;
claz = env->FindClass(className);//查找类
env->RegisterNatives(claz,gMethods,sizeof(gMethods) /sizeof(gMethods[0])); //注册
return JNI_VERSION_1_4;
}
/**
* @(#) HelloJni.java Created on 2012-10-10
*
* Copyright (c) 2012 Aspire. All Rights Reserved
*/
package com.braver.jni.dy;
/**
* The class <code>HelloJni</code>
*
* @author ouyangfeng
* @version 1.0
*/
public class HelloJni {
static{
String path = System.getProperty("user.dir");
System.setProperty("java.library.path", path);
System.loadLibrary("DyJNI");
}
public native String hello();
}
/**
* @(#) MainTest.java Created on 2012-10-10
*
* Copyright (c) 2012 Aspire. All Rights Reserved
*/
package com.braver.jni.test;
import com.braver.jni.dy.HelloJni;
/**
* The class <code>MainTest</code>
*
* @author ouyangfeng
* @version 1.0
*/
public class MainTest {
/**
* @param args
*/
public static void main(String[] args) {
final String str = new HelloJni().hello();
System.out.println(str);
}
}
分享到:
相关推荐
android jni方法动态注册。。。C++的
JNI动态注册 。
JNI静态函数注册,根据Java+packname+method来实现的,名称...当JAVA层通过System.loadLibrary加载完JNI动态库后,紧接着会查找该库中一个叫JNI_OnLoad 的函数。如果有,就调用它,而动态注册的工作就是在这里完成的。
本代码主要是一个RegisterNatives的运用,让你对jni有一个新的认识
1、JNI动态注册实例。 2、运行环境是Android studio。 3、动态注册是在JNi层实现的,JAVA层不需要关心,因为在system.load时就会去调用JNI_OnLoad,有就注册,没有就不注册。动态注册的原理:JNI 允许我们提供一个...
Android中jni动态注册的方式,给出成组c和java文件,方便扩展。利于大家粘贴。请配合博客结合使用。如果有问题,直接在博文里留言。谢谢~!
使用动态注册的方法写一个最简单的hello-jni程序
这是一个演示JNI中动态注册和静态注册的实例demo,主要为了配合博客使用。有一定的参考意义。希望对于新学者有帮助,那我就很高兴了。
这是一个jni通过JNI_OnLoad函数动态注册的例子。
JNI静态注册与动态注册实例代码详细介绍。JNI静态注册与动态注册实例代码详细介绍。JNI静态注册与动态注册实例代码详细介绍。JNI静态注册与动态注册实例代码详细介绍。JNI静态注册与动态注册实例代码详细介绍。JNI...
JNI 函数动态注册 JNIDynamicLoad
【Android NDK 开发】JNI 动态注册 ( 动态注册流程 | JNI_OnLoad 方法 | JNINativeMethod 结构体 | GetEnv | RegisterNatives ) 博客地址 : https://hanshuliang.blog.csdn.net/article/details/104222271 I ....
android jni 静态注册 动态注册 一些基本的操作 静态注册Eclipse 动态注册android studio
这是Android中JNI开发中动态注册多个类的native方法,以及分模块化管理不同native的代码.
Android Studio JNI 的静动态注册开发以及CC++ JNIEnv的理解
jni入门一篇就够,含盖 jni中动态注册,静态注册;引用第三方so库,
JNI不仅仅在NDK开发中应用,它更是Android系统中Java与Native交互的桥梁, 学习JNI 动态注册
1、JNI文件读写操作2、JNI数据类型转换处理3、JNI文件内容加解密处理4、JNI动态注册、动态调试5、反编译SO文件、SO安全加固策略适合人群:1、有一定Android基础,零JNI基础的学员;2、接触过JNI,但却不甚了解的学员...
JNI入门Demo3.0,用于演示JNI中是如何动态注册Native函数。