首页 > 代码库 > 使用宏定义来减少JNI的繁琐

使用宏定义来减少JNI的繁琐

本篇文章由: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函数调用一样,只不过是精简了定义的繁琐和更换包名的繁琐

使用宏定义来减少JNI的繁琐