You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
合作与生态
支持与服务
开发者
了解我们
导航

启动分析

更新时间:2022.08.31 11:06:43

启动分析支持配置启动次数和其他平台相关参数,提供图形图和图表显示、支持启动时长计算等功能。

目标

  • 测试App的启动时间
  • 后续版本会进一步提供对启动过程的归因分析(预计在6月后)

使用说明

Android和iOS的使用方法基本一致,区别在于Android需额外提供Launcher,iOS的测试结果除了启动总时长外还包含了分阶段时长。

通用

  • 选择设备 > 选择App > 设置启动次数 > 开启测试
  • 顶部状态栏:导入 & 导出原始数据,用于恢复数据再次分析
    alt
  • 右侧功能按钮:导出Excel数据,用于数据分析
    alt

Android

alt

配置Launcher: 输入全类名。如果Launcher类的包名和app包名一致,也可以如图只输入类名(以「.」开头)。也可以导入apk文件,软件会自动解析出Launcher。
Launcher:App启动后的首个Activity页面。

原理说明:
通过 adb am start 统计的 TotalTime

iOS

alt

数据采集

复用Instruments中App Launch模板数据,绕开Debug证书限制,采集冷启动各个阶段耗时情况。

使用范围

  • >=iOS12系统中运行的任意包
  • 可用于竞品分析

功能设置

  • 禁用dyld3闭包(启动闭包将影响dyld init的耗时,导致数据产生波动)

  • 启动后等待时间(启动后等待一段时间后kill app)规避如手淘连续启动crash后进入安全模式的Case

  • 测试周期(单次采集时长,选择性增加采样周期,避免App误判为连续启动crash而进入安全模式)

  • 自定义结束点,默认使用App第一帧渲染时刻作为启动结束点(与Apple统计启动耗时规则一致),可通过OSLog自定义结束点,配置中按#分隔,如app#launch.event#launch.end

    let	log	=	OSLog(subsystem:	"app",	category:	"launch.event")
    os_log(OSLogType.info,	log:	log,	"launch.end")
    #import	<os/log.h>
    os_log_t	log	=	os_log_create("app",	"launch.event");
    os_log_with_type(log,	OS_LOG_TYPE_INFO,	"launch.end");

数据解释

  • Total:启动整体耗时(如配置自定义结束点,包含结束点前所有耗时)
  • Process Prepare:进程创建的准备工作耗时
  • System Interface (dyld init):dyld的初始化工作耗时,如加载Macho、验证签名、load image、fixup address等
  • Static Runtime (+load):静态变量初始化工作耗时,如+load函数调用
  • System Init:iOS12系统中对前几项的总称
  • UIKit Initialization (run loop):UIKit初始化耗时,如Runloop
  • UIKit Scene Creat (UIApplication init):UIKit除FinishLaunching的耗时,可能有多个类似阶段
  • WillFinishLaunchingWithOptions:该函数耗时
  • DidFinishLaunchingWithOptions:该函数耗时
  • Initial Frame Render:第一帧渲染耗时

异常解释

  1. 无限启动且无数据

    • 启动分析采集的kdebug数据,如果App开启反调试会导致数据无法采集到结束点,该能力将重复启动直到采集到有效数据,目前业内大部分App未开启反调试
    • 设置的采样周期过短,导致启动结束点时机未触发就提前终止一次测试,可在右侧设置面板修改超时时间
    • 自定义结束点配置错误,请检查打log代码
  2. 启动测试自动停止

    • 一个测试周期内只会启动一次,如当次采集未获取到启动结束点,将自动重试
    • 连续3次启动未采集到启动结束点会自动结束测试