摘要:JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互。 问:为什么要进行交互? |- 首先,Java语言提供的类库无法满足要求,且在数学运算,实时渲染的游戏上,音视频处理等方面上与C/C++相比效率稍低。
阅读全文
摘要:java和C++之间的调用其实和C差不多,只是有几点不一样 区别: 包名.类名.h 这个头文件必须有且必须在JNI目录里 后缀不需要修改
阅读全文
摘要:C代码调用Java代码应用场景 复用已经存在的java代码 c语言需要给java一些通知 c代码不方便实现的逻辑(界面) 反射 //1.加载类字节码 Class clazz = Demo.class.getClassLoader().loadClass("com.example.Dialog");
阅读全文
摘要:在实际开发中,有时候时间短,任务量大,可以查看类似的apk,将行apk反编译,通过看源码分析,用里面的JNI代码! 本案例中用了美图秀秀的JNI.java和jni.so链接库 项目中调用别人写的c代码: 1.得到so和开发文档; 2.把so文件放到libs/armeabi/目录下; 3.根据开发文档
阅读全文
摘要:传递数组 数组是个对象,传递对象就是传递地址,修改地址上的值,数组的内容就会改变 //获取数组首地址 int* p = (*env)->GetIntArrayElements(env, array, 0); //获取数组长度 int length = (*env)->GetArrayLength(e
阅读全文
摘要:1. java.lang.UnsatisfiedLinkError: Couldn't load hello: **findLibrary returned null** 解决方案: * 如果处理器平台不匹配,返回的lib就是空 在Application.mk文件中编写APP_ABI := all
阅读全文
摘要:使用C函数实现Java本地方法: 1. 在java代码里面声明一个native的方法 public native String helloFromC(); 2. 在工程目录下面创建一个jni的文件夹 3. 在jni文件夹里面编写c代码,实现java的本地方法 //JNIEnv* envJNI本地接口
阅读全文
摘要:* docs : 开发文档* build: linux下编译的批处理命令* platform : 某种平台下编译需要的头文件和函数库* prebuild : 预编译的工具* sample: 实例代码* sources : 一些工具链的源码* toolschains: 工具链* ndk-build.c
阅读全文
摘要:01 交叉编译 在一个平台上编译出来另外一个平台可以运行的二进制代码 不同的操作系统:windows, mac os,linux,unix 不同的处理器平台:x86,arm,MIPS 02 交叉编译的原理 源代码 >编译 >链接 >可执行性程序 原理:模拟另外一种平台的特性去进行编译 03 交叉编译
阅读全文
摘要:http://www.androiddevtools.cn/ 下载NDK, 最新版本. 解压压缩包,如解压后文件夹名为如android-ndk-r13,放在指定的位置 配置环境变量: 系统环境path : D:\develop\Android\eclipse\android-ndk-r9;
阅读全文
摘要:* Java Native Interface (Java本地接口) * 完成两种语言之间的沟通和交流 * 让Java可以和C之间相互调用 * JNI 是一个协议,这个协议用来沟通java代码和外部的本地代码(c/c++).通过这个协议,java代码就可以调用外部的c/c++代码外部的c/c++代码
阅读全文