前面已经写过一个帖子-《Android R Setupwizard无指纹、人脸录入》发现,这个无异于开了个定制值,加入某项目中共分支不同varint有FP设备,而另外的又没有。
这时候合理做法应该是针对不同varint进行overlay。
如此,一旦未定制,将在三方canAuthenticate()得到反馈。
但是如此,定制未免太过于麻烦,一旦varient多样起来。
如果默认定制成common,有指纹呢?
会怎样?
以Settings WIFI ap share启动一次生物识别弹窗为例。
1.正常情况log。
06-21 20:34:51.533 902 902 D BiometricService: Package: com.android.settings Authenticator ID: 0 Modality: 2 Reported Modality: 2 Status: 1
06-21 20:34:51.533 902 902 D BiometricService: Creating auth session. Modality: 2, cookie: 829850487, authenticators: 33023 // //BIOMETRIC_WEAK & DEVICE_CREDENTIAL
06-21 20:34:51.534 794 820 I focaltech:hal:proxy: [ 138]:fingerprint_get_authenticator_id(dev = 0x733f63db10).
06-21 20:34:51.547 902 902 V FingerprintService: startAuthentication(com.android.settings)
06-21 20:34:51.547 902 902 V FingerprintService: Returning cookie: 829850487
06-21 20:34:51.548 902 902 D BiometricService: Matched cookie: 829850487, 0 remaining
06-21 20:34:51.548 902 902 V FingerprintService: starting client AuthenticationClientImpl(com.android.settings) targetUserId: 0 currentUserId: 0 cookie: 829850487/829850487
06-21 20:34:51.549 794 820 D android.hardware.biometrics.fingerprint@2.1-service: BiometricsFingerprint::authenticate(opid, gid)
06-21 20:34:51.549 794 820 I focaltech:hal:proxy: [ 288]:fingerprint_authenticate(dev = 0x733f63db10, operation_id = 0x0, gid = 0).
06-21 20:34:51.574 902 902 W FingerprintService: client com.android.settings is authenticating...
06-21 20:34:51.576 1127 1127 D BiometricPrompt/AuthController: showAuthenticationDialog, authenticators: 33023, biometricModality: 2, requireConfirmation: false, operationId: 0
06-21 20:34:51.607 1127 1127 D BiometricPrompt/AuthController: userId: 0 savedState: null mCurrentDialog: null newDialog: com.android.systemui.biometrics.AuthContainerView{198ed15 VFE...... .F....I. 0,0-0,0} type: 2
06-21 20:34:51.640 1127 1127 V BiometricPrompt/AuthBiometricView: newState: 1
06-21 20:34:51.661 1127 1127 V BiometricPrompt/AuthBiometricView: Current size: 0 New size: 2
06-21 20:34:51.923 1127 1127 V BiometricPrompt/AuthBiometricView: newState: 2
06-21 20:34:54.791 794 887 D android.hardware.biometrics.fingerprint@2.1-service: onAcquired(0)
06-21 20:34:54.791 794 887 D android.hardware.biometrics.fingerprint@2.1-service: onAuthenticated(fid=76553760, gid=0)
06-21 20:34:54.792 902 902 V FingerprintService: Acquired: 0 0
06-21 20:34:54.793 902 902 V BiometricStats: Authentication latency: -1
06-21 20:34:54.793 902 902 W BiometricStats: found a negative latency : -1
06-21 20:34:54.794 902 902 V FingerprintService: onAuthenticated(true), ID:76553760, Owner: com.android.settings, isBP: true, listener: com.android.server.biometrics.fingerprint.FingerprintService$BiometricPromptServiceListenerImpl@46461dc, requireConfirmation: false, user: 0
06-21 20:34:54.799 902 902 V FingerprintService: Done with client: com.android.settings
06-21 20:34:54.800 902 902 W BiometricService: Ignoring null message: 0
06-21 20:34:54.808 1127 1127 V BiometricPrompt/AuthBiometricView: newState: 6
06-21 20:34:55.196 1127 1127 D BiometricPrompt/AuthContainerView: pendingCallback: 4
06-21 20:34:55.196 1127 1127 D BiometricPrompt/AuthController: onDialogDismissed: 4
06-21 20:34:55.228 902 993 W InputDispatcher: channel '6e47b2d BiometricPrompt (server)' ~ Consumer closed input channel or an error occurred. events=0x9
06-21 20:34:55.229 902 993 E InputDispatcher: channel '6e47b2d BiometricPrompt (server)' ~ Channel is unrecoverably broken and will be disposed!
06-21 20:34:55.242 902 1587 W InputDispatcher: Attempted to unregister already unregistered input channel '6e47b2d BiometricPrompt (server)'
2.无HAL服务,即device manifest未声明IBiometricsFingerprint。
06-21 20:43:25.524 910 910 I SystemServerTiming: StartFingerprintSensor
06-21 20:43:25.524 910 910 I SystemServiceManager: Starting com.android.server.biometrics.fingerprint.FingerprintService
06-21 20:43:25.527 910 910 D SystemServerTiming: StartFingerprintSensor took to complete: 3ms
06-21 20:43:25.527 910 995 I SystemServerTimingAsync: InitThreadPoolExec:FingerprintService.onStart
06-21 20:43:25.527 910 995 D SystemServerInitThreadPool: Started executing FingerprintService.onStart
06-21 20:43:25.527 910 910 I SystemServerTiming: StartBiometricService
06-21 20:43:25.527 910 910 I SystemServiceManager: Starting com.android.server.biometrics.BiometricService
06-21 20:43:25.527 910 995 V FingerprintService: mDaemon was null, reconnect to fingerprint
06-21 20:43:25.528 910 995 W FingerprintService: fingerprint HIDL not available
06-21 20:43:25.529 910 995 D SystemServerInitThreadPool: Finished executing FingerprintService.onStart
06-21 20:43:25.529 910 995 D SystemServerTimingAsync: InitThreadPoolExec:FingerprintService.onStart took to complete: 1ms
06-21 20:43:25.531 910 910 D SystemServerTiming: StartBiometricService took to complete: 4ms
06-21 20:43:25.531 910 910 I SystemServerTiming: StartAuthService
06-21 20:43:25.531 910 910 I SystemServiceManager: Starting com.android.server.biometrics.AuthService
06-21 20:43:25.531 910 910 D AuthService: Registering ID: 0 Modality: 2 Strength: 15
06-21 20:43:25.532 910 910 D FingerprintService: initConfiguredStrengthInternal(15)
06-21 20:43:25.532 910 910 D BiometricService: Registering ID: 0 Modality: 2 Strength: 15
06-21 20:43:25.532 910 910 D BiometricStrengthController: Flags are null or empty
06-21 20:43:25.533 910 910 D SystemServerTiming: StartAuthService took to complete: 2ms
06-21 20:43:25.640 910 910 I LockSettingsService: Device doesn't implement AuthSecret HAL
06-21 20:43:30.425 910 1014 V FingerprintService: mDaemon was null, reconnect to fingerprint
06-21 20:43:30.426 910 1014 W FingerprintService: fingerprint HIDL not available
06-21 20:43:30.572 910 1013 V FingerprintService: mDaemon was null, reconnect to fingerprint
06-21 20:43:30.573 910 1013 W FingerprintService: fingerprint HIDL not available
06-21 20:43:30.578 910 1013 V FingerprintService: mDaemon was null, reconnect to fingerprint
06-21 20:43:30.578 910 1013 W FingerprintService: fingerprint HIDL not available
06-21 20:43:30.811 910 1013 V FingerprintService: mDaemon was null, reconnect to fingerprint
06-21 20:43:30.811 410 410 I hwservicemanager: getTransport: Cannot find entry android.hardware.biometrics.fingerprint@2.1::IBiometricsFingerprint/default in either framework or device manifest.
06-21 20:44:07.132 910 1596 V FingerprintService: mDaemon was null, reconnect to fingerprint
06-21 20:44:07.132 410 410 I hwservicemanager: getTransport: Cannot find entry android.hardware.biometrics.fingerprint@2.1::IBiometricsFingerprint/default in either framework or device manifest.
06-21 20:44:07.133 910 1596 W FingerprintService: fingerprint HIDL not available
06-21 20:44:07.704 910 924 V FingerprintService: mDaemon was null, reconnect to fingerprint
06-21 20:44:07.706 410 410 I hwservicemanager: getTransport: Cannot find entry android.hardware.biometrics.fingerprint@2.1::IBiometricsFingerprint/default in either framework or device manifest.
06-21 20:44:07.707 910 924 W FingerprintService: fingerprint HIDL not available
06-21 20:44:07.707 1412 2224 D SugstStatusProvider: Suggestion com.android.settings/com.android.settings.biometrics.fingerprint.FingerprintEnrollSuggestionActivity complete: true
06-21 20:44:16.311 910 910 V FingerprintService: mDaemon was null, reconnect to fingerprint
06-21 20:44:16.311 410 410 I hwservicemanager: getTransport: Cannot find entry android.hardware.biometrics.fingerprint@2.1::IBiometricsFingerprint/default in either framework or device manifest.
06-21 20:47:21.272 910 910 V FingerprintService: mDaemon was null, reconnect to fingerprint
06-21 20:47:21.275 410 410 I hwservicemanager: getTransport: Cannot find entry android.hardware.biometrics.fingerprint@2.1::IBiometricsFingerprint/default in either framework or device manifest.
06-21 20:47:21.276 910 910 W FingerprintService: fingerprint HIDL not available
06-21 20:47:21.276 910 910 D BiometricService: Package: com.android.settings Authenticator ID: 0 Modality: 2 Reported Modality: 2 Status: 5 //BIOMETRIC_HARDWARE_NOT_DETECTED = 5;
06-21 20:47:21.276 910 910 D BiometricService: Creating auth session. Modality: 0, cookie: 1265982069, authenticators: 32768 // DEVICE_CREDENTIAL
06-21 20:47:21.278 1132 1132 D BiometricPrompt/AuthController: showAuthenticationDialog, authenticators: 32768, biometricModality: 0, requireConfirmation: false, operationId: 0
06-21 20:47:21.290 1132 1132 D BiometricPrompt/AuthController: userId: 0 savedState: null mCurrentDialog: null newDialog: com.android.systemui.biometrics.AuthContainerView{b4f9e4b VFE...... .F....I. 0,0-0,0} type: 0
3.未定制fingerprint feature,即设备运行起来,无FingerprintService。
此时,BiometricService.mAuthenticators为空。
06-21 20:50:30.241 910 910 I SystemServerTiming: StartBiometricService
06-21 20:50:30.241 910 910 I SystemServiceManager: Starting com.android.server.biometrics.BiometricService
06-21 20:50:30.244 910 910 D SystemServerTiming: StartBiometricService took to complete: 3ms
06-21 20:50:30.244 910 910 I SystemServerTiming: StartAuthService
06-21 20:50:30.244 910 910 I SystemServiceManager: Starting com.android.server.biometrics.AuthService
06-21 20:50:30.245 910 910 D AuthService: Registering ID: 0 Modality: 2 Strength: 15
06-21 20:50:30.246 910 910 E AuthService: Attempting to register with null FingerprintService. Please check your device configuration.
06-21 20:50:30.247 910 910 D SystemServerTiming: StartAuthService took to complete: 3ms
06-21 20:50:30.354 910 910 I LockSettingsService: Device doesn't implement AuthSecret HAL
06-21 20:52:15.734 2968 2999 I FeatureEligibility: com.android.settings/com.android.settings.biometrics.fingerprint.FingerprintEnrollSuggestionActivity requires unavailable feature android.hardware.fingerprint
06-21 20:52:23.863 910 910 D BiometricService: Creating auth session. Modality: 0, cookie: 1302337298, authenticators: 32768 // DEVICE_CREDENTIAL
06-21 20:52:23.866 1133 1133 D BiometricPrompt/AuthController: showAuthenticationDialog, authenticators: 32768, biometricModality: 0, requireConfirmation: false, operationId: 0
06-21 20:52:23.888 1133 1133 D BiometricPrompt/AuthController: userId: 0 savedState: null mCurrentDialog: null newDialog: com.android.systemui.biometrics.AuthContainerView{861108a VFE...... .F....I. 0,0-0,0} type: 0
06-21 20:52:27.280 910 1598 D LockSettingsService: spBasedDoVerifyCredential: user=0 challengeType=1 hasEnrolledBiometrics=false
虽然第2、3种情况,启动的均为Pattern验证View: AuthCredentialPatternView。
情况3,和之前Android Q的行为是一致的。
正常情况下,在无Fp项目里边,应当既不添加fingerprint feature,也不声明device manifest IBiometricsFingerprint接口。
搞个R.array.config_biometric_sensors的原因,大概是因为配置中的Strength。
/**
* Types of authenticators, defined at a level of granularity supported by
* {@link BiometricManager} and {@link BiometricPrompt}.
*
* <p>Types may combined via bitwise OR into a single integer representing multiple
* authenticators (e.g. <code>DEVICE_CREDENTIAL | BIOMETRIC_WEAK</code>).
*/
public interface Authenticators {
/**
* An {@link IntDef} representing valid combinations of authenticator types.
* @hide
*/
@IntDef(flag = true, value = {
BIOMETRIC_STRONG,
BIOMETRIC_WEAK,
DEVICE_CREDENTIAL,
})
@interface Types {}
/**
* Empty set with no authenticators specified.
*
* <p>This constant is intended for use by {@link android.provider.DeviceConfig} to adjust
* the reported strength of a biometric sensor. It is not a valid parameter for any of the
* public {@link android.hardware.biometrics} APIs.
*
* @hide
*/
@SystemApi
@RequiresPermission(WRITE_DEVICE_CONFIG)
int EMPTY_SET = 0x0000;
/**
* Placeholder for the theoretical strongest biometric security tier.
* @hide
*/
int BIOMETRIC_MAX_STRENGTH = 0x0001;
/**
* Any biometric (e.g. fingerprint, iris, or face) on the device that meets or exceeds the
* requirements for <strong>Strong</strong>, as defined by the Android CDD.
*/
int BIOMETRIC_STRONG = 0x000F;
/**
* Any biometric (e.g. fingerprint, iris, or face) on the device that meets or exceeds the
* requirements for <strong>Weak</strong>, as defined by the Android CDD.
*
* <p>Note that this is a superset of {@link #BIOMETRIC_STRONG} and is defined such that
* <code>BIOMETRIC_STRONG | BIOMETRIC_WEAK == BIOMETRIC_WEAK</code>.
*/
int BIOMETRIC_WEAK = 0x00FF;
/**
* Any biometric (e.g. fingerprint, iris, or face) on the device that meets or exceeds the
* requirements for <strong>Convenience</strong>, as defined by the Android CDD.
*
* <p>This constant is intended for use by {@link android.provider.DeviceConfig} to adjust
* the reported strength of a biometric sensor. It is not a valid parameter for any of the
* public {@link android.hardware.biometrics} APIs.
*
* @hide
*/
@SystemApi
@RequiresPermission(WRITE_DEVICE_CONFIG)
int BIOMETRIC_CONVENIENCE = 0x0FFF;
/**
* Placeholder for the theoretical weakest biometric security tier.
* @hide
*/
int BIOMETRIC_MIN_STRENGTH = 0x7FFF;
/**
* The non-biometric credential used to secure the device (i.e., PIN, pattern, or password).
* This should typically only be used in combination with a biometric auth type, such as
* {@link #BIOMETRIC_WEAK}.
*/
int DEVICE_CREDENTIAL = 1 << 15;
}