Project Icon

btrace

高效Android应用性能分析工具

btrace是一款开源的Android应用性能分析工具。它支持Windows平台,采用Java脚本语言,无需Python环境。通过优化数据处理,btrace大幅降低了内存占用和性能损耗。新增的渲染、Binder和线程创建等监控功能,为开发者提供全面的性能分析。btrace集成简单,配置灵活,是Android应用性能优化的有力工具。

btrace

英文版README

重大更新

  1. 用户体验: 我们现在支持Windows!不再依赖Python 2.7和存储权限!脚本语言已更改为Java,将脚本工具的可用性问题造成的中断几乎降至零!我们还切换到PB协议来处理跟踪文件,使存储需求减少70%,打开跟踪文件的速度提升7倍。
  2. 性能体验: 重写了方法跟踪收集逻辑,将数据从字符串转换为整数,内存使用减少80%。数据存储改为mmap模式,优化了无锁队列逻辑,提供了精确的插桩策略,在数百万方法插桩的情况下,进一步将性能损失降低到15%!
  3. 监控数据: 新增4种数据监控能力,包括渲染、Binder、线程创建以及Wait/Notify/Park/Unpark的详细数据!

集成

项目配置

在项目根目录的build.gradle文件中添加rhea-gradle-plugin作为依赖:

buildscript {
    dependencies {
        classpath 'com.bytedance.btrace:rhea-gradle-plugin:2.0.3-rc02'
    }
}

然后,在app/build.gradle文件中应用以下插件和依赖。

dependencies {
    // rheatrace核心库
    implementation "com.bytedance.btrace:rhea-core:2.0.3-rc02"
}
...
apply plugin: 'com.bytedance.rhea-trace'
...
rheaTrace {
   compilation {
      traceFilterFilePath = "${project.rootDir}/trace-filter/traceFilter.txt"
      needPackageWithMethodMap = true
      applyMethodMappingFilePath = ""
   }
}

插件配置

RheaTrace 2.0简化了编译插件配置,只需要一个编译配置来控制编译期间的行为。RheaTrace 1.0中的运行时配置已被弃用,但为了确保升级时的兼容性,我们仍然保留了运行时参数配置,尽管它不会影响行为。相反,在RheaTrace 2.0中,动态配置是通过脚本中的命令行参数实现的,这将在后面详细描述。

参数默认值描述
traceFilterFilePathnull此文件决定哪些方法需要被插桩,其用法与RheaTrace 1.0一致。请参考:RheaTrace Gradle插件配置
applyMethodMappingFilePathnull可以通过指定上一次编译输出的methodMapping.txt文件路径来指定设备的方法ID,以确保多次编译的方法ID一致。
needPackageWithMethodMaptrue是否将methodMapping.txt文件打包到apk内。

使用方法

要使用RheaTrace 2.0,请按以下步骤操作:

  1. 确保你的电脑已集成adb和Java环境。
  2. 将手机连接到电脑,并确保adb devices能识别到。
  3. 在手机上安装集成了RheaTrace 2.0的APK。
  4. 从下方的"脚本管理"下载最新脚本到电脑。
  5. 在电脑脚本所在目录执行以下命令。
java -jar rhea-trace-shell.jar -a ${你的应用包名} -t 10 -o output.pb -r rhea.all sched -fullClassName
  1. 可以通过 https://ui.perfetto.dev/ 分析跟踪文件。

脚本管理

版本发布日期下载发布说明
2.0.02023-06-24rhea-trace-shell-2.0.0.jar2.0.0 首次发布

参数说明

下表描述了 RheaTrace 2.0 命令行参数:

必需参数

参数默认值描述
-a $applicationName不适用指定您的应用程序包名

可选参数

参数默认值描述
-o $outputPath不适用指定保存跟踪文件的路径。默认值根据时间戳自动生成。
-t $timeInSecond5指定跟踪时间长度,单位为秒。
-mode $mode根据设备指定跟踪模式。目前支持两种模式:1. perfetto:8.1及以上系统的默认模式,允许收集应用程序函数以及系统atrace和ftrace的跟踪。2. simple:8.1以下系统的默认模式,允许收集应用程序函数以及系统atrace的跟踪。
-maxAppTraceBufferSize $size500000000指定跟踪收集期间使用的缓冲区大小,单位为字节。通常不需要配置此参数,除非遇到类似以下提示:MaxAppTraceBufferSize太小。预期100515704 实际100000000。请在命令中添加-maxAppTraceBufferSize 100515704注意:maxAppTraceBufferSize仅在应用程序启动后的第一次跟踪中生效。
-threshold $ns0指定跟踪收集期间的函数时间阈值,单位为纳秒。此参数可在跟踪时间较长时减小跟踪文件的大小。
-s $serial指定通过adb连接的设备。
-mainThreadOnly不适用仅跟踪主线程。
-r自动重启应用程序以捕获启动跟踪。
-fullClassName启用跟踪信息的包名。
-deeplink $deeplink不适用指定深链接。
rhea.binder启用binder信息增强。
rhea.render启用渲染监控功能。
rhea.io启用I/O监控功能。
rhea.thread启用线程创建监控功能。
rhea.block启用park/unpark/wait/notify监控功能。
rhea.all启用上述所有RheaTrace增强监控功能。
-debug打印调试日志。
--list显示设备支持的类别列表。

技术原理

如果您对RheaTrace 2.0的内部细节感兴趣,可以参考以下文档:RheaTrace 2.0内部原理详解!

已知问题

编号问题建议
1某些自定义ROM可能在获取Perfetto跟踪时遇到失败,错误信息如下:
错误:未找到systrace文件:rheatrace.workspace/systemTrace.trace
提示:您的设备可能不支持perfetto。请尝试使用 -mode simple
1. 尝试重启手机并再次尝试。2. 如果问题未解决,请使用 -mode simple 重试。
2不支持Perfetto的设备(主要是8.1之前的系统)无法收集CPU调度等系统信息。尝试使用 -mode simple。
3如果您使用32位APK,可能会因内存不足错误而导致崩溃。要解决此问题,您可以切换到64位包,或者如果必须使用32位,请尝试通过降低bufferSize和配置方法收集阈值来减少虚拟内存使用。这将允许您收集更长时间的跟踪,而不会使用过多的虚拟内存。
4如果因为methodMapping构建到APK中并依赖于mergeAssets而遇到循环依赖问题您可以关闭内置的methodMapping功能。可以通过在Gradle插件配置中将needPackageWithMethodMap设置为false来实现。但是,如果您需要使用btrace功能,则必须使用-m选项手动提供methodMapping的路径。

反馈

我们在RheaTrace 2.0中进行了大量改进,包括更好的错误提示。可能仍然存在一些情况下提示不够准确或消息不够清晰。如果您遇到任何问题,只需在下面的飞书群中告诉我们,我们会尽最大努力帮助您。我们也非常感谢您提供的任何其他反馈或建议,谢谢!

贡献

贡献指南

许可证

Apache许可证

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号