随笔分类 -  JNI 实战

摘要:一、什么是大小端模式 大端模式(Big-Endian):指的是数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中. 小端模式(Little-Endian):指的是数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。 上述的描述准确的说明了大小端模式的数据排列方式,但是还不 阅读全文
posted @ 2020-09-02 14:17 灰色飘零 阅读(2418) 评论(1) 推荐(1) 编辑
摘要:在进行Android NDK开发的时候, 因为代码编写导致崩溃的问题时有发生,但是问题在于,Native层的崩溃日志,如果只看LogCat输出的内容,我们会发现,根本无法进行分析和处理,因为日志内容中都是一大堆的内存地址信息。 原始错误日志: 2020-08-20 18:04:01.149 2712 阅读全文
posted @ 2020-08-21 14:25 灰色飘零 阅读(2597) 评论(0) 推荐(0) 编辑
摘要:在前面我们讲了一下如何使用Java调用C,本文我们讲一下如何使用JNI提供的接口来反射得到Java方法进行调用。 主要步骤如下: FindClass (找到Java层的类) GetMethodID / GetFieldID (获取Java类中的方法 / Java类中的属性) NewObject (创 阅读全文
posted @ 2019-03-08 16:28 灰色飘零 阅读(1473) 评论(0) 推荐(0) 编辑
摘要:在JNI实战(二):Java 调用 C 我们了解了JNI的静态注册和动态注册。也知道我们应该使用动态注册来进行JNI函数与Java方法之间的映射。 示例的映射表的数组为如下: static JNINativeMethod g_methods[] = { // Java层方法、参数类型、JNI方法 { 阅读全文
posted @ 2019-03-08 10:19 灰色飘零 阅读(2455) 评论(0) 推荐(0) 编辑
摘要:1. JNI Env 和 Java VM 关系说明 JNIEnv 是 Java的本地化环境,是Java与C的交互的重要桥梁。 在Android上,一个进程对应一个JavaVM,也就是一个app对应一个JavaVM。 一个JavaVM可以有很多个线程,每一个Java线程对应一个JNI Env。 我们可 阅读全文
posted @ 2019-03-07 15:39 灰色飘零 阅读(1501) 评论(0) 推荐(0) 编辑
摘要:使用最新Android Studio的Cmake,创建一个Native C++项目后,我们就可以看到JNI的Hello World的项目及示例代码了。 JNI的项目代码,分为三层:Java层,C++层,CMake层。 其中Java层定义了调用C++的方法,C++层实现这个方法,CMake定义了如何将 阅读全文
posted @ 2019-03-07 14:18 灰色飘零 阅读(1427) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示