指纹解锁流程分析

640?wx_fmt=gif

640?wx_fmt=gif

极力推荐Android 开发大总结文章:欢迎收藏

640?wx_fmt=other

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

1.解锁指纹,发送指纹中断Log

640?wx_fmt=other

1. 解锁指纹,发送指纹中断Log

kernel log中可以查看指纹发送的中断log信息,信息如下:

    Line 1747: 737[03-22 16:04:05.934] <4>[ 1206.056374] c0   174 <blestech_fp>[bf_eint_handler:785]++++irq_handler netlink send+++++,1,0
    Line 1748: 738[03-22 16:04:05.934] <4>[ 1206.056392] c0   174 <blestech_fp>[bf_send_netlink_msg:665]enter, send command 102
    Line 1749: 739[03-22 16:04:05.934] <4>[ 1206.056445] c0   174 <blestech_fp>[bf_send_netlink_msg:707]send done, data length is 32
    Line 1750: 740[03-22 16:04:05.934] <4>[ 1206.056458] c0   174 <blestech_fp>[bf_eint_handler:794]-----irq_handler netlink -----
    Line 1762: 752[03-22 16:04:05.935] <4>[ 1206.057683] c1   612 <blestech_fp>[bf_open:1023] Success to open device.
    Line 1763: 753[03-22 16:04:05.935] <4>[ 1206.057718] c1   612 <blestech_fp>[bf_ioctl:843]BF_IOCTL_ENABLE_INTERRUPT:  command,0

2. 认证指纹,计算指纹耗时

指纹解锁耗时计算16:04:05.934)到指纹认证成功(16:04:06.003)。指纹耗时=1003-934 = 96ms

system log中可以看到 指纹认证(onAuthenticated),以及认证成功(onAuthenticationSucceeded )

//指纹认证
00F359 03-22 16:04:06.002   715   715 V FingerprintService: onAuthenticated(owner=com.android.systemui, id=111, gp=0)
//指纹认证成功
00F35A 03-22 16:04:06.003   715   715 V FingerprintService:  onAuthenticationSucceeded by keyguard,may need send launchapp msg
00F35C 03-22 16:04:06.007   715   715 V FingerprintService: Done with client: com.android.systemui

3. 指纹认证成功,keyguard 响应解锁屏流程

指纹 认证成功后,system log 中可以查看到以下信息,Keyguard 开始解锁流程,流程如下:

00F35C 03-22 16:04:06.007   715   715 V FingerprintService: Done with client: com.android.systemui
// SystemUI 唤醒CPU
00F363 03-22 16:04:06.022   715  4341 I PowerManagerService: Waking up from sleep due tocom.android.systemui android.policy:FINGERPRINT (uid=10040 reason=android.policy:FINGERPRINT)...
00F364 03-22 16:04:06.022   715   715 W UsageStatsService: Event reported without a package name
00F36D 03-22 16:04:06.032   715   740 I DisplayPowerController: Blocking screen on until initial contents have been drawn.
//开始准备打开屏幕,进行唤醒操作
00F36E 03-22 16:04:06.032   715   740 I WindowManager: Screen turning on...
00F370 03-22 16:04:06.044   715   715 I WindowManager: Started waking up...
00F370 03-22 16:04:06.044   715   715 I WindowManager: Started waking up...
00F381 03-22 16:04:06.046   715  4341 D PowerManagerService: userActivityNoUpdateLocked: Scene not defined, event:0
00F383 03-22 16:04:06.047   715   738 I DisplayManagerService: Display device changed state: "Built-in Screen", ON
//广播队列添加亮屏广播
00F386 03-22 16:04:06.048   715   715 D BroadcastQueue: Add broadcast <BroadcastRecord{9e27478 u-1 android.intent.action.SCREEN_ON}> into [ordered | foreground], pending size 0

main logKeyguardViewMediator 这个调节器类开始进行亮屏时候是否显示锁屏界面等流程。notifyScreenOnkeyguardDone() 、handleHidekeyguardGoingAway


