android ndk jni的写法之一

最近为了游戏开发,必须满足包小功能多,效果还得漂亮,翻遍了引擎列表,还是遇到一堆问题,要么就是最后打出来的包太大,例如unity, project anarchy(这一个vc2010express都打不开……何况还必须在windows下开发),要么就是opengl绘制有问题,例如(gameplay, irrlicht前几年的port),算了,还是记录一下jni的写法之一吧:

jni有一个方法叫做JNI_onLoad(JNIEnv *env, jobject reserved),这个玩意可以动态注册函数,所以无须再写啥 JNIEXPORT void XXXX之类的,记录如下:

	
static const JNINativeMethod methods_table[] = {
	{"c", "(Ljava/lang/String;)V", (void*)onCreate}, 
	{"p", "()V", (void*)onPause},
	{"r", "()V", (void*)onResume},
	{"d", "()V", (void*)onDestroy},
	{"a", "(Ljava/lang/String;)V", (void*)adaptDataDir},
	{"df", "()V", (void*)onDrawFrame},
	{"sc", "(II)V", (void*)onSurfaceChanged},
	{"sc", "()V", (void*)onSurfaceCreated},
	{"t", "(IFF)V", (void*)onTouchEvent},
};
jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
	JNIEnv* env = NULL;
	jint result = -1;
		
	if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
		return result;
	}

	env->RegisterNatives(env->FindClass("com.test.app.App"), methods_table, NELEM(methods_table));
	
	return JNI_VERSION_1_4;
}

这样最好了,在com.test.app.App类中写上:

    public static native void c(String s);
    public static native void p();
    public static native void r();
    public static native void d();

    public static native void sc();
    public static native void sc(int w, int h);

    public static native void t(int a, float x, float y);
    public static native void a(String p);

    public static native void df();
直接对应上了,当然,在初始化的时候不要忘记了System.loadLibrary("mylib")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值