Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >科大讯飞应用卡顿分析

科大讯飞应用卡顿分析

作者头像
艳龙
发布于 2021-12-16 10:03:14
发布于 2021-12-16 10:03:14
2K00
代码可运行
举报
文章被收录于专栏:yanlongli_艳龙yanlongli_艳龙
运行总次数:0
代码可运行

背景

收到用户反馈,我们的app在科大讯飞的定制系统上,运行卡顿。 1、表现为点击进入应用后,用户点击无响应,系统提示ANR。 2、Debug 运行无卡顿, Release 运行卡顿

分析

获取ANR 的traces文件

方法: /data/anr/ 目录下,查找traces.txt文件 结果:/data/anr/ 目录没有traces.txt的堆栈文件 方法:通过 bugreport获取系统错误报 $ adb bugreport 查看 bugreport 文件: grep(查找) ANR in (没有结果) grep(查找) am_anr 找到发生anr的时间 没有其他堆栈信息,无法定位到具体位置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
09-22 10:48:01.699  1000   949   985 I am_anr  : [0,5214,包名******,953695812,Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago.  Wait queue length: 8.  Wait queue head age: 6920.6ms.)]
时间: 09-22 10:48:01.699
输入响应超时, 进程号: 5214 
进程名称: ******
ANR类型: Input dispatching timed out
分析Release/Debug构建区别

尝试了如下方法: 1、./gradlew assembleRelease 构建本地Release包 // 存在ANR,排除持续集成环境问题 2、build.gradle 文件设置Rlease 的config配置 和 Debug配置对齐 // 定位具体的config配置导致的ANR错误。

引起错误的原因是,Release开启了反调试检测, 反调试组件检测到异常,终止了进程

反调试组件为什么导致ANR?

