android 在Java核心库libcore中打印log

发现在/libcore/luni目录 也就是java的核心库里面,不能用Log  。。。。

怎么办呢?

http://blog.csdn.net/a345017062/article/details/6436264#reply

看了篇博客,博主啊  看的我是懂非懂的,自己做了下,记录在下

 

思路就是在核心库里面搭建一套调用log的框架,也就是搭建JNI;

比如 我想在./libcore/luni/src/main/java/java/io/File.java里面打印log

步骤1.将frameworks/base/core/java/android/util/Log.java里面的本地方法copy到File.java文件里面;另外建立Log()方法;

    //下面的是建立log方法;
    private static final int LOG_ID_MAIN = 0;
    private static final int DEBUG = 3;
    private static int Log(String tag, String msg) {
        return println_native(LOG_ID_MAIN, DEBUG, tag, msg);
    }
     
    //Log.java里面的本地方法
    private static native int println_native(int bufID,
            int priority, String tag, String msg);

发现我的类型都是private了吧,以前的是public,不修改的话编译的时候会错;

步骤2.把/frameworks/base/core/jni/android_util_Log.cpp中对之对应的本地方法copy到libcore/luni/src/main/native/java_io_File.cpp,加在static JNINativeMethod gMethods[ ]之前就行;下面是copy的本地方法

static jint android_util_Log_println_native(JNIEnv* env, jobject clazz,

        jint bufID, jint priority, jstring tagObj, jstring msgObj)

{

    ... ...

}


 

步骤3.在libcore/luni/src/main/native/java_io_File.cpp文件中加入Log注册本地方法

static JNINativeMethod gMethods[] = {
    ... ...
    { "println_native",  "(IILjava/lang/String;Ljava/lang/String;)I", (void*) android_util_Log_println_native },
};


 

里面的{ "println_native",  "(IILjava/lang/String;Ljava/lang/String;)I", (void*) android_util_Log_println_native },就是在frameworks/base/core/jni/android_util_Log.cpp里面的static JNINativeMethod gMethods[] ={}注册方法,我只是把他copy了过来;

    ok,现在我们就可以在./libcore/luni/src/main/java/java/io/File.java里面的任何位置,用刚定义的Log( )方法打印自己需要的log了。
 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值