首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android JNI 数组操作

= 0; i i) { // 用来给整型数组填充数据的缓冲区 jint tmp[256]; // 声明一个整型数组 jintArray...[I // 代表一维整型数组,I 表示整型 [[I // 代表二维整型数组 [Ljava/lang/String; // 代表一维字符串数组, 对于字段的签名转换...Java 类型 JNI 对应的描述转换 String Ljava/lang/String; Class Ljava/lang/Class; Throwable Ljava/lang/Throwable...int[] "[I" Object[] "[Ljava/lang/Object;" 对于方法的签名转换 对于方法签名描述的转换,首先是将方法内所有参数转换成对应的字段描述,并全部写在小括号内,然后在小括号外再紧跟方法的返回值类型描述...Java 类型 JNI 对应的描述转换 String f(); ()Ljava/lang/String; long f(int i, Class c); (ILjava/lang/Class;)J String

1.4K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JNI 从入门到实践,万字爆肝详解!

    认识 JNI 1.1 为什么要使用 JNI?...这就引出第 1 个问题(为什么要这么做):Java 为什么要调用 C/C++ 代码,而不是直接用 Java 开发需求呢?...另外,为了避免对象在使用时突然被回收,在本地方法返回前,虚拟机会固定(pin)对象,阻止其 GC。 另外需要特别注意一点,基础数据类型在映射时是直接映射,而不会发生数据格式转换。...例如,一个 public String str; 字段会被拆分为字段访问标记(public)、字段简单名称(str)和字段描述符(Ljava/lang/String)。...提示: 我们这里所说的 ”置空“ 只是将指向变量的值赋值为 null,而不是回收对象,Java 对象回收是交给垃圾回收器处理的。

    2.4K21

    Android深入理解JNI(二)类型转换、方法签名和JNIEnv

    jstring Ljava/lang/String; Throwable jthrowable Ljava/lang/Throwable; Object[] jobjectArray [L+classname...gMethods数组中存储的是MediaRecorder的Native方法与JNI层方法的对应关系,其中 ”()V”和 “(Ljava/lang/Object;Ljava/lang/String;Ljava...我们先写一个简单的MediaRecorder.java包含上面的native_setup方法:参照本文第一节给出的类型转换表格,native_setup方法的第一个参数的签名为“Ljava/lang/Object...;”,后两个参数的签名为“Ljava/lang/String;”,返回值类型void 的签名为“V”,组合起来就是上面的方法签名。...3.JNIEnv JNIEnv 是一个指向全部JNI方法的指针,该指针只在创建它的线程有效,不能跨线程传递,因此,不同线程的JNIEnv是彼此独立的,JNIEnv的主要作用有两点: 1.调用Java的方法

    2.3K60

    NDK学习笔记(二)使用JNI同原生代码通信 原

    而利用一些开源的方案则可以帮助我们基于现有的原生代码接口自动生成 JNI 的代码。 学习这项技术,首先需要搞清楚下面这些关键概念: 原生代码如何被Java代码调用到。 原生方法的声明。...;//因为C中的JNI函数不清楚当前的JNI环境,所以要传入env。 而C++的写法则是: return env->NewStringUTF("Hello from JNI !")...Java string."); } else { printf("C string points to actual string."); } 数组操作 新建数组: jintArray javaArray...clazz, "staticMethod", "()Ljava/lang/String;"); 调用方法: jstring instanceMethodResult; instanceMethodResult...CallStaticStringMethod(env, clazz, staticMethodId); 关于方法和域的描述符 Java Type Signature Boolean Z Byte B Char C Short S Int I

    58430

    【Android 应用开发】Android 开发 之 JNI入门 - NDK从入门到精通

    , 中文不能被识别; 01-31 14:36:04.803: W/dalvikvm(389): JNI WARNING: illegal continuation byte 0xd0 01-31 14...是相同的, 一个Native方法不能被不同的Java线程调用; JNIEnv结构体系 : JNIEnv指针指向一个线程相关的结构,线程相关结构指向一个指针数组,指针数组中的每个元素最终指向一个JNI...Ljava/lang/String;)V", 括号中的Ljava/lang/String; 表示参数是String类型, V表示返回值是void; jni.h中定义的回调Java方法的相关函数 : .../lang/String;Ljava/lang/String;)I", (void*) android_util_Log_println_native }, }; int register_android_util_Log... --- 方法签名 : "(Ljava/lang/String;I)Z" 表示该方法的签名, 参数是String类型 和 int类型, Z 表示 boolean类型;  --- JNI方法 : (

    3.4K11

    Android NDK开发完全剖析

    例如Windows上可执行的文件是.exe,但是.exe文件是不能在Android上面运行的,我如果想编译一个库文件,让这个库文件在Android平台上被加载,那这个编译的过程就是交叉编译。...JNI中名称 Java中名称 jobject java.lang.Object jstring java.lang.String jclass java.lang.Class jthrowable java.lang.Throwable.../lang/Object;)Z"); 类型签名就是JNI和上层交互时的类型标识,不同的字符标识不同的类型。...: (ILjava/lang/String;)I 例如我们定义了一个类VideoInfo,在包名com.jeffmony.video下面,那在JNI中其对应的是Lcom/jeffmony/video/...是因为在indirectRef表中没有找到当前jobject对应的索引,导致报错了,为什么找不到这个索引,这个jobject还没有被定义为GlobalObject,这就和上面的分析对应起来了,在赋值的时候

    1.9K10

    JNI 解析以及在 Android 中的实际应用

    方法的指针,该指针只在创建它的线程有效,不能跨线程传递,就是说每个线程都有自己的JNIEnv, jclass是JNI的数据类型,对应Java的java.lang.Class实例。...jobject同样也是JNI的数据类型,对应于Java的Object,系统在调用native方法的时候会根据方法名,将Java方法和JNI方法建立关联,但是它有一些明显的缺点: JNI层的方法名称过长...jint是JNI定义的数据类型,因为Java层和C/C++的数据类型或者对象不能直接相互的引用或者使用,JNI层定义了自己的数据类型,用于衔接Java层和JNI层,至于这些数据类型我们在后面介绍。.../lang/String;I)Landroid/content/pm/PackageInfo;"); // 获得应用包的信息 jobject packageInfo = env->CallObjectMethod.../lang/String;)Ljava/security/MessageDigest;"); // MessageDigest object jobject objMessageDigest

    1.4K20
    领券