新聞中心

        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 框架簡介

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 麻阳| 望江县| 合肥市| 正定县| 大理市| 竹溪县| 舒兰市| 托里县| 伊春市| 罗源县| 惠州市| 桓仁| 平定县| 永丰县| 嘉祥县| 抚州市| 泗阳县| 安泽县| 尼勒克县| 龙胜| 上林县| 尤溪县| 浮山县| 景洪市| 东源县| 阿拉善右旗| 海伦市| 绥阳县| 塔河县| 岳池县| 长乐市| 于田县| 临沭县| 左贡县| 丰镇市| 洪湖市| 名山县| 介休市| 泗水县| 德钦县| 翼城县|