栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Kotlin 和 Java 中内部类中的 static native 方法(JNI 函数)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kotlin 和 Java 中内部类中的 static native 方法(JNI 函数)

文章目录
    • Java 内部类中的 static native 方法
    • Kotlin companion object 中的静态的 native 方法

Java 内部类中的 static native 方法
package com.example.app;

public class JavaClass {
    static {
        System.loadLibrary("mylib");
    }
    static class Native {
        public static native byte[] encrypt(byte[] str);
    }
}

对应的 JNI 函数为:

JNIEXPORT jbyteArray JNICALL
Java_com_example_app_JavaClass_00024Native_encrypt(
    JNIEnv *env, jclass clazz, jbyteArray bytes) {
    // TODO: implement encrypt()
}

其中 ,Java_com_example_app_JavaClass_00024Native_encrypt 的名字解析:

  • Java_ JNI 函数前缀
  • com_example_app_JavaClass_00024Native 为内部类 com.example.app.JavaClass$Native
  • _ 是分隔符,类名 com.example.app.JavaClass$Native 和 Java 方法名 encrypt 之间的分隔符
  • encrypt 对应 Java 方法名

com_example_app_JavaClass_00024Native 中的 _00024 的意思:
_00024 由 _0 和 0024 两部分组成,
_0 表示这是一个转义字符,
0024 是Unicode字符 $,即内部类的连接符

参考: https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/design.html#wp615

转义解释
_0XXXX表示 Unicode 字符 XXXX ,
通常用小写字母表示,
例如,使用小写字母的 _0abcd,而不是 _0ABCD
Kotlin companion object 中的静态的 native 方法
package com.example.app

class KotlinClass {
    companion object {
        init {
            System.loadLibrary("mylib");
        }

        external fun encrypt(bytes: ByteArray): ByteArray?
    }
}

对应的 JNI 函数:

JNIEXPORT jbyteArray JNICALL
Java_com_example_app_KotlinClass_00024Companion_encrypt(
    JNIEnv *env, jobject thiz, jbyteArray bytes) {
    // TODO: implement encrypt()
}

其中, 对 Java_com_example_app_KotlinClass_00024Companion_encrypt 的解析:

  • Java_ JNI 函数前缀
  • com_example_app_KotlinClass_00024Companion 为内部类 com.example.app.KotlinClass$Companion
  • _ 是分隔符,类名 com.example.app.KotlinClass$Companion 和 Kotlin 方法名 encrypt 之间的分隔符
  • encrypt 对应 Kotlin 方法名

Java 中的 static 变量,static Java 方法,在 Kotlin 中,放到 companion object { } 中。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/842697.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号