//keyguard 调节器通知screen on
00F372 03-22 16:04:06.045  1351  9065 D KeyguardViewMediator: notifyScreenOn
00F373 03-22 16:04:06.045   374   374 D PowerHAL: Enter power_set_interactive: 1
00F374 03-22 16:04:06.045  1351  9065 D KeyguardViewMediator: onStartedWakingUp, seq = 34
00F375 03-22 16:04:06.045  1351  9065 D KeyguardViewMediator: notifyStartedWakingUp
00F37D 03-22 16:04:06.046   374   374 D PowerHAL: ###Exit screen_off scene end###
00F37E 03-22 16:04:06.046   374   374 D PowerHAL: Exit power_set_interactive: 1
//keyguard 调节器执行完成
00F37F 03-22 16:04:06.046  1351  1351 D KeyguardViewMediator: keyguardDone()
00F3AE 03-22 16:04:06.057  1351  1351 D KeyguardViewMediator: handleNotifyScreenTurningOn
00F3BC 03-22 16:04:06.061  1351  1351 D KeyguardViewMediator: handleNotifyWakingUp
00F3BF 03-22 16:04:06.061  1351  1351 D KeyguardUpdateMonitor: FaceLock handleStartedWakingUp
00F458 03-22 16:04:06.077  1351  1351 V KeyguardUpdateMonitor: stopListeningForFaceLock()
//keyguard 结束并因此,开始进入Launcher
00F459 03-22 16:04:06.077  1351  1351 D KeyguardViewMediator: handleKeyguardDone
00F45A 03-22 16:04:06.077  1351  1351 D KeyguardViewMediator: handleHide
//keyguardGoingAway  等待下一个界面绘制完成
00F45B 03-22 16:04:06.077  1351  1351 D KeyguardViewMediator: keyguardGoingAway

4.keyguard 解锁结束,开启动Launcher至绘制工作

event log中可以看到keyguard 解锁结束后开始启动Launcher

//开启启动Launcher
00F466 03-22 16:04:06.079   715  2015 I am_set_resumed_activity: [0,com.android.launcher3/com.android.searchlauncher.SearchLauncher,resumeTopActivityInnerLocked]
00F48F 03-22 16:04:06.085   715  2015 I am_resume_activity: [0,77745185,3,com.android.launcher3/com.android.searchlauncher.SearchLauncher]

main log中可以看到Launcher 绘制完成。

//SurfaceFlinger 完成Launcher 绘制
00F54A 03-22 16:04:06.534  1351  1351 D KeyguardUpdateMonitor: handleBatteryUpdate
00F54D 03-22 16:04:06.535   380   380 D SurfaceFlinger: duplicate layer name: changing com.android.launcher3/com.android.searchlauncher.SearchLauncher to com.android.launcher3/com.android.searchlauncher.SearchLauncher#1

Launcher 绘制耗时计算Launcher绘制耗时计算=绘制完成(16:04:06.535)- 开始启动(16:04:06.079)=458ms(535ms-79ms)

5.Launcher 绘制完成,隐藏Keyguard

system log中可以看到Launcher 绘制完成后,keyguard收到回调,隐藏keygaurd

//keyguard收到回调,隐藏keygaurd
00F577 03-22 16:04:06.588  1351  1351 D KeyguardViewMediator: handleStartKeyguardExitAnimation startTime=1206710 fadeoutDuration=0
00F578 03-22 16:04:06.588  1351  1351 D KeyguardViewMediator: isSimPinOrPuk =false
00F579 03-22 16:04:06.588   715  6388 D WindowManager: mKeyguardDelegate.ShowListener.onDrawn.
// KeyguardDrawComplete 结束后并隐藏
00F57A 03-22 16:04:06.589   715   730 W WindowManager: Setting mKeyguardDrawComplete
00F592 03-22 16:04:06.604  1351  1351 V KeyguardDisplayManager: hide
//窗口焦点在 Launcher上
00F5BE 03-22 16:04:06.621   715  1590 D WindowManager: Input focus has changed to Window{3393c4a u0 com.android.launcher3/com.android.searchlauncher.SearchLauncher}
0

6.电量屏幕结束,统计亮屏时间

system log中搜索关键字 Screen on took, 即可查看总亮屏耗时。

