真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

為androidjava基礎(chǔ)庫插入log-創(chuàng)新互聯(lián)

近來有一個需求,是需要在android java基礎(chǔ)庫中插入一些log信息,完成這個工作需要的前置條件有
編譯好的android源碼

具體android源碼如何編譯,這里筆者推薦使用cm的android源碼,里面的驅(qū)動都已經(jīng)有相應(yīng)的分支,可以支持大多數(shù)的主流機型,關(guān)于如何編譯cm的android源碼,可以參考我以前寫的博文,在android system目錄中。

站在用戶的角度思考問題,與客戶深入溝通,找到南縣網(wǎng)站設(shè)計與南縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、申請域名、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋南縣地區(qū)。

android 4.0以后的源碼中關(guān)于 java基礎(chǔ)類庫的代碼在
libcore/luni/src/main/java
這個目錄下

首先找到你要插入log的java基礎(chǔ)文件,比如 java.io.File 這個文件為例子,我們想在

public File(String path)
   public File(String path) {
   Log("cheatecore","File String path = " + path);
       this.path = fixSlashes(path);
   }

插入這條log,來記錄所有的apk對文件操作的記錄,由于android.util.Log 這個類并沒有定義在java基礎(chǔ)類庫中所以需要通過jni調(diào)用的方式來完成這個任務(wù)。

步驟1在File.java 這個文件中添加下面的語句

private static final int LOG_ID_MAIN = 0;
private static final int DEBUG = 3;

public static int Log(String tag,String msg)
{
    return println_native(LOG_ID_MAIN,DEBUG,tag,msg);
}

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

步驟2 參考 /Frameworks/base/core/jni/android_util_Log.cpp
這個文件中對于 println_native 這個函數(shù)的實現(xiàn),其實這個文件就是
/Frameworks/base/core/java/android/util/Log.java 這個java文件的
本地化實現(xiàn),里面自然有 println_native 這個函數(shù)的實現(xiàn),這里我們需要拷貝
這個函數(shù)到 /luni/src/main/native/java_io_File.cpp這個文件中

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;
}

步驟3 /luni/src/main/native/java_io_File.cpp 文件中加入 jni動態(tài)注冊中

static JNINativeMethod gMethods[] = {

    { "println_native",  "(IILjava/lang/String;Ljava/lang/String;)I", (void*) android_util_Log_println_native },  
    NATIVE_METHOD(File, listImpl, "(Ljava/lang/String;)[Ljava/lang/String;"),
    NATIVE_METHOD(File, readlink, "(Ljava/lang/String;)Ljava/lang/String;"),
    NATIVE_METHOD(File, realpath, "(Ljava/lang/String;)Ljava/lang/String;"),
    NATIVE_METHOD(File, setLastModifiedImpl, "(Ljava/lang/String;J)Z"),
};
void register_java_io_File(JNIEnv* env) {
    jniRegisterNativeMethods(env, "java/io/File", gMethods, NELEM(gMethods));
}

最后一步,編譯,可以進入到 libcore 這個目錄下使用 mm命令編譯,前提是你已經(jīng)完成的編譯過一邊android源碼,如果對此還不熟悉可以參考網(wǎng)絡(luò)或者看看我以前寫的博文。

編譯生成兩個文件,一個是 core.jar,一個是 libjavacore.so,
具體位置如下

out/target/product/maguro/system/lib/libjavacore.so
out/target/product/maguro/system/framework/core.jar

ok 這個時候?qū)⒆约旱氖謾C以recovery模式啟動,將這兩個文件在 /system/lib 和 system/framework/下替換掉即可

然后再開機,發(fā)現(xiàn)系統(tǒng)里面的apk凡是用到j(luò)ava File類的地方都出現(xiàn)了插入的log

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)頁題目:為androidjava基礎(chǔ)庫插入log-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://weahome.cn/article/gjgjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部