添加ndk
establish adroid proj
new class && create native method
add android tool support
cpp:
create header : ../class : javah -classname
copy header to jni ;
copy method'declaration ->cpp
粘贴网上的代码。
static{
load ;
}
invocation the code .
jni中可以随意使用c/c++中的header、方法;并且可以随意写方法并调用。
jni中调用Java的方法。
Method 'NewStringUTF' could not be resolved
c/cpp文件可以相互转换使用:
项目右键->属性->c/c++常规->Code Analysis,选择"Use project settings" 中的方法无法被解析(Methodcannot be resolved)取消选择,应用->确定,
jni:
在jni中完全可以定义c类型,并使用。
不能定义Java类型,但是可以转化为c类型。
原始类型:
jint= int / jint=10;
引用类型:
String类型
jclass =class / (*env)->FindClass(env,"java/lang/String");
jstring=string / jstring=(*env)->NewStringUTF(env,"~~~~~~~~");
方法调用:
jmethodID mid = (*env)->GetMethodID(env,clsstring, "getBytes", "(Ljava/lang/String;)[B");
类、类中的方法、方法的签名。
jbyteArray barr= (jbyteArray)(*env)->CallObjectMethod(env,jstr,mid,strencode); //String .getByte("GB2312"); 要用jbyteArray 接收byte[]
将一个数组对象int[] arry 先转换为jarray,再转为int * (并且 jint*和int*是一致的,正如jint和int)
int* arrp = (*env)->GetIntArrayElements(env,arr, 0);
jint* arrp =(*env)->GetIntArrayElements(env, ja, 0);