本篇文章由:http://www.sollyu.com/use-macro-definitions-to-reduce-tedious-jni/
本篇文章由:http://www.sollyu.com/use-macro-definitions-to-reduce-tedious-jni/
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函数调用一样,只不过是精简了定义的繁琐和更换包名的繁琐
时间: 2024-10-07 01:12:29