Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android.util.Log#println_native()中有什么内容?_Java_Android_Logging_Android Source_Println - Fatal编程技术网

Java android.util.Log#println_native()中有什么内容?

Java android.util.Log#println_native()中有什么内容?,java,android,logging,android-source,println,Java,Android,Logging,Android Source,Println,是android.util.Log源代码 在最底部(第340行),方法中的内容: public static native int println_native(int bufID, int priority, String tag, String msg); 我猜println\u native()与它的println()差不多,只是与int bufID不同 但是,即使我得到了println\u native(),我仍然缺少com.android.internal.os.R

android.util.Log
源代码

在最底部(第340行),方法中的内容:

public static native int println_native(int bufID,
        int priority, String tag, String msg);

我猜
println\u native()
与它的
println()
差不多,只是与
int bufID
不同


但是,即使我得到了
println\u native()
,我仍然缺少
com.android.internal.os.RuntimeInit
(第19行,导入
import
)来模拟旧安卓版本中的
android.util.Log

只是对安卓源代码进行了一些挖掘。此函数映射到

static jint android_util_Log_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;
}

if (bufID < 0 || bufID >= LOG_ID_MAX) {
    jniThrowNullPointerException(env, "bad bufID");
    return -1;
}

if (tagObj != NULL)
    tag = env->GetStringUTFChars(tagObj, NULL);
msg = env->GetStringUTFChars(msgObj, NULL);

int res = __android_log_buf_write(bufID, (android_LogPriority)priority, tag, msg);

if (tag != NULL)
    env->ReleaseStringUTFChars(tagObj, tag);
env->ReleaseStringUTFChars(msgObj, msg);

return res;
}
static jint android\u util\u Log\u println\u 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需要消息”);
返回-1;
}
如果(bufID<0 | | bufID>=LOG_ID_MAX){
jniThrowNullPointerException(env,“坏bufID”);
返回-1;
}
if(tagObj!=NULL)
tag=env->GetStringUTFChars(tagObj,NULL);
msg=env->GetStringUTFChars(msgObj,NULL);
int res=\uuuuAndroid\uLog\uBuf\uWrite(bufID,(android\uLogPriority)优先级、标记、消息);
如果(标记!=NULL)
环境->释放StringUTFChars(tagObj,tag);
环境->释放StringUTFChars(msgObj,msg);
返回res;
}

基本上,这会将参数传递给系统中的驱动程序,该驱动程序将进入并写入日志缓冲区。日志缓冲区由Linux内核中的
/dev/Log
指向

下载sdk后,您可以使用
find
挖掘文件。 Java代码通过jni链接到cpp代码

在您的情况下,可以使用此命令查找相关文件:

find framework -type f -name "*.cpp" -exec grep "println_native" {} \; -ls

然后你会看到你的java函数链接到这个文件:framework/base/core/jni/android_util_Log.cpp

你是说你下载了源代码并显示了上面的代码吗?谢谢。你能说出你追踪到那些代码的确切位置吗?让我知道在哪里下载?试试这个。你能解释一下如何追踪它吗?我把它追溯到Log.java类的第340行,不知道下一步该去哪里。我希望第340行是对“public static native int println_native(int bufID,int priority,String tag,String msg);”的调用。这将对应于从Log.cpp发布的函数。然后,上面的函数调用Linux中的日志缓冲区来发布消息。DDMS读取此缓冲区以显示日志。