aosp需求开发:java核心库libcore如何单编及打印log和堆栈

背景:

经常在aosp开发时候会使用很多的java本身的核心库,这个核心库的类本身就不是单独针对android开发的,而是各个平台都可以使用,就像我们电脑上eclipse编译运行java代码一样,完全不需要android部分的framework代码。

这块代码源代码在哪呢?如果有需求需要在这块代码加入相关的打印或者一些定制业务逻辑该怎么办呢?其实vip群中有学员朋友提出这个需求:

在这里插入图片描述学员的疑问简单说就是修改了相关的java核心库代码,不知道如何进行单独编译进行验证了。

针对这个问题本文带大家来一起解决。

实战过程

需求案例1:

经常在开发时候需要看看File文件在哪个进程进行的创建,可能会需要到File.java这个类中加入一些打印或者额外调试判断等,这里我们就打印一下File的名字。

libcore/ojluni/src/main/java/java/io/File.java

private File(String pathname, int prefixLength) {
    this.path = pathname;
    this.prefixLength = prefixLength;
    //注意无法直接使用andorid的log打印,使用System.out代替
    System.out.println("File  pathname 111  " + pathname);
}

注意因为File属于java核心库的类,也就是完全可以脱离android的framework运行,就像我们后台开发一样完全是在电脑端运行的。所以自然在File类中进行日志打印是不可以使用android.util.Log类进行相关的打印。

重点来了,请问写完这个代码后如何进行编译呢?

方案1:直接进行整编使用make命令既可以,啥也不用管File这个类具体是要更新哪个模块,但是因为经常整编耗时,效率太低了。

方案2:因为整编耗时,要重新刷机等,是否可以想framework.jar一样进行单独编译更新呢?

这里马哥经过寻找发现可以使用如下命令:

make com.android.art

然后会生成/system/apex/com.android.art.capex文件,只需要更新这个文件既可以

adb root;adb remount
adb push out/target/product/gemini/system/apex/com.android.art.capex /system/apex/com.android.art.capex
adb reboot

然后抓取log结果如下:

在这里插入图片描述

需求案例2:

在系统开发中,经常一些app无故退出,这个时候测试可能会提出相关的故障,那么系统就需要对这个app无故退出进行分析,但是分析过程中发现也有很多app会主动调用System.exit等方法把自己进程直接退出。

那么这个时候系统开发可能经常就容易和app进行扯皮,所以需要考虑在System.exit等方法中加入相关的堆栈来证明app的退出是哪块代码触发的,所以就有需求在System.exit方法中加入相关的堆栈打印等。

因为不可以直接使用android的Log,只在java核心库中应该如何使用堆栈打印呢?

libcore/ojluni/src/main/java/java/lang/System.java

public static void exit(int status) {
//java的堆栈打印
    Exception e = new Exception("System exit");
    e.printStackTrace();
    Runtime.getRuntime().exit(status);
}

同样和案例一样方式进行编译push

make com.android.art

然后会生成/system/apex/com.android.art.capex文件,只需要更新这个文件既可以

adb root;adb remount
adb push out/target/product/gemini/system/apex/com.android.art.capex /system/apex/com.android.art.capex
adb reboot

验证日志堆栈打印结果如下:

在这里插入图片描述
原文地址:https://mp.weixin.qq.com/s/qbC7MhomZ2SNF9ZkprrI_A
更多framework实战开发干货,请关注下面千里马学框架“”

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值