2022 年我研究安卓性能优化的时候,写过一篇:btrace1.0使用方法 - Wesley’s Blog,现在 brace 进化到 2.0 了,让我们一起来看看如何使用。
具体的接入流程可以看官方文档:
bytedance/btrace: 🔥🔥 btrace(AKA RheaTrace) is a high performance Android trace tool which is based on Perfetto, it support to define custom events automatically during building apk and using bhook to provider more native events like Render/Binder/IO etc.
我这里主要记录一下接入的一些报错问题:
目前最新版本是2.0.3-rc03
项目的gradle版本是7.0.2,gradle plugin是7.0.0
编译报错
org.gradle.workers.WorkerExecutionException: There was a failure while executing work items
at org.gradle.workers.internal.DefaultWorkerExecutor.workerExecutionException(DefaultWorkerExecutor.java:270)
at org.gradle.workers.internal.DefaultWorkerExecutor.await(DefaultWorkerExecutor.java:252)
at com.android.build.gradle.internal.tasks.DexArchiveBuilderTaskDelegate.doProcess(DexArchiveBuilderTaskDelegate.kt:227)
at com.android.build.gradle.internal.tasks.DexArchiveBuilderTask.doTaskAction(DexArchiveBuilderTask.kt:256)
at com.android.build.gradle.internal.tasks.NewIncrementalTask t a s k A c t i o n taskAction taskAction i n l i n e d inlined inlinedrecordTaskAction$1.invoke(BaseTask.kt:66)
at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:51)
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, position: Lcom/xxx/web/CommonHeader;()V, origin: D:\Project\p_dev\app\build\intermediates\transforms\analyticsTrack\Production\release\720.jar:com/xxx/web/CommonHeader.class
需要关注Compilation failed to complete后面的类
如果哪个类报错就可以加入下面的配置,路径"${project.rootDir}/trace-filter/traceFilter.txt"
btrace/GRADLE_CONFIG.MD at master · bytedance/btrace
注意:allowpackage必须先配置,blockpackage必须在其子包下面,可以是类或者包名
[package]
-allowpackage com
-allowpackage org
-allowpackage androidx-blockpackage androidx/exifinterface/media
-blockpackage com/google/android/exoplayer2/ui
-blockpackage com/xxx/web/CommonHeader
-blockpackage org/bouncycastle/jcajce/provider/asymmetric/x509
-blockpackage org/bouncycastle/jcajce/provider/asymmetric/dh
-blockpackage com/nineoldandroids/util
-blockpackage org/bouncycastle/jce/provider/JCEDHPublicKey
# org/bouncycastle/jce/provider/X509CertificateObject
-blockpackage org/bouncycastle/jce/provider
特别注意
如果是windows用户,traceFilter.txt换行符必须改为LF
原因
com/bytedance/rheatrace/plugin/compiling/filter/RheaTraceMethodFilter.kt
parseTraceFilterFile
methodKeepStr.trim { it <= ’ ’ }.replace(“/”, “.”).split(“\n”).toTypedArray()
这里只替换了\n,没有替换\r,会导致解析出来的包名带有\r,导致checkPath失败。
private fun checkPath() {if (allowPackages.isEmpty()) {return}for (blockPath in blockPackages) {var isContain = falsefor (allowPackage in allowPackages) {if (blockPath == allowPackage) {RheaLog.e(TAG, "blockpackage cannot be equal to allowpackage:%s", blockPath)}if (blockPath.startsWith(allowPackage)) {isContain = truebreak}}if (!isContain) {throw GradleException("allowpackage do not contains $blockPath")}}
}
参考
BTrace和Perfetto如何分析性能手把手教你使用BTrace和Perfetto分析性能 高级android开发工 - 掘金
Maven Repository: com.bytedance.btrace » rhea-gradle-plugin