You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 6.0下ATrace_isEnabled始终返回false,如何用systrace捕获函数时序?

解决Android 6.0上systrace无法捕获net_test()时序信息的问题

我来帮你一步步排查和解决这个问题——ATrace_isEnabled()返回false、systrace看不到你的net_test标记,本质是当前没有激活对应的trace监听,或者你的应用/进程没被纳入systrace的追踪范围。

第一步:启用所有ATrace标签(让ATrace_isEnabled()返回true)

Android 6.0中,ATrace的标签默认不是全部开启的,你需要通过adb命令全局启用所有trace标签:

adb shell setprop debug.atrace.tags.enableflags 0xffffffff

这个命令会把所有ATrace的可用标签都打开,之后再运行你的应用,ATrace_isEnabled()应该就会返回true了。

第二步:修改systrace命令,指定追踪你的应用

默认的systrace命令只会捕获系统进程和部分默认的trace类别,不会主动监听你的应用的自定义ATrace section。你需要在命令中添加-a <你的应用包名>参数,明确告诉systrace要追踪你的应用进程:

python systrace.py -t 4 -o mynewtrace.html -a com.your.app.package perf sched gfx

记得把com.your.app.package替换成你实际的应用包名。

第三步:确保Native层正确链接ATrace依赖

因为你是在Native代码中调用ATrace_XXX() API,必须确保你的Native库链接了libandroid.so,否则这些API无法正常工作:

  • 如果用CMakeLists.txt:
    target_link_libraries(你的Native库名称 android)
    
  • 如果用Android.mk:
    LOCAL_LDLIBS += -landroid
    

第四步:确认应用可调试(针对Release版本)

如果你的应用是Release版本,需要确保Manifest中开启了调试属性:

<application android:debuggable="true" ...>
    <!-- 其他配置 -->
</application>

Debug版本默认已经开启,这一步可以跳过。

最后验证流程

  1. 先执行adb shell setprop debug.atrace.tags.enableflags 0xffffffff
  2. 启动你的应用,确保net_test函数会被触发(可以手动操作触发,或者让应用自动调用)
  3. 立刻运行修改后的systrace命令
  4. 等待systrace捕获完成后,打开生成的mynewtrace.html,在搜索框输入net_test,应该就能看到对应的时序块了。

另外注意:Android 6.0的systrace脚本需要用Python 2.7运行,如果你用Python 3可能会出现兼容性问题,建议切换到Python 2.7执行命令。

内容的提问来源于stack exchange,提问作者maofu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:02:08