디버그 on/off에 따라 자료형을 다르게 하는 방법
원래 이렇게 해야하는걸
static const RegJNIRec gRegJNI[] = {
{ 엄청나게 긴 함수명, "엄청나게 긴 함수명" },
...
}
요렇게 하면!
#ifdef NDEBUG
#define REG_JNI(name) { name }
struct RegJNIRec {
int (*mProc)(JNIEnv*);
};
#else
#define REG_JNI(name) { name, #name }
struct RegJNIRec {
int (*mProc)(JNIEnv*);
const char* mName;
};
#endif
static const RegJNIRec gRegJNI[] = {
REG_JNI(register_com_android_internal_os_RuntimeInit),
...
};
static int register_jni_procs(const RegJNIRec array[], size_t count, JNIEnv* env)
{
for (size_t i = 0; i < count; i++) {
if (array[i].mProc(env) < 0) {
#ifndef NDEBUG
ALOGD("----------!!! %s failed to load\n", array[i].mName);
#endif
return -1;
}
}
return 0;
}
깔끔하다 perfect
출처
android/frameworks/base/core/jni/AndroidRuntime.cpp