总亮屏耗时798ms)= 亮屏结束Finished waking up(16:04:06.820)- 屏幕开始打开Screen turning on...(03-22 16:04:06.032)

// 绘制结束,显示所有窗口
00F68B 03-22 16:04:06.816   715   738 I WindowManager: All windows ready for display!
00F68C 03-22 16:04:06.817   715   730 W WindowManager: Setting mWindowManagerDrawComplete
00F692 03-22 16:04:06.819   715   730 D WindowManager: finishScreenTurningOn: mAwake=true, mScreenOnEarly=true, mScreenOnFully=false, mKeyguardDrawComplete=true, mWindowManagerDrawComplete=true
//结束亮屏流程,统计 亮屏时间
00F693 03-22 16:04:06.819   715   730 I WindowManager: Finished screen turning on...
00F695 03-22 16:04:06.819   715   740 I DisplayPowerController: Unblocked screen on after 787 ms
00F69A 03-22 16:04:06.820   715   740 W PowerManagerService: Screen on took 798 ms(now:1206942 mLastWakeTime:1206144)
//结束wake up 流程
00F69B 03-22 16:04:06.821   715   715 I WindowManager: Finished waking up...

640?wx_fmt=other

640?wx_fmt=other

长按识别二维码,领福利

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

640?wx_fmt=other

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

640?wx_fmt=other

小礼物走一走,来简书关注我

