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

相关文章

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D