zoukankan      html  css  js  c++  java
  • Android——aosp 项目framework层修改

    需求1、在系统启动时候输出自己的log

      根据系统启动流程图得知,Android系统会在SystemServer.java中启动

    (aosppy2) aosp@ubuntu:~/android/android5.1$ godir SystemServer.java
    (aosppy2) aosp@ubuntu:~/android/android5.1/frameworks/base/services/java/com/android/server$ ls
    SystemServer.java
    sudo gedit SystemServer.java 
    #修改完成后,mm编译当前的模块
    mm
     

     修改内容:

       通过adb logcat 命令抓取日志,-b 参数标识从系统缓冲区抓取,-s 标识 过滤关键字

    (base) aosp@ubuntu:~$ adb logcat -b system -s 'swb'
    I/swb     ( 3118): Android system server boot do something !
    I/swb     ( 3118): Android system server boot do something !

    需求2、对指定的日志截取修改

      1、找到Log.java所在的位置

    (aosppy2) aosp@ubuntu:~/android/android5.1/packages/apps/Calculator$ godir Log.java
    #输出多个含有Log.java的位置,找到framework层的进行修改
    [130] ./frameworks/base/core/java/android/util
    
    Select one: 130

      2、修改log.java的wtf()方法

     public static int wtf(String tag, String msg) {
            if("swb".equals(tag)){
                msg = "i handle swb this log..............................";
            }
            return wtf(LOG_ID_MAIN, tag, msg, null, false, false);
        }

      修改完成后进行编译,push到当前的模拟器上,进入ADB ,“stop;start” 进行重新启动Android系统

    (aosppy2) aosp@ubuntu:~/android/android5.1/frameworks/base/core/java/android/util$ adb push $(gettop)/out/target/product/generic_x86/system/framework/framework.jar /system/framework
    failed to copy '/home/aosp/android/android5.1/out/target/product/generic_x86/system/framework/framework.jar' to '/system/framework/framework.jar': Read-only file system
    (aosppy2) aosp@ubuntu:~/android/android5.1/frameworks/base/core/java/android/util$ adb remount
    remount succeeded
    (aosppy2) aosp@ubuntu:~/android/android5.1/frameworks/base/core/java/android/util$ adb push $(gettop)/out/target/product/generic_x86/system/framework/framework.jar /system/framework

      (aosppy2) aosp@ubuntu:~/android/android5.1/frameworks/base/core/java/android/util$ adb shell
      root@generic_x86:/ # stop;start  

    
    

       3、在任意一个APP里面增加 Log.wtf()调用,这里方便对比,wtf方法中我们做了处理而普通的Log.d()方法未处理

            Log.d("swb","on calculator is start ~~~~~~~~~~~~~~~~~~~~~~~~");
            Log.wtf("swb","on calculator is start ~~~~~~~~~~~~~~~~~~~~~~~~"); 

       adb logcat 查看修改的日志

    (base) aosp@ubuntu:~$ adb logcat -s 'swb'
    --------- beginning of main
    --------- beginning of system
    I/swb ( 1224): Android system server boot ---------------------------------------------------------------------------------------------------------------------->do something !
    I/swb ( 1224): Android system server boot ---------------------------------------------------------------------------------------------------------------------->do something !
    D/swb ( 2001): on calculator is start ~~~~~~~~~~~~~~~~~~~~~~~~
    F/swb ( 2001): i handle swb this log..............................


        我这里在计算器的启动类中调用了代码,运行模拟器,抓取日志

      

    应用层——>framework层——>JNI层——>natvice层修改生效

  • 相关阅读:
    打造自己的LINQ Provider(上):Expression Tree揭秘
    asp.net MVC 开篇
    .net面试基础
    asp.net MVC3.0
    数字万用表的四位半,三位半都是什么意思?
    lpsz,sz, 变量的命名规范
    老毛桃PE系统安装篡改主页3456.com和强制安装绿色浏览器lvseie.exe
    PC电源厂商及品牌篇(台厂及国际品牌篇)(第二版)
    Borland C++ 语法摘要
    Win8打开文件夹卡顿
  • 原文地址:https://www.cnblogs.com/shenwenbo/p/15047381.html
Copyright © 2011-2022 走看看