新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Android 框架簡介

        Android 框架簡介

        作者: 時間:2016-09-12 來源:網絡 收藏

        /** @hide */ public static final int LOG_ID_SYSTEM = 3;

        /** @hide */ public static native int println_native(int bufID,

        int priority, String tag, String msg);

        }

        我們看到所有代碼都是調用public static native int println_native(int bufID,

        int priority, String tag, String msg);來實現輸出的,這個函數的實現就是C++,調用的方式就是JNI

        我們看一下對應的jni代碼froyo/frameworks/base/core/jni/_util_Log.cpp,最終調用的輸出函數是

        /*

        * In class .util.Log:

        * public static native int println_native(int buffer, int priority, String tag, String msg)

        */

        static jint _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) {

        jclass npeClazz;

        npeClazz = env->FindClass(java/lang/NullPointerException);

        assert(npeClazz != NULL);

        env->ThrowNew(npeClazz, println needs a message);

        return -1;

        }

        if (bufID 0 || bufID >= LOG_ID_MAX) {

        jclass npeClazz;

        npeClazz = env->FindClass(java/lang/NullPointerException);

        assert(npeClazz != NULL);

        env->ThrowNew(npeClazz, 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;

        }

        當然我們發現最終輸出是

        ? 1int res = __Android_log_buf_write(bufID, (android_LogPriority)priority, tag, msg);

        用力grep了一下代碼,結果如下

        ./system/core/include/cutils/log.h:int __Android_log_buf_write(int bufID, int prio, const char *tag, const char *text);

        ./system/core/liblog/logd_write.c:int __Android_log_buf_write(int bufID, int prio, const char *tag, const char *msg)

        ./system/core/liblog/logd_write.c: return __Android_log_buf_write(bufID, prio, tag, buf);

        這個就是和Android專用驅動進行通信的方式,這個分析下去就有點深了,后面分析。


        上一頁 1 2 3 4 下一頁

        關鍵詞: Android 框架簡介

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 城步| 将乐县| 黑河市| 桃园县| 道孚县| 梅河口市| 五原县| 乐清市| 大竹县| 马鞍山市| 普兰县| 屏南县| 晋宁县| 东方市| 大悟县| 肃南| 乌鲁木齐市| 拜城县| 仪征市| 嘉善县| 股票| 中卫市| 舞钢市| 遂昌县| 将乐县| 吴忠市| 招远市| 玉田县| 台湾省| 肇州县| 麻阳| 正蓝旗| 祁东县| 昆明市| 阳高县| 津市市| 巴塘县| 玉溪市| 西乡县| 香格里拉县| 沙田区|