android 4.2.1 一种高效log打开方式

2024-04-23 18:58

本文主要是介绍android 4.2.1 一种高效log打开方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        啰嗦下:发现自己的blog被转载了,不过没有注明出处,有点痛并快乐着的感觉。这里正式申明下:转载请注明出处,感谢。如有商用目的请务必知会本人。

 

        在android上工作不少时间,很多工作都是在解bug上。大多数情况下,debug总是要用到log,系统自带的或者自己添加的。在有的应用的某些功能上,android自带的log基本足够了,这个时候只要打开log开关就行。一般应用的log开关基本都是系统声明的一个常量作为标记,比如:

        private static final boolean DEBUG = false;

调试的时候只要将这些常量的值修改下,就能打开log。不过这个就涉及到修改代码,编译,重新安装APK,有点麻烦了。

        和以往一样,android总是能给我们带来一些惊喜,接着就说说某些很特殊很强大的log开关。在调试4.2.1彩信模块的时候,发现涉及彩信发送代码里面的log开关基本都是下面这个方式:

        if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) {
Log.v(TAG, "Creating TransactionService");
}

        进入framework中查看isLoggable方法的定义,发现这是一个用了JNI的方法。不过方法声明上有很多注释。仔细看了下,发现这是android给大家的一个礼物。
原文大致意思:检查当前的tag是否在指定的log级别。一般默认的log级别是INFO,这也就意味着在这之上包括INFO的log都会被输出。(接下来是关键:)你可以通过设置系统属性修改默认的log级别,执行如下命令即可:

        setprop log.tag.;YOUR_LOG_TAG> ;LEVEL

你也开可以将这句代码写进local.prop文件里面,并且将这个文件放到/data/local.prop。根据上面的指导,笔者试着执行下下面的命令:

        adb shell setprop log.tag.Mms:transaction VERBOSE

接着发了一条彩信试验,有效log都输出来了。

        我们在这个基础上在进行一些挖掘,看看google还给我们留了哪些惊喜。从上面第二段代码中的LogTag.TRANSACTION,可以看到Mms的包里面有个LogTag.java文件,发现里面果然声明了不少常量:

    public static final String TRANSACTION = "Mms:transaction";
public static final String APP = "Mms:app";
public static final String THREAD_CACHE = "Mms:threadcache";
public static final String THUMBNAIL_CACHE = "Mms:thumbnailcache";
public static final String PDU_CACHE = "Mms:pducache";
public static final String WIDGET = "Mms:widget";
public static final String CONTACT = "Mms:contact";

这一个个都是彩信里面重要log开关。知道了这些以后调试彩信就方便多了,不用换APK,在出问题的手机上就直接能抓到有效log,能提升不少工作效率。我们接着载回去看看isLoggable(String tag, int level)在哪里有调用,发现除了framework层和Mms应用,还有Contacts等重要模块有调用,以后调试这些模块都会方便很多。

        最后在附上过去发现的Email模块中两个特殊的后台开关。在Email登陆界面输入如下账户名和密码能进入Email的log开关配置界面。

        //  Username: d@d.d
//  Password: debug

还有一个进入的方式就更加有深度了,在联系人的拨号盘界面输入*#*#36245#*#*,这个数字也是email这个单词对应九宫格的输入数字O(∩_∩)O,接着按拨号键就能进入Email的开关打开项。

         从android源码中我们能看到googler在自家的平台上开发APK的功力,每个APK都有自己的风格。慢慢的沉淀,再加上自己的思考,能学到很多知识。


 

 

这篇关于android 4.2.1 一种高效log打开方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/929615

相关文章

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

使用@Slf4j注解,log.info()无法使用问题

《使用@Slf4j注解,log.info()无法使用问题》在使用Lombok的@Slf4j注解打印日志时遇到问题,通过降低Lombok版本(从1.18.x降至1.16.10)解决了问题... 目录@Slf4androidj注解,log.info()无法使用问题最后解决总结@Slf4j注解,log.info(

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