修改本地代码
首先修改libcore/luni/src/main/native/java_io_File.cpp:
/*
- In class android.util.Log:
- public static native int println_native(int buffer, int priority, String tag, String msg)
*/
static jint File_println_native(JNIEnv* env, jobject clazz,
jint bufID, jint priority, jstring tagObj, jstring msgObj)
{
const char* tag = NULL;
const char* msg = NULL;
if (msgObj == NULL) {
jniThrowNullPointerException(env, "println needs a message");
return -1;
}
clazz = clazz;
if (tagObj != NULL)
tag = env->GetStringUTFChars(tagObj, NULL);
msg = env->GetStringUTFChars(msgObj, NULL);
int res = __android_log_buf_write(bufID, priority, tag, msg);
if (tag != NULL)
env->ReleaseStringUTFChars(tagObj, tag);
env->ReleaseStringUTFChars(msgObj, msg);
return res;
}
这里,我们加入了一个新的函数,叫做File_println_native,这个函数会成为C++中的Log函数与Java中Log函数的桥梁。这个
会调用Android的Log函数生成Log。要使这个函数能被jni调用,需要在JNI注册函数中,注册我们新添加的这个函数。
修改static JNINativeMethod gMethods[]数组,添加我们函数的信息:
NATIVE_METHOD(File, println_native, "(IILjava/lang/String;Ljava/lang/String;)I")
这里,File是我们的类名称,println_native是我们的函数名。后面的字符串是函数的接口。
添加头文件
要记得在这个cpp文件中,加入对cutils/log.h的引用,就是在CPP的开头,添加一行:
#include "cutils/log.h"