Android JNI详述
2010-07-15 20:31:00 来源:WEB开发网J jlong long
D jdouble double
F jfloat float
B jbyte byte
C jchar char
S jshort short
数组则以"[" 开始,用两个字符表示
[I jintArray int[]
[F jfloatArray float[]
[B jbyteArray byte[]
[C jcharArray char[]
[S jshortArray short[]
[D jdoubleArray double[]
[J jlongArray long[]
[Z jbooleanArray boolean[]
上面的都是基本类型。如果Java 函数的参数是class ,则以"L" 开头,以";" 结尾,中间是用"/" 隔开的包及类名。而其对应的C 函数名的参数则为jobject. 一个例外是String 类,其对应的类为jstring
Ljava/lang/String; String jstring
Ljava/net/Socket; Socket jobject
如果JAVA 函数位于一个嵌入类,则用$ 作为类名间的分隔符。
例如 "(Ljava/lang/String;Landroid/os/FileUtils$FileStatus;)Z"
Android JNI 编程实践
一、直接使用java 本身jni 接口(windows/ubuntu )
1. 在Eclipsh 中新建一个android 应用程序。两个类:一个继承于Activity ,UI 显示用。另一个包含native 方法。编译生成所有类。
jnitest.java 文件:
package com.hello.jnitest;
import android.app.Activity;
import android.os.Bundle;
public class jnitest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Nadd cal = new Nadd();
setTitle("The Native Add Result is " + String.valueOf(cal.nadd(10, 19)));
}
}
Nadd.java 文件:
package com.hello.jnitest;
public class Nadd {
static {
System.loadLibrary("Nadd");
}
public native int nadd(int a, int b);
}
以上在windows 中完成。
2. 使用javah 命令生成C/C++ 的.h 文件。注意类要包含包名,路径文件夹下要包含所有包中的类,否则会报找不到类的错误。classpath
更多精彩
赞助商链接