小馬佩德罗
业精于勤荒于嬉,行成于思毁于随
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Android系统的JNI原理分析 - CallNonvirtualXXXMethod和CallXXXMethod的区别
是JNI中调用Java方法的标准方式,遵循Java的多态规则。:是一种特殊的调用方式,用于显式调用指定类中的方法,常用于需要精确控制方法调用行为的场景。原创 2025-05-20 11:06:20 · 49 阅读 · 0 评论 -
Android系统的JNI原理分析(1)- JNI的静态注册和动态注册
当在Java中调用init_native方法时,Java虚拟机就会去JNI中寻找Java_com_example_myapplication_MediaRecorder_native_1init函数,如果没找到会报错,如果找到了就会为这两者建立关联(通过保存JNI的函数指针,这样在下次调用native_init方法时直接使用这个函数指针即可)进入到源码路径:vim ~/LineageOS/frameworks/base/media/jni/android_media_MediaRecorder.cpp。原创 2020-01-08 15:46:27 · 10141 阅读 · 0 评论 -
Android系统的JNI原理分析(2)- 数据类型转换和方法签名
以~/LineageOS/frameworks/base/media/java/android/media/,重载的方法名字相同而参数不同,所以JNI仅通过方法名无法确定对应的是重载的哪个方法,必须要参数签名来辅助其关联。进入到源码路径: vim ~/LineageOS/frameworks/base/media/jni/对应在~/LineageOS/frameworks/base/media/jni/android_简单地说,存在签名的原因就是。避免博客拖太长,后续参见下篇。原创 2020-01-08 15:48:37 · 9097 阅读 · 0 评论 -
Android系统的JNI原理分析(3)- 关于JNIEnv
JNIEnv结构体中定义的函数返回值有多种,包括:jobject、jboolean、jstring、jmethodID、jfieldID等,其中jmethodID、jfieldID分别用以代表Java中的成员方法和成员变量。} }其中jclass代表Java类、name代表成员方法或成员变量的名字、sig为此方法和变量的签名。进入到源码路径:~/LineageOS/frameworks/base/media/jni/原创 2021-01-06 10:50:03 · 9583 阅读 · 0 评论 -
Android系统的JNI原理分析(4)- JNI的jni.h头文件
声明前阶段在项目中使用了Android的JNI技术,在此文中做些技术知识总结。此篇参考一些博客和书籍,不方便逐一列出,仅供学习、知识分享,代码基于Android 7.1.1。本章Demo下载:Demo链接1 JNI的原头文件jni.h 查看Android的JNI接口集合可以在jni.h文件中看到,此头文件对C风格和C++风格做了区分,在各个JNI函数的参数上会差一个env参数,等下后面章节举例说明,先看下jni.h文件中声明的JNI接口函数(虽然把jni.h代码单独贴在篇博客里有充水嫌疑原创 2021-01-15 10:58:26 · 4737 阅读 · 0 评论 -
Android系统的JNI原理分析(5)- JNI函数解析
既然JNI是Java虚拟机提供的Java世界和C/C++世界的桥梁,那么,其应该可以实现两个世界之间代码的相互调用。所谓自由调用指的是Java层正向调用C/C++层的代码 和 C/C++层调用Java层的代码。正常情况,一般连一些Android应用开发者开始都认为既然手机是受用户控制的,只有在用户触碰手机屏幕时手机的底层才会根据用户的触控去执行相应的动作。所以,既然Java层比C/C++层更靠近用户,所以JNI的存在意义应该是让Java层主动调用C/C++层的代码,并给予Java层返回值。原创 2021-01-06 20:57:01 · 9519 阅读 · 1 评论 -
Android系统的JNI原理分析(6)- Android中JNI的存在方式
APK中使用JNI 的核心是其中有 Java 类声明了本地的方法,并且加载了包含JNI本地库得到这些方法。关于Framework层中使用JNI,如果是从本专栏前面开始读过来的,就知道之前对MediaRecorder的分析就属于Framework层中使用JNI,这里就不做赘述了,可以参考前面几篇文章的分析。在应用程序包中使用的JNI,是作为一种补充的实现方式,它让位于 Android 应用层的APP能直接使用包含本地的内容,并随着 APK 一起发布,此时JNI 的库是作为应用程序包的一部分。原创 2023-05-23 09:15:49 · 480 阅读 · 0 评论 -
Android系统的JNI原理分析(7)- Android中JNI的高级用法
JNI的基本功能是让 Java 调用Native代码。Native 和 Java 层的双向调用线程处理特殊的文件描述符处理异常处理。原创 2023-05-23 22:00:00 · 522 阅读 · 0 评论 -
Android JNI系列:【1】使用Eclipse一键调用javah生成JNI的.h文件(Eclipse的配置设置)
可以看到,.class文件的搜索目录是当前工作目录和子目录classes(android开发时生成的.class是在classes这个子目录中,所以这里也加了这个目录,如果你不搞android开发,那不加这个目录也没关系)。在初次使用Eclipse生成.java中的Native代码对应的JNI代码.h文件时,需在Eclipse的External Tools Configurations中进行Javah工具的配置。的时候,eclipse就会执行javah,并且使用预设的arguments,原创 2018-05-16 10:31:04 · 588 阅读 · 1 评论 -
Android JNI系列:【2】使用Eclipse编写JNI(C++)代码,并生成JNI代码动态库(*.so),同时调用第三方动态库(#.so)中接口的工程范例
在lib目录下添加include目录(${project_loc}/jni/lib/include);非系统厂商开发APP时就不用将他们必须的一些C/C++代码添加的系统目录的/system/lib 或/system/lib64下了。7)在工程中选中jni目录,使用ndk-build工具,即可编译出jni代码动态库${project_loc}/libs/arm64-v8a/JNI沟通了Java与C/C++的世界,JNI的实现最终靠的是Java虚拟机,在Android里的Java虚拟机就是。原创 2018-07-13 14:30:17 · 629 阅读 · 1 评论