JNI动态注册 2

Android2023年6月29日 am8:08发布1年前 (2023)更新 3XCN.COM站长
0 0 0
广告也精彩
目录

前言

接上文《JNI动态注册》,介绍了简单的动态注册,这篇是整理一下动态注册的主要修改点。

PS : 个人流水账,不一定适合所有人,可以跳过,谢谢

正文

依旧注册Hello.java类

package com.biumall.dynamic.one;
public class Hello {
    // 1. load Hello.so
    static {
        System.loadLibrary("Hello");
    }
    // 2. define native sayHello()
    public static native void fromJavaHello(String message);
    public static native String fromJniHello();
}

跟之前不一的是多了一个方法,新增了从java传入一个String给JNI

通过之前签名获取方式一,可以得到

public static native void fromJavaHello(java.lang.String);
    Signature: (Ljava/lang/String;)V
    
public static native java.lang.String fromJniHello();
    Signature: ()Ljava/lang/String;

之前说过JNI动态注册的优点

灵活性高, 更改类名,包名或方法名时, 只需对更改模块进行少量修改, 效率高

我们新增了一个方法或改了方法名,也就是只需要修改对应类名,包名和方法名即可。

在上一个动态注册代码基础上修改

修改包名类名

//定义Hello.java类路径[包名+类名,只不过.换成了/]
//com.biumall.dynamic.one.Hello
#define DYNAMIC_CLASS "com/biumall/dynamic/one/Hello"

由于在之前基础上改,包名和类名都没变。

这里我们可以保持一致

修改方法名

由于方法名变或新增了了

public static native void fromJavaHello(String message);
public static native String fromJniHello();

因此我们需要创建对应的native方法(命名不一定要跟我一样,native_+java方法名,只是方便阅读,看个人风格)

JNIEXPORT void JNICALL native_fromJavaHello(JNIEnv *env, jclass jc, jstring js){
    //Java String转char *str
    const char *str = (*env)->GetStringUTFChars(env, js, 0);
    LOGE("native_fromJavaHello : %s ", str);
    (*env)->ReleaseStringUTFChars(env, js, str);
}

JNIEXPORT jstring JNICALL native_fromJniHello(JNIEnv *env, jclass jc){
    return (*env)->NewStringUTF(env, "Hello from JNI!");
}

新增了方法,因此需要让java和c方法对应起来。也就需要修改method_table即可。

//定义Java和JNI函数的绑定表
// 方法数组,分别为:(方法名[java层定义的],方法签名,函数指针[c层对应替换的方法])
// 可以通过javac和javap 获取 方法签名
JNINativeMethod method_table[]= {
        {"fromJavaHello", "(Ljava/lang/String;)V", (void*) native_fromJavaHello},
        {"fromJniHello", "()Ljava/lang/String;", (void*) native_fromJniHello},
};

其他的不用变。

然后ndk-build和运行起来了。

相对于静态注册,动态注册是非常方便的。只需要修改的包名,类名和方法即可!

参考文章

  1. JNI动态注册

 历史上的今天

版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站文章: 部分来源于网络,仅供站长学习和参考,若侵权请留言
广告也精彩

相关文章

广告也精彩

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

暂无评论...

网站升级中

公告

近期网站升级中,可能存在一些bug。欢迎反馈 https://www.91es.com/we.html

本站域名

本站域名 : 91es.com3xcn.com。本站邮箱 : 站长邮箱 i@oorr.cn,通知邮箱we@oorr.cn ,如有更新,请看公告 。