位置: 编程技术 - 正文

Android 5.0 如何正确启用isLoggable(一)__使用详解(android系统设置)

编辑:rootadmin
isLoggable是什么

推荐整理分享Android 5.0 如何正确启用isLoggable(一)__使用详解(android系统设置),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android系统教程,androidq,android系统怎么样,android怎么运行,android系统设置,android系统教程,android系统教程,android怎么样,内容如对您有帮助,希望把文章链接给更多的朋友!

在Android源码中,我们经常可以看到如下代码:

只有在android.util.Log.isLoggable返回&#;为true的时候,startOrFinishUi的log才能正常输出。那什么时候isLoggable才会返回true呢?如何简单快捷的开启isLoggable并使log正常输出呢?

本文来自 转载请务必注明出处

isLoggable定义

什么是isLoggable?isLoggable是android.util.Log提供的方法,用于检查指定TAG的level,是否满足输出条件,如满足则返回true反之则返回false。isLoggable在源码中的定义如下:

从以上定义中可以知道:

1. isLoggable默认level为android.util.Log.INFO;

2. 只有 level >= INFO才能输出,即level >= INFO时isLoggable返回true,反之则返回false;

3. 可以通过setprop log.tag.<YOUR_LOG_TAG> <LEVEL>来改变log的默认level,如adb shell setprop log.tag.InCall D。也可以将这些属性按照log.tag.InCall=D的形式,写入/data/local.prop中;

4. tag的长度如果超过个字符则会抛出IllegalArgumentException异常;

在android.util.Log类中定义了Log的6种Level,如下:

6种level对应不同等级的log,level&#;的大小随着log权重的升高而增大。isLoggable使能方法

前文提到,在自定义的Log类中通常使用isLoggable来判断是否输出log,如代码:

如果想要输出startOrFinishUi()方法中的log,可以采用以下方式:

①. 将Log.d修改为android.util.Log.d;使用android.util.Log类取代InCallUI自定义的Log类,重新编译系统APP并push到手机中即可;

②. 修改com.android.incallui.Log中的DEBUG限制;将DEBUG的&#;直接置为true,或者注释掉if(DEBUG)。也可以将isLoggable(TAG, android.util.Log.DEBUG)中的android.util.Log.DEBUG修改为android.util.Log.INFO,即将log的level增大,从而使isLoggable()返回true并使得DEBUG的&#;为true;

Android 5.0 如何正确启用isLoggable(一)__使用详解(android系统设置)

③. 设置log.tag.InCall的属性&#;;通过adb shell setprop log.tag.InCall D,或者将"log.tag.InCall=D"写入/data/local.prop中(不包含引号,如local.prop不存在则需自行创建,权限设为)。根据定义中的描述,设置属性&#;需要在方法被调用之前,因此需要重启InCallUI进程。通过修改属性&#;的方法,从而使得isLoggable()的返回&#;为true,从而使得DEBUG的&#;为true。

第一种方式直接修改,简单粗暴,但若修改点较多则比较麻烦,且需要重新编译代码。

第二种方式修改点统一,但和第一种一样,也需要重新编译。

第三种使用属性的方式使得isLoggable返回true,这种方式比较方便,同时适用于user/userdebug/eng各个版本的设备。这种方式需要在方法被调用前设置log.tag.InCall,通过代码:

可以知道,因为DEBUG是static的变量,所以当Log类被加载时,其&#;就已经设置好了。如果要使得isLoggable返回为true,那么setprop需要在Log类被加载前设置好,因此使用setprop之后需要重启对应的进程,如这里的com.android.incallui。但在framework中有些代码也使用isLoggable,framework属于每一个进程,如何重启framework呢?可以使用:adb shell stop会杀掉zygote进程以及所有由zygote孵化而来的子进程。adb shell start则会重启zygote进程,再由zygote进程启动其它Android核心进程。当zygote重新启动时,会重新加载framework相关资源,而此时属性已经设置。这种方法虽然简单,但当设备重启后,所有设置的log.tag.<TAG>都会失效,若想再次启用则需重新设置。

也可以通过将log.tag.InCall=D加入到/data/local.prop文件中,这种方式与setprop类&#;,都是设置属性&#;,但这种方式的好处是,设置之后重启设备该log.tag.InCall依然有效。不过因为/data目录的权限控制,只有userdebug/eng版本才可以修改/data/local.prop文件。

小结

isLoggable的使能方法如下图所示:

图 1 isLoggable使能方案对比

如果只是想启用某个进程的isLoggable方法,通过setprop设置属性是不错的选择,同事,想要重启设备后依然有效则需要设置/data/local.prop,不过/data目录只有在userdebug/eng版本中才可以写入。那如果想在user版中设置log.tag属性并在重启后依然有效,可以采取以下方法:

1. 获取user版系统的root权限;

2. 将log.tag.InCall=D追加到/system/build.prop文件中;

3. adb reboot重启设备;

以上方案大家可能会疑惑,既然user版获取到了root权限,为什么不直接修改/data/local.prop呢?这是因为如果是user版,则ro.debuggable=0,所以系统启动时不会读取/data/local.prop文件,并最终导致设置log.tag属性不会生效。详细原理将在下一篇文章《Android 5.0 如何正确启用isLoggable(一)__原理分析》中探讨。

Android应用层View绘制流程与源码分析 1背景还记得前面《Android应用setContentView与LayoutInflater加载解析机制源码分析》这篇文章吗?我们有分析到Activity中界面加载显示的基本流程原理,记不记

Unity打包后的APK包反编译 笔者使用的是apktool,首先在网上下载apktool工具,不需要安装,解压后的目录内容如下将此目录添加到Path环境变量中。在Dos窗口下,先cd到apk包所在目录

备忘笔记--->Android Activity 一生命周期:protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);System.out.println(onCreate-------被创建时候调用);}pr

标签: android系统设置

本文链接地址:https://www.jiuchutong.com/biancheng/384244.html 转载请保留说明!

上一篇:Android属性动画完全解析(上),初识属性动画的基本用法(android 属性动画改变view大小)

下一篇:Android应用层View绘制流程与源码分析(android应用层是什么)

  • 股票印花税如何计算
  • 待认证进项税账务处理
  • 车船税不交有什么影响 三大影响要注意
  • 车船使用税会打折么
  • 金税四期什么时候正式上线
  • 增值税发票税控开票软件怎么下载
  • 加班餐费有发票怎么入账
  • 外债利息支付需要按照天计算吗?
  • 小规模纳税人交印花税吗
  • 税务机关如何正确行使代位权
  • 中小企业的管理者角色和技能有什么要求
  • 应缴国库款和应交税款
  • 化妆品的成本利润是多少
  • 筹建期结转损益吗
  • 灭草剂使用说明
  • 出口退税金额和进项税额不一致
  • 年内累计增量和年度增量计算公式
  • 企业购车票可以抵扣增值税吗?
  • 签合同交什么照片比较好
  • 免税的销售额要怎么填入报表
  • 哪些情况下不就地分摊缴纳企业所得税?
  • 固定资产进项发票怎么开
  • 税务局退的教育费附加怎么做账
  • 无形资产的入账价值包括宣传费吗
  • 残保金每年什么时候申报缴纳
  • 所有者权益类科目借贷方向
  • 民间借贷以工资抵押的案例
  • 宽带调制解调器出现问题怎么解决
  • Win7系统电脑c盘什么都没有为什么满了
  • PHP:Memcached::setOptions()的用法_Memcached类
  • PHP:iterator_to_array()的用法_spl函数
  • 股权转让的不仅是权利还有义务
  • 除甲醛的净化器哪个品牌做得最好
  • 多层是什么
  • 前端es6是什么意思
  • gpt gtp
  • vue学起来困难吗
  • vue.js前端
  • node-js
  • 其他机械和设备修理业包括哪些
  • 固定资产转为投资性房地产属于会计政策变更
  • 养老保险进账金额
  • 什么是印花税,怎么征收
  • 如何查看简易征信报告
  • access使用查询向导创建查询
  • mysql日志文件在哪里
  • 个人劳务费免税额度 年度
  • 15个postgresql数据库实用命令分享
  • 增值税和个人所得税怎么算
  • 纳税人具有怎样的特征?
  • 一般纳税人应如何报税
  • 政府奖励金怎么发放
  • 固定资产出售算营业收入吗
  • 什么是利润表?其作用有哪些?
  • 党委经费是国家政府出吗?
  • 产值和销售收入可以一样吗
  • 商业资本金
  • windows 10预览版
  • freebsd使用
  • win8系统崩溃无法开机
  • winxp共享打印机win11
  • linux命令的参数
  • win7系统怎么加入工作组
  • win7便签在哪里找回来
  • 【Cocso2d-x Lua笔记五】quick中的display
  • jquery实现回到顶部
  • python制作数字拼图
  • 打开指定文件夹命令
  • python编程判断一千以内含88的数的方法
  • 微信小程序访问相册权限在哪里
  • unity3d添加组件
  • 使用时间
  • 在linux的主要组成部分中最基础的是哪一项?
  • 使用JQuery选择HTML遍历函数的方法
  • centos6.5
  • 去伪存真栏目为什么取消啦
  • 税务通知书一般什么内容
  • 税务如何稽查
  • 江之都财税服务集团有限公司是私企吗
  • 注册一个信息咨询公司需要什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设