<think>好的,我现在需要帮助用户了解如何通过Perfetto分析熄屏指纹解锁流程,确定开始和结束的节点。首先,我得回忆一下Perfetto的基本功能和界面结构。Perfetto是Android的性能分析工具,可以记录系统级的跟踪数据,包括CPU、线程、系统服务等信息。 用户的问题是关于熄屏状态下的指纹解锁流程。首先,我应该考虑整个解锁流程涉及哪些系统组件。通常,这可能包括指纹服务(FingerprintService)、生物识别管理器(BiometricManager)、相关的硬件抽象层(HAL)、以及SurfaceFlinger等显示相关的服务。 接下来,用户想知道在Perfetto跟踪中哪里是流程的开始和结束。开始可能是指用户触摸指纹传感器的时刻,而结束可能是解锁成功,界面跳转到主屏幕或锁屏界面消失。不过,具体在Perfetto中如何标识这些事件呢? 我需要考虑Perfetto中的跟踪事件。Android系统中有很多内置的跟踪点,特别是在System Tracing中。例如,系统服务可能会在关键方法添加Trace标记,这些会出现在Perfetto的跟踪结果中。对于指纹解锁,可能相关的跟踪点包括: 1. FingerprintService处理认证请求的事件。 2. 生物识别认证的生命周期,如onAuthenticationSucceeded。 3. 显示相关的变更,比如屏幕亮起或界面切换。 开始点可能是在指纹传感器检测到触摸时,系统触发认证流程,这时候FingerprintService会记录一个事件,比如“handleAuthentication”或者类似的。结束点可能是认证成功后,系统发送解锁广播,或者启动器Activity被带到前台,这时候可能会有ActivityManager相关的跟踪事件,比如“activityResumed”或“unlockScreen”。 另外,用户提到的是熄屏状态,所以需要关注屏幕处于关闭状态下的处理流程。这时候,指纹模块可能处于低功耗模式,当触摸传感器时,会唤醒相关服务,开始认证流程。在Perfetto中,可能有电源管理相关的事件,比如传感器被激活,或者CPU唤醒锁(WakeLock)被获取和释放。 为了验证这些,我应该建议用户在进行跟踪时,确保启用相关的跟踪类别,比如“Android System Trace”中的“Fingerprint”和“ActivityManager”选项。此外,用户需要实际执行一次熄屏指纹解锁操作,同时记录Perfetto跟踪文件,然后分析这段时间内的系统事件。 在分析跟踪结果时,用户应该先找到指纹认证相关的线程或进程,比如system_server进程中的FingerprintService相关线程。查找认证开始的事件,可能是方法调用如onAuthenticate,或者类似名称的Trace标记。结束点可能是认证成功后的回调事件,比如onAuthenticationSucceeded,随后触发解锁,如KeyguardViewMediator处理解锁,或者启动主界面。 同时,注意时间线上的相关性,比如认证成功后,是否有ActivityManager启动主Activity,或者WindowManager切换屏幕状态的事件。这些事件的时间顺序可以帮助确定解锁流程的结束。 可能遇到的困难是跟踪点名称可能因Android版本或厂商定制而有所不同。例如,某些厂商可能自定义了指纹服务的实现,跟踪事件名称可能不一致。这时候,用户可能需要查阅设备的源代码或文档,或者通过反复测试来确定关键节点。 总结步骤应该是: 1. 记录Perfetto跟踪,确保启用相关类别。 2. 执行熄屏指纹解锁操作。 3. 在跟踪结果中定位时间范围。 4. 搜索指纹服务相关的事件,找到认证开始和结束的标记。 5. 结合其他系统事件(如ActivityManager、WindowManager)确认解锁完成。 另外,可能需要指导用户如何过滤和搜索跟踪数据,比如使用Perfetto的查询功能,查找关键词如“fingerprint”、“authentication”、“keyguard”等。 最后,提醒用户注意时间戳,确保开始和结束事件在合理的时间范围内,排除无关事件的干扰。</think>通过Perfetto分析熄屏指纹解锁流程时,需结合系统跟踪事件定位关键节点。以下是具体步骤和关键点: --- ### **1. 跟踪记录准备** - **启用跟踪类别**:在Perfetto中勾选: - `Android System Trace` → `Fingerprint` - `Android System Trace` → `ActivityManager` - `Android System Trace` → `WindowManager` - `Android Kernel` → `CPU Scheduling`(观察唤醒锁) - **操作流程**: 1. 开始录制Perfetto跟踪。 2. 让设备保持熄屏状态,触发指纹解锁。 3. 解锁成功后停止录制。 --- ### **2. 定位关键节点** #### **起点(认证开始)** - **指纹传感器激活**: - 搜索 `fingerprint` 相关事件,如: - `FingerprintService#onAuthenticate`(认证请求入口) - `BiometricService#startAuthentication`(生物识别服务调用) - 观察时间线中的传感器唤醒事件(如 `sensor_wakeup`)。 - **硬件交互**: - 查看 `HAL层` 日志(如 `vendor.qti.hardware.fingerprint` 相关线程),定位 `hal_process_fido` 或 `hal_authenticate` 等底层调用。 #### **终点(解锁完成)** - **认证成功回调**: - 查找 `FingerprintService#onAuthenticationSucceeded` 或 `BiometricPrompt#onSucceeded` 事件。 - **系统响应**: - `KeyguardViewMediator#handleKeyguardDone`(锁屏关闭) - `ActivityTaskManager#activityResumed`(主界面启动) - `WindowManager#screenTurnedOn`(屏幕亮起事件) --- ### **3. 典型事件流示例** ```plaintext |-- FingerprintService#onAuthenticate ← 起点:认证请求 | |-- HAL层认证处理(如 hal_authenticate) | |-- onAuthenticationSucceeded ← 认证成功 | |-- KeyguardUpdateMonitor#onAuthenticationSucceeded | |-- KeyguardViewMediator#handleKeyguardDone | |-- WindowManager#performEnableScreen | |-- ActivityManager#startHomeActivity ← 终点:主界面启动 ``` --- ### **4. 辅助分析技巧** - **时间线缩放**:定位解锁操作前后的CPU唤醒和线程活动高峰。 - **WakeLock分析**:观察 `PowerManagerService.WakeLocks` 中 `SCREEN_BRIGHT_WAKE_LOCK` 的获取/释放,对应屏幕点亮。 - **过滤关键词**:搜索 `auth`、`keyguard`、`screen`、`fingerprint`。 --- ### **5. 注意事项** - **厂商差异**:不同设备的指纹服务实现可能不同(如 `QFPService` 是高通平台特有)。 - **系统版本**:Android 12+ 使用 `BiometricManager`,旧版本可能直接调用 `FingerprintService`。 通过上述方法,可清晰定位熄屏指纹解锁的起点(认证请求)和终点(主界面启动)。实际分析时需结合设备日志和代码逻辑进一步验证。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值