Android NDK入门、提高和实战
2010-08-21 06:22:00 来源:WEB开发网1.6到2.01提供了openGL ES 1.x的API,2.1提供了openGL ES 2.0的API,2.2提供了graphics的处理接口。使用方法同log。
实例:
给出两个点的坐标,求它们的距离。
首先,创建一个Point对象,
Java代码
public class Point {
float x;
float y;
}
public class Point {
float x;
float y;
}
然后在c文件中定义一个函数
C代码
jfloat Java_chroya_demo_ndk_Main_distance(JNIEnv* env, jobject thiz, jobject a,jobject b){}
jfloat Java_chroya_demo_ndk_Main_distance(JNIEnv* env, jobject thiz, jobject a,jobject b){}
返回值是float,在jni中定义的是jfloat。
函数名规则: Java开头,接着是包名的每一段,然后是类名,最后是Java中调用的方法名,中间都用下划线隔开。第一个参数JNIEnv* env和第二个参数jobject thiz都是必须的,后面的才是Java中传递进来的参数。这里是两个Point对象。
首先确定要做的步骤:
1.找到这个Point类
2.找到类中的域x和y的域id
3.根据ID取出x和y的值
4.计算结果并返回
那么代码如下:
Java代码
#include
#include
#include
jfloat Java_chroya_demo_ndk_Main_distance(JNIEnv* env, jobject thiz, jobject a,jobject b)
{
//步骤1
jclass point_class = (*env)->FindClass(env, "chroya/demo/ndk/Point");
if(point_class == NULL) {
//printf("class not found");
__android_log_write(ANDROID_LOG_INFO, "MyNdkDemo", "class Point not found");
return 0;
} else {
__android_log_write(ANDROID_LOG_INFO, "MyNdkDemo", "found class Point");
}
//步骤2
jfieldID field_x = (*env)->GetFieldID(env, point_class, "x", "F");
jfieldID field_y = (*env)->GetFieldID(env, point_class, "y", "F");
更多精彩
赞助商链接