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层修改生效

  • 相关阅读:
    uva 494 Kindergarten Counting Game
    uva 458
    Spring--quartz中cronExpression配置说明
    配置DTD提示的方法
    MySQL中怎么查询一张表的列数
    mysql 数据库的名称不能以数字开头
    Navicat: Can't create a procedure from within another stored routine
    解决JQUERY $符号的冲突
    如何截取iframe的内容,修改他的CSS
    struct框架
  • 原文地址:https://www.cnblogs.com/shenwenbo/p/15047381.html
Copyright © 2011-2022 走看看