Android R於近期發佈,針對Android Q BiometricPrompt暴露的一些bug,R中給出了答案。
一起來看看吧
之前我們已經報了BiometricPrompt於Android Q的重要bug,見《BiometricPrompt之四 - BiometricDialogView無法消失》。
首先看視頻:
再看看android R log:
04-18 12:47:53.832 914 914 D BiometricService: Package: com.android.settings Authenticator ID: 0 Modality: 2 Reported Modality: 2 Status: 1
04-18 12:47:53.832 914 914 D BiometricService: Creating auth session. Modality: 2, cookie: 847382688, authenticators: 33023
04-18 12:47:53.836 914 914 V FingerprintService: startAuthentication(com.android.settings)
04-18 12:47:53.836 914 914 V FingerprintService: Returning cookie: 847382688
04-18 12:47:53.837 914 914 D BiometricService: Matched cookie: 847382688, 0 remaining
04-18 12:47:53.837 914 914 V FingerprintService: starting client AuthenticationClientImpl(com.android.settings) targetUserId: 0 currentUserId: 0 cookie: 847382688/847382688
04-18 12:47:53.837 755 861 D [email protected]: BiometricsFingerprint::authenticate(opid, gid)
04-18 12:47:53.965 914 914 W FingerprintService: client com.android.settings is authenticating...
04-18 12:47:53.966 914 914 W Looper : Slow dispatch took 130ms main h=com.android.server.biometrics.BiometricService$1 c=null m=8
04-18 12:47:53.968 2569 2569 D BiometricPrompt/AuthController: showAuthenticationDialog, authenticators: 33023, biometricModality: 2, requireConfirmation: false, operationId: 0
04-18 12:47:53.985 2569 2569 D BiometricPrompt/AuthController: userId: 0 savedState: null mCurrentDialog: null newDialog: com.android.systemui.biometrics.AuthContainerView{5905139 VFE...... .F....I. 0,0-0,0} type: 2
04-18 12:47:54.007 2569 2569 V BiometricPrompt/AuthBiometricView: newState: 1
04-18 12:47:54.019 2569 2569 V BiometricPrompt/AuthBiometricView: Current size: 0 New size: 2
04-18 12:47:54.026 604 2071 E BufferQueueCore: [BiometricPrompt#0](id:25c00000047,api:1,p:2569,c:604) Slot 1 is in mActiveBuffers but has no buffer
04-18 12:47:54.303 2569 2569 V BiometricPrompt/AuthBiometricView: newState: 2
//Menu pressed
04-18 12:48:13.855 2569 2569 W BiometricPrompt/AuthController: ACTION_CLOSE_SYSTEM_DIALOGS received
04-18 12:48:13.865 914 914 V FingerprintService: Stopping client com.android.settings, fromClient: false
04-18 12:48:13.976 755 861 D [email protected]: onError(5)
04-18 12:48:13.977 914 914 W FingerprintService: client com.android.settings is no longer authenticating
04-18 12:48:13.977 914 914 W Looper : Slow dispatch took 113ms main h=com.android.server.biometrics.BiometricServiceBase$H c=com.android.server.biometrics.-$$Lambda$BiometricServiceBase$B1PDNz5plOtQUbeZgXMkI_dh_yQ@5ebc01d m=0
04-18 12:48:13.977 914 914 V FingerprintService: handleError(client=com.android.settings, error = 5)
04-18 12:48:13.977 914 914 V BiometricStats: Error latency: -1
04-18 12:48:13.977 914 914 W BiometricStats: found a negative latency : -1
04-18 12:48:13.978 914 914 V FingerprintService: Done with client: com.android.settings
04-18 12:48:13.978 914 914 D BiometricService: handleOnError: 5 cookie: 847382688
04-18 12:48:13.979 914 914 E BiometricService: Unknown cookie: 847382688
04-18 12:48:14.244 2569 2569 D BiometricPrompt/AuthContainerView: pendingCallback: null
04-18 12:48:14.296 914 1016 W InputDispatcher: channel '18f1ba9 BiometricPrompt (server)' ~ Consumer closed input channel or an error occurred. events=0x9
04-18 12:48:14.296 914 1016 E InputDispatcher: channel '18f1ba9 BiometricPrompt (server)' ~ Channel is unrecoverably broken and will be disposed!
04-18 12:48:14.306 914 1663 W InputDispatcher: Attempted to unregister already unregistered input channel '18f1ba9 BiometricPrompt (server)'
指紋驗證成功的log:
指紋驗證成功的log:
04-18 12:47:48.626 755 907 D [email protected]: onAcquired(0)
04-18 12:47:48.626 755 907 D [email protected]: onAcquired(6)
04-18 12:47:48.628 914 914 V FingerprintService: Acquired: 0 0
04-18 12:47:48.633 914 914 V FingerprintService: Acquired: 6 2
04-18 12:47:48.634 914 914 W FingerprintManager: Invalid acquired message: 6, 2
04-18 12:47:48.634 914 914 W BiometricService: Ignoring null message: 0
04-18 12:47:48.635 914 914 W BiometricService: Ignoring null message: 6
04-18 12:47:48.700 755 907 D [email protected]: onAcquired(0)
04-18 12:47:48.700 755 907 D [email protected]: onAuthenticated(fid=1153064581, gid=0)
04-18 12:47:48.701 914 914 V FingerprintService: Acquired: 0 0
04-18 12:47:48.702 914 914 V BiometricStats: Authentication latency: -1
04-18 12:47:48.702 914 914 W BiometricStats: found a negative latency : -1
04-18 12:47:48.703 914 914 V FingerprintService: onAuthenticated(true), ID:1153064581, Owner: com.android.settings, isBP: true, listener: com.android.server.biometrics.fingerprint.FingerprintService$BiometricPromptServiceListenerImpl@4317d4, requireConfirmation: false, user: 0
04-18 12:47:48.709 914 914 V FingerprintService: Done with client: com.android.settings
04-18 12:47:48.709 914 914 W BiometricService: Ignoring null message: 0
04-18 12:47:48.715 2569 2569 V BiometricPrompt/AuthBiometricView: newState: 6
04-18 12:47:48.767 755 907 I chatty : uid=1000(system) [email protected] identical 1 line
04-18 12:47:48.948 755 907 D [email protected]: onAcquired(6)
04-18 12:47:49.116 2569 2569 D BiometricPrompt/AuthContainerView: pendingCallback: 4
04-18 12:47:49.117 2569 2569 D BiometricPrompt/AuthController: onDialogDismissed: 4
04-18 12:47:49.146 914 1016 W InputDispatcher: channel '68b0a19 BiometricPrompt (server)' ~ Consumer closed input channel or an error occurred. events=0x9
04-18 12:47:49.146 914 1016 E InputDispatcher: channel '68b0a19 BiometricPrompt (server)' ~ Channel is unrecoverably broken and will be disposed!
04-18 12:47:49.146 914 2439 W InputDispatcher: Attempted to unregister already unregistered input channel '68b0a19 BiometricPrompt (server)'
再看看源碼:
lenovo@HZCS13:~/coding/r/frameworks/base/packages/SystemUI$ ll src/com/android/systemui/biometrics/
total 164
drwxr-xr-x 2 lenovo lenov 4096 Apr 18 18:18 ./
drwxr-xr-x 49 lenovo lenov 4096 Apr 18 18:18 ../
-rw-r--r-- 1 lenovo lenov 8325 Apr 18 18:18 AuthBiometricFaceView.java
-rw-r--r-- 1 lenovo lenov 4453 Apr 18 18:18 AuthBiometricFingerprintView.java
-rw-r--r-- 1 lenovo lenov 29073 Apr 18 18:18 AuthBiometricView.java
-rw-r--r-- 1 lenovo lenov 23530 Apr 18 18:18 AuthContainerView.java
-rw-r--r-- 1 lenovo lenov 18094 Apr 18 18:18 AuthController.java
-rw-r--r-- 1 lenovo lenov 4519 Apr 18 18:18 AuthCredentialPasswordView.java
-rw-r--r-- 1 lenovo lenov 3483 Apr 18 18:18 AuthCredentialPatternView.java
-rw-r--r-- 1 lenovo lenov 18594 Apr 18 18:18 AuthCredentialView.java
-rw-r--r-- 1 lenovo lenov 2219 Apr 18 18:18 AuthDialogCallback.java
-rw-r--r-- 1 lenovo lenov 3964 Apr 18 18:18 AuthDialog.java
-rw-r--r-- 1 lenovo lenov 6547 Apr 18 18:18 AuthPanelController.java
-rw-r--r-- 1 lenovo lenov 115 Apr 18 18:18 OWNERS
-rw-r--r-- 1 lenovo lenov 4316 Apr 18 18:18 Utils.java
有代碼可見,框架在SystemUI部分也給出了一些調整,不再叫BiometricDialogView, 而改成了AuthBiometricView。