记一次ANR文件的导出

1.老版Android系统 anr的导出

在项目目录下或app下运行命令:

 adb pull data/anr/traces.txt

测试了华为p7(Android 5.1.1)和荣耀v10(Android 9),发现都能正常导出。但是遇到华为mate10、mate10 pro 一直都导出失败。

adb: error: failed to stat remote object 'data/anr/traces.txt': No such file or directory

查了些资料,发现厂商有对这块做优化。以前anr一直放在traces文件中,多次出现有覆盖的问题。高版本厂商做了优化,会根据时间戳分别生成一个文件,打包导出。

2.高版本导出方案

1.查看是否存在traces。

adb shell    
cd data/anr
ls -a      //列出所有文件

当前anr文件列表这时尝试用命令导出:

 D:\code\githup\AndroidReView\app>adb pull data/anr/anr_2019-01-30-13-35-18-005
adb: error: failed to copy 'data/anr/anr_2019-01-30-13-35-18-005' to '.\anr_2019-01-30-13-35-18-005': remote open failed: Permission denied

提示权限拒绝,我们无法想之前一样导出anr目录下某个文件。

解决方案:

adb bugreport

bugreport日志信息
此命令会导出一个zip压缩包,解压后在FS/data/anr目录下就可以看到traces文件了。

  • adb bugreport 命令也可以指定文件导出目录,如导出到桌面:adb bugreport C:\Users\Nxin\Desktop ;不指定时会在当前命令行对应目录下导出压缩包。

3.ANR的缘由

产生anr的情况有:
(1)Activity按键或触摸事件在特定时间内无响应(5s)
(2)Service在特定时间内无法处理完成(20s)
(3)BroadcastReceiver在特定时间内无法处理完成(10s)

开发中主要多发在第一种情况,在主线程做了耗时操作,导致堵塞,然后触发点击事件,无法及时响应,开发中复杂的业务可以转到子线程去实现,主线程尽量做UI操作。

提供一个anr的调试代码:

@Override
    public void onClick(View v) {
        int i = v.getId();
        if (i == R.id.btn_one) {
            L.i(initTag(), "开始阻塞主线程");
            try {
                Thread.sleep(15000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            L.i(initTag(), "结束阻塞主线程");

        } else if (i == R.id.btn_two) {
            L.i(initTag(), "点击第二个按钮");
        }
    }

点击第一个按钮后,立刻多次触发第二个按钮,就会有anr了。

<think>嗯,用户让我帮忙设计一个Android软件的发版履历表格。首先,我需要理解用户的需求。发版履历表格通常用于录每次版本更新的详细信息,方便团队跟踪和管理版本迭代。用户可能是一个Android开发者或者项目经理,需要这样的表格来维护项目历史。 接下来,我要考虑表格需要包含哪些关键信息。一般来说,版本号、发布日期、更新类型(比如新功能、修复、优化)、更新内容描述、负责人、测试状态、备注这些字段都是必要的。用户可能还需要区分不同的环境,比如测试版和生产版,或者录对应的APK文件名和下载链接,方便查找。 然后,要确定每个字段的具体细节。例如,版本号应该遵循语义化版本控制,像1.2.3这样的格式。更新类型可以用标签来分类,这样一目了然。更新内容需要简明扼要,但也要足够详细。负责人和测试状态有助于责任追踪和质量控制。备注部分可以放一些额外信息,比如依赖的SDK变更或者已知问题。 用户可能还希望表格能够支持筛选和排序,比如按版本号降序排列,或者按更新类型筛选。另外,是否需要下载链接或者文件路径,这取决于团队如何管理APK文件。如果是内部使用,可能直接放文件服务器路径;如果是外部发布,可能需要短链接。 还要考虑扩展性,比如未来可能需要添加更多字段,所以设计时要留有余地。用户可能有特定的需求,比如关联的JIRA任务ID或者Git提交哈希,这些可以作为备注或单独字段。最后,建议用户使用在线文档工具,比如Google Sheets或Airtable,这样方便多人协作和实时更新。 需要确保LaTeX格式正确,比如表格中的数学表达式用$...$,独立公式用$$...$$。同时用中文回答,结构清晰,分步骤说明。可能用户没有提到的深层需求是希望表格易于维护和查询,所以在设计时要考虑到易用性和可扩展性。</think>以下是一个Android应用发版履历表格设计建议,包含必要字段和扩展项,支持版本追踪与团队协作: ```markdown | 版本号 | 发布日期 | 环境 | 更新类型 | 更新内容描述 | 负责人 | 测试状态 | APK文件名 | 备注 | |--------|------------|--------|---------------|----------------------------------|--------|----------|----------------|----------------------| | 2.1.3 | 2023-08-15 | 生产环境| [新功能][优化]| 1. 新增用户反馈模块✅<br>2. 优化启动速度30%🚀 | 张三 | 已通过✅ | app_v2.1.3.apk | 需同步更新SDK至v5.2 | | 2.1.2 | 2023-08-10 | 测试环境| [修复][安全] | 1. 修复支付漏洞🔒<br>2. 解决ANR问题🐛 | 李四 | 测试中⏳ | app_v2.1.2_test.apk | 需要验证华为机型兼容性 | ``` **字段说明与设计建议**: 1. **版本号规范** - 使用语义化版本控制:`主版本.次版本.修订号`($Version_{format} = Major.Minor.Patch$) - 测试版可添加后缀:`2.1.3-beta` 2. **环境标识**(建议颜色标) - 🟢 生产环境 - 🟡 测试环境 - 🔴 开发环境 3. **更新类型标签** ```markdown [新功能][优化][修复][安全][架构][回滚] ``` 4. **智能扩展功能**(需配合文档工具) - 版本对比功能:$$ \Delta Version = Current_{ver} - Previous_{ver} $$ - 自动生成版本升级说明文档 - 关联Git提交录/JIRA任务 **协作建议**: 1. 使用在线文档工具(如Google Sheets/Airtable)实现: - 实时更新 - 修改历史追溯 - 多维度筛选(按负责人/版本号/更新类型) 2. 添加衍生字段: - 版本存活时长:$$ T_{live} = Release_{date} - Previous_{release} $$ - 热修复标(⭐紧急修复) - 应用市场审核状态 3. 建议配套建立: - 版本回滚应急预案 - 灰度发布录表 - Crash率/ANR率监控数据联动 是否需要我进一步说明某个字段的具体使用场景或提供模板文件导出格式(如Excel/CSV)?
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值