摘要:背景需求 我们需要在JNI的C代码调用Java代码。实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用。 JNI关键方法讲解。 1. 在同一个类中,调用其他方法 注意: 看红色的内容,如何获得呢? 这个是函数的签名。函数签名借住命令 javap -p -s(这两个参数一定要加入)来获 阅读全文
posted @ 2019-03-27 11:09 星辰之力 阅读(332) 评论(0) 推荐(0) 编辑
摘要:概述 可能大家觉得javah生成的函数名又臭又长,不太好看。这里可以提供另外一种方法来动态注册c++函数,让其根Java中的native方法关联起来。 实现 这里通过JNIEnv的Resisternatives方法完成方法的注册。相关方法介绍: 看了上面的函数,我们可以知道在loadLibrary的 阅读全文
posted @ 2019-03-27 11:02 星辰之力 阅读(183) 评论(0) 推荐(0) 编辑
摘要:前面记录了调用C的学习笔记,现在来记录一下C反射调用Java的笔记。JNI开发学习之调用C方法 Android开发中调用一个类中没有公开的方法,可以进行反射调用,而JNI开发中C调用java的方法也是反射调用。 C代码回调Java方法步骤:①获取字节码对象(jclass (FindClass)(JN 阅读全文
posted @ 2019-03-27 10:58 星辰之力 阅读(226) 评论(0) 推荐(0) 编辑
摘要:JNI/NDK Java调用C/C++前言 通过第三篇文章讲解在实际的开发过程中Java层调用C/C++层的处理流程。其实我们在很大的业务里也需要C/C+ +层去调用Java层,这两层之间的相互调用显得如此的重要,正式两层之间的相互调用使得程序更具有高效性、安全性可言。下面主要讲解一下C/C+ +层 阅读全文
posted @ 2019-03-27 10:43 星辰之力 阅读(1458) 评论(0) 推荐(0) 编辑
摘要:此文章是关于NDK线程的第二篇理论知识笔记。主要有两个点,如下: 1.pthread_create(Too many arguements, expected 1) ?2.线程中如何获取JNIEnv?GetEnv返回NULL?3.FindClass返回NULL ?首先我们在主页MainActivit 阅读全文
posted @ 2019-03-27 10:32 星辰之力 阅读(1516) 评论(2) 推荐(0) 编辑
摘要:除了前面说的自定义JNI函数之外,JNI还提供了两个特殊函数,它们是JNI_OnLoad()和JNI_OnUnload(),分别在加载库和卸载库的时候调用。 1、JNI_OnLoad() Java调用System.loadLibrary()加载一个库的时候,会首先在库中搜索JNI_OnLoad()函 阅读全文
posted @ 2019-03-27 10:24 星辰之力 阅读(1334) 评论(1) 推荐(1) 编辑
摘要:从C/C++层调用JAVA层代码步骤: 1. 在JAVA类中创建java方法和本地方法 2.在JNI文件夹下创建类对应的.h文件(可通过JAVAH命令生成该类的.h文件,就不赘述了),创建.cpp文件(用于编写C/C++层的代码) .h文件: .cpp文件 3.调用JAVA方法需要类的对象 在C/C 阅读全文
posted @ 2019-03-27 10:22 星辰之力 阅读(2174) 评论(0) 推荐(0) 编辑
摘要:利用Android NDK编译动态库,在C文件中调用了两个JNI函数:JNI_GetDefaultJavaVMInitArgs和JNI_CreateJavaVM。编译的时候始终报以下错误: 看了网上很多人的解答,基本都是添加libjvm.so或者libnativehelper库。尝试下,没有一个靠普 阅读全文
posted @ 2019-03-27 10:11 星辰之力 阅读(349) 评论(0) 推荐(0) 编辑
摘要:在Android的世界中,由名称为app_process的C++本地应用程序(路径为:framework/base/cmds/app_process/app_main.cpp)调用JNI Invocation API 在自身进程中加载dalvikvm虚拟机,这样就开创了java世界. 现在就简单的D 阅读全文
posted @ 2019-03-27 10:08 星辰之力 阅读(225) 评论(0) 推荐(0) 编辑
摘要:近期通过研究SDL源码 得出android JNI c/c++调用java 无需新建虚拟机: 具体步骤如下 第一步获得:两个参数 JNIEnv和jclass 第二步 获得java那边定义的函数的名字 第三步 传递参数调用java 函数 阅读全文
posted @ 2019-03-27 09:59 星辰之力 阅读(88) 评论(0) 推荐(0) 编辑
摘要:cmake提供了很多实用的cmake-modules,通过find_package()命令调用这些modules,用于写CMakeLists.txt脚本时方便的查找依赖的库或其他编译相关的信息,善用这些modules,可以提高写脚本的效率和脚本通用性。 说起来真的有点太抽象,举个我最近遇到的简单例子 阅读全文
posted @ 2019-03-27 09:51 星辰之力 阅读(147) 评论(0) 推荐(0) 编辑
摘要:我需要从C ++运行Java,一般来说问题已经解决,但我的make系统或脚本出了问题,有一个创建JVM的C ++文件: 有一个CMakeLists.txt文件: 运行它: 得到这个错误: 回答: 在CMakeLists.txt文件中,添加 而不是手动选择目录也可以依赖CMake: 阅读全文
posted @ 2019-03-27 09:44 星辰之力 阅读(308) 评论(0) 推荐(0) 编辑
摘要:[Linker error] undefined reference to `_imp__JNI_CreateJavaVM@12' 阅读全文
posted @ 2019-03-27 09:41 星辰之力 阅读(144) 评论(0) 推荐(0) 编辑