前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >科大讯飞应用卡顿分析

科大讯飞应用卡顿分析

作者头像
艳龙
发布2021-12-16 18:03:14
1.8K0
发布2021-12-16 18:03:14
举报
文章被收录于专栏:yanlongli_艳龙yanlongli_艳龙

背景

收到用户反馈,我们的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
复制
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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 分析
    • 获取ANR 的traces文件
      • 分析Release/Debug构建区别
        • 反调试组件为什么导致ANR?
        • 调试过程中使用的命令
        • 结论
        • 参考
        相关产品与服务
        持续集成
        CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档