文件加解密 public class Cryptor { public native static void crypt(String normal_path, String crypt_path); public native static void decrypt(Strin
Eclipse NDK开发流程 1.编写Java层Native方法 2.javah命令生成头文件 3.创建jni目录 4.添加本地支持Android Tools -> Add Native Support 5.实现头文件中定义的函数 6.编译生成.so动态库 7.加载动态库 Eclips
异常处理 1.保证Java代码可以运行 2.补救措施保证C代码继续运行 //JNI自己抛出的异常,在Java层可以被捕捉(需注意是Exception、Throwable或者Error),也可在C层清空 //用户通过ThrowNew抛出的异常,可以在Java层捕捉 JNIEXPORT void
JNI数组处理 传入数组 public class JniTest { public native void giveArray(int[] arr); public static void main(String[] args) { JniTest t = ne
JNI数据类型 jclass和jobject //每个native函数,都至少有两个参数(JNIEnv*, jclass或者jobject) //1)当native方法为静态方法时: //jclass 代表native方法所属类的class对象(JniTest.class) //2)当native方
JNI JNI(Java Native Interface) Java调用C/C++,C/C++调用Java的一套API 1.编写native方法 2.javah命令,生成.h头文件,生成的C/C++的函数声明名称:Java_完整类名_函数名 3.复制.h头文件到C/C++工程中 4.复制jni
include指令 #include <stdlib.h> #include <stdio.h> //预编译(预处理),为编译做准备工作,完成代码文本的替换工作 //C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
文件IO #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <stdio.h> #include <string.h> //读取文本文件 void main() { char *pa
typedef 类型取别名 //typedef 类型取别名 //1.不同名称代表在干不同的事情typedef int jint; //2.不同情况下,使用不同的别名 /* #if defined(__cplusplus) typedef _JNIEnv JNIEnv; typedef _Java
结构体定义 #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <stdio.h> #include <string.h> #include <Windows.h> //结构体是一
字符串 //使用字符数组存储字符串 void main() { //char str[] = {'c', 'h', 'i', 'n', 'a', '\0'}; //
动态分配类型 void main() { //stack overflow错误,栈溢出 //静态内存分配 int a[1024 * 1024 * 10]; //40M //栈内存 //C语言内存分配: //1.栈区(stack) //wind
指针与数组 //1.通过指针给数组赋值 void main() { int uids[5]; //高级写法 //int i = 0; //for (; i < 5; i++) { // uids[i] = i; //} //早些版本
指针类型 #include <stdio.h> #include <stdlib.h> //1.指针为什么要有类型? //指针有类型,地址没有类型 //地址只是开始的位置,类型读取到什么位置结束 void main() { int i = 100; //in
Hello World //引入头文件 //只有函数的声明,编译时会去找到函数的实现 #include <stdio.h> void main() { printf("hello world\n"); //system("mspaint&q