1、使用Demo 程序加载了 反调试的plugin插件,Demo app直接退出。 2、我们的app 加载反调试的plugin插件, APP一直卡在启动页面,点击出现ANR(app 进程没有被退出)。 查看logcat 日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2021-09-26 09:30:14.887 992-992/? I/Zygote: Process 21231 exited due to signal 9 (Killed)
2021-09-26 09:30:14.888 1546-4458/? I/ActivityManager: Process ****** (pid 21231) has died: fg  TOP 
2021-09-26 09:30:14.888 1546-4458/? W/ActivityManager: Canceling start item Intent { cmp=******/******.timer.calendar.CalendarSystemAlarmService } in service ******/******.timer.calendar.CalendarSystemAlarmService
2021-09-26 09:30:14.888 1546-4458/? W/ActivityManager: Scheduling restart of crashed service ******/******.timer.calendar.CalendarSystemAlarmService in 426112ms for start-requested
2021-09-26 09:30:14.890 1546-1608/? I/libprocessgroup: Successfully killed process cgroup uid 10271 pid 21231 in 0ms
2021-09-26 09:30:14.891 1546-1594/? D/CompatibilityChangeReporter: Compat change id reported: 135634846; UID 10271; state: DISABLED
2021-09-26 09:30:14.892 1546-1607/? D/CompatibilityChangeReporter: Compat change id reported: 143937733; UID 10271; state: DISABLED
2021-09-26 09:30:14.910 992-992/? D/Zygote: Forked child process 22007
2021-09-26 09:30:14.913 1546-1607/? I/ActivityManager: Start proc 22007:******/u0a271 for top-activity {******/******.WwMainActivity}

在logcat 中 发现这样一条日志 Forked child process 22007 。 app 在被kill的时候,又被Forked了一个新的进程出来,导致app进程一直没有被杀死,出现了ANR

调试过程中使用的命令

adb关闭应用 $ adb shell am force-stop 包名

获取系统信息 $ adb shell getprop ro.build.version.release 9

获取cpu信息 $ adb shell cat /proc/cpuinfo

获取内存信息 $ adb shell cat /proc/meminfo MemTotal: 1870388 kB = 1826M = 1.78G // 总内存 MemFree: 210684 kB = 205M = 0.2G // 系统可用内存 MemAvailable: 829500 kB = 810M = 0.79G // 应用可用内存 约等于 MemFree + Buffers + Cached Buffers: 24616 kB = 24M Cached: 645764 kB = 630M

结论

1、APP发布的Release包,开启了 反调试 验证 2、科大讯飞ROM模式为userdebug,在反调试检测下无法运行(表现是APP出现ANR) 3、反调试kil掉app进程后, 系统又自动fork了一个新的进程启动,启动后检测又失败,如此进入了循环,出现APP卡顿。

参考

获取手机系统的构建模式 https://likfe.com/2017/10/09/android-usermode/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/9/26 上,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
测试开发进阶(四十八)
https://github.com/google/battery-historian
zx钟
2019/12/20
5470
测试开发进阶(四十八)
Android 系统 目录 分析「建议收藏」
转自: hknote 及 Ophone8 作者: Wanan.’s 及 O友
全栈程序员站长
2022/11/04
1.3K0
某地理位置模拟APP从壳流程分析到破解
在我们拿到一个APP准备破解时一般得安装运行,程序运行后须要注册用户,随便注册一个用户登录,以下是APP须要购买vip才能使用的大概情况。
我是小三
2018/08/08
1.4K0
某地理位置模拟APP从壳流程分析到破解
Android高频面试专题 - 进阶篇(一)ANR
ANR:Application Not Responding,即应用无响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。一般地,这时往往会弹出一个提示框,告知用户当前xxx未响应,用户可选择继续等待或者Force Close。
Android扫地僧
2020/03/19
1.8K0
Android高频面试专题 - 进阶篇(一)ANR
分析哲学_怎样查看bugreport
bugreport里面包含了各种log信息,大部分log也可以通过直接运行相关的程序来直接获得.
全栈程序员站长
2022/09/19
2.8K0
嘘,我已经瞒着开发解锁APP日志文件抓取及分析啦!
Dalvik Debug Monitor Service ( Dalvik调试监控服务) ,可视化的图形界面调试监控工具。不同等级log信息显示的颜色不同,使用起来方便直观。ddms监控系统或应用日志、监控线程状态、VM使用状况(内存泄漏通过它来判断)、模拟短信电话事件、生成logcat日志、文件管理及截屏等功能。
可可的测试小栈
2019/10/17
2.3K0
Android ANR 分析学习总结
1. 什么情况下会发生anr (1). KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应 (2). BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成 (3). ServiceTimeout(20 seconds) --小概率类型 Service在特定的时间内无法处理完成 2. KeyDispatchTimeout超时原因 (1). 当前的事件没有机会得到处理(即UI线程正在处理
用户1127566
2018/06/06
2.2K0
都知道避免ANR,但该如何分析,定位,解决?
链接:https://www.jianshu.com/p/cfa9ed42e379
陈宇明
2020/12/16
4.5K0
都知道避免ANR,但该如何分析,定位,解决?
Android APP测试的日志文件抓取
  实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志
流柯
2018/08/30
3.2K0
Appium+python自动化(二十)- 猴哥失散多年的混血弟弟还是妹妹- Monkey猴子日志
  日志是非常重要的,用于记录系统、软件操作事件的记录文件或文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统、软件的活动等重要作用,在开发或者测试软系统过程中出现了问题,我们首先想到的就是她——logging。她可不像泰戈尔说的:“天空没有留下翅膀的痕迹,但我已经飞过”;Monkey这个小姑娘,她可是一个爱炫耀,爱显摆的人已经达到了人过留名、雁过留声的境界。只要我们按图索骥就一定可以定位到问题所在,然后分析问题,解决问题。好了逗大家一乐,下面开始进入今天的正题。
北京-宏哥
2019/07/19
1.2K0
Android Handler机制 – MessageQueue如何处理消息
最近在查看应用的线上日志统计时,发现一个 MessageQueue.nativePollOnce() 的记录,具体信息如下:
全栈程序员站长
2022/11/17
7300
Android Handler机制 – MessageQueue如何处理消息
微信Android客户端的ANR监控方案
ANR监控是一个非常有年代感的话题了,但是市面上的ANR监控工具,或者并非真正意义上的ANR的监控(而是5秒卡顿监控);或者并不完善,监控不到到所有的ANR。而想要得到一个完善的ANR监控工具,必须要先了解系统整个ANR的流程。本文分析了ANR的主要流程,给出了一个完善的ANR监控方案。该方案已经在Android微信客户端上经过全量验证,稳定地运行了一年多的时间。 我们知道ANR流程基本都是在system_server系统进程完成的,系统进程的行为我们很难监控和改变,想要监控ANR就必须找到系统进程跟
微信终端开发团队
2021/07/19
5K0
Android卡顿优化 | ANR分析与实战(附ANR-WatchDog源码分析及实战、与AndroidPerformanceMonitor的区别)
运行程序,等到程序ANR或崩溃, 在Terminal使用刚刚提到的命令,导出ANR的信息文件:
凌川江雪
2020/04/09
5.2K2
Android卡顿优化 | ANR分析与实战(附ANR-WatchDog源码分析及实战、与AndroidPerformanceMonitor的区别)
安卓应用无响应,你真的了解吗?
引言 不论从事安卓应用开发,还是安卓系统研发,应该都遇到应用无响应(简称ANR)问题,当应用程序一段时间无法及时响应,则会弹出ANR对话框,让用户选择继续等待,还是强制关闭。
刘盼
2019/05/14
2.3K0
Android系统架构开篇
本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制。虽然Android系统非常庞大且错综复杂,需要具备全面的技术栈,但整体架构设计清晰。Android底层内核空间以Linux Kernel作为基石,上层用户空间由Native系统库、虚拟机运行环境、框架层组成,通过系统调用(Syscall)连通系统的内核空间与用户空间。对于用户空间主要采用C++和Java代码编写,通过JNI技术打通用户空间的Java层和Native层(C++/C),从而连通整个系统。
刘盼
2019/05/17
4K0
Android系统架构开篇
Android深入卡顿分析与实践
1、视觉惯性 视觉预期帧率,用户潜意识里认为下帧也应该是当前帧率刷新比如一直60帧,用户潜意识里认为下帧也应该是60帧率。刷新一直是25帧,用户潜意识里认为下帧也应该是25帧率。但是刷新如果是60帧一下跳变为25帧,扰乱用户视觉惯性。这个时候就会出现用户体验的卡顿感。
QQ音乐技术团队
2023/12/20
1.7K0
Android深入卡顿分析与实践
卡顿优化
帮助开发者检查代码不规范问题 严苛模式:Android 提供的一种运行检查机制 方便强大,容易被忽视,包含线程策略与虚拟机检测策略
Yif
2020/04/23
1.7K0
卡顿优化
Android Native Crash问题排查思路
对于Android APP而言,native层Crash相比于Java层更难捕获与定位,因为so的代码通常不可见,而且,一些第三方so的crash或者系统的更难定位,堆栈信息非常少:参考下面的几个native crash实例
看书的小蜗牛
2021/11/24
2K0
Android Native Crash问题排查思路
Android应用ANR分析
在Android中,程序的响应性是由Activity Manager与Window Manager系统服务来负责监控的,当系统检测到下面的条件之一时会显示ANR的对话框:
用户1205080
2019/03/18
1.2K0
金三银四季招聘季,APP测试面试题温新一遍
不同点:相对与web测试来说,app测试要考虑手机本身固有的属性,所以app测试还需要注意以下几点。
可可的测试小栈
2021/03/16
9670
相关推荐
测试开发进阶(四十八)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验