本篇文章由:http://www.sollyu.com/use-macro-definitions-to-reduce-tedious-jni/
说明
相信写过cocos2d-x的朋友,或者写过jni的朋友,一定会对jni中的函数命名方式感到很头疼,每次定义一个native
函数时问要写个函数名半天,还有就是在更换包名
的时候,更是麻烦。
今天这里就给大家说一个比较简单的方法,使用宏定义
来简化jni函数名,具体方法如下
宏定义
/* 定义Jni的包名 */
#define PACKAGE_NAME_FUNCTION com_sollyu_game_AntiCrack /* 定义宏定义中用到的临时宏 */
#define JNI_FUNCTION_TEMP_2(CLASS, FUNC) Java_##CLASS##_##FUNC
#define JNI_FUNCTION_TEMP_1(CLASS, FUNC) JNI_FUNCTION_TEMP_2(CLASS, FUNC)
/* 真正用到的宏定义 */
#define JNI_FUNCTION(FUNCTION_NAME) JNI_FUNCTION_TEMP_1(PACKAGE_NAME_FUNCTION, FUNCTION_NAME)
使用说明
/*
* Class: com_sollyu_game_AntiCrack
* Method: init
* Signature: (Landroid/content/Context;)V
* 该方法的原型: Java_com_sollyu_game_AntiCrack_init(JNIEnv *, jobject, jobject activity_context);
*/
JNIEXPORT void JNICALL JNI_FUNCTION(init)(JNIEnv *, jobject, jobject activity_context);
Java代码
调用方法
和原来的jni函数调用一样,只不过是精简了定义的繁琐和更换包名的繁琐