Prólogo: Desde Android 6.0, Google lanzó oficialmente un marco estándar de huellas dactilares de Android, que puso fin a la situación fragmentada de varios fabricantes de huellas dactilares y promovió el desarrollo de huellas dactilares capacitivas en Android; dado que la solución de huellas dactilares fuera de pantalla de Synopsys nació en 2017, más tarde, Goodix y otros fabricantes de huellas dactilares siguieron, y la tecnología de soluciones de huellas dactilares fuera de pantalla de Android surgió en un flujo interminable; sin embargo, a partir de Android 12, Google actualizó el marco de huellas dactilares de Android y agregó soporte para huellas dactilares fuera de pantalla. nuevo marco de huellas dactilares uno por uno. Registre su propio proceso de aprendizaje
Nota: En la actualidad, la modificación del código del marco de huellas dactilares es relativamente grande. El autor tiene android_12.0.0_r34, y el teléfono móvil de prueba utilizado es pixel 3xl
1. Proceso de inicio de huellas dactilares
1. El proceso init analiza el archivo init.rc para iniciar el servicio de huellas dactilares de la capa HAL
init: Setting property 'ro.build.fingerprint' to 'Android/aosp_crosshatch/crosshatch:12/SP1A.210812.016.C2/eng.20221212.113415:userdebug/test-keys'
init: Parsing file /vendor/etc/init/[email protected]...
Desde la salida de registro del teléfono móvil del autor, puede ver que el archivo de inicio de la huella digital es vendor/etc/init/[email protected]
A través del archivo de huella digital init.rc, inicie el archivo ejecutable [email protected] en la ruta /vendor/bin/hw/
2. Ejecute el servicio de huellas dactilares de la capa HAL y notifique al entorno TEE Cargue la huella dactilar TA
Del registro anterior, podemos ver dos puntos clave
pid-1297 D fpc fingerprint hwbinder service starting
QSEECOM: qseecom_load_app: App with id 2 (fpctzappfingerprint) now loaded
Se puede ver que se inicia el servicio de huellas dactilares de la capa HAL, se llama al código de la capa Hal de la huella dactilar y se notifica al TEE que cargue el nombre
programa de huellas dactilares fpctzapp
Nota: aquí omita temporalmente la explicación de la capa HAL
Resumir:
- Cuando se inicia el proceso de inicio, analiza el archivo [email protected] e inicia el servicio de huellas dactilares HAL a través de este archivo.
- Durante el proceso de inicio de Fingerprint Service, regrese y notifique a TEE para cargar el programa llamado fpctzappfingerprint
3. Inicie el servicio de huellas dactilares de la capa Framework
SystemServerTiming system_process I StartFingerprintSensor
SystemServiceManager system_process I Starting com.android.server.biometrics.sensors.fingerprint.Fin...
FintgerprintService system_process E FingerprintService
FintgerprintService system_process E onStart
Las líneas 2466 a 2478 del archivo SystemServer.java inician FingerprintService, BiometricService y
Los tres sistemas de capa de Framework de AuthService servirán; el constructor y el método oStart de estos tres servicios de nivel de sistema se llamarán
El constructor de FingerprintService crea un objeto de la clase FingerprintServiceWrapper y, a continuación, el método onStart de FingerprintService llama al método publishingBinderService.
FingerprintServiceWrapper hereda el método IFingerprintService.Stub y, a través del método de publicación de BinderService anterior, inicie este servidor remoto FingerprintServiceWrapper,
A través de los comentarios en la línea 168, sabe que su cliente es FingerprintManager y puede verificar si es correcto más adelante.
/**
* Receives the incoming binder calls from FingerprintManager.
*/
Resumir:
- SystemServer llama al constructor y al método onStart de FingerprintService
- FingerprintService crea un objeto de la clase FingerprintServiceWrapper en su constructor.Esta
clase es un servidor remoto Binder - FingerprintService inicia el servidor remoto FingerprintServiceWrapper en el método onStart
2. El servicio de huellas dactilares del marco se conecta al servicio de huellas dactilares de la capa HAL
Como se mencionó anteriormente, la huella digital comienza desde el proceso de inicio hasta el proceso de inicio de Framework; el servicio de huellas digitales de capa Hal y el servicio de huellas digitales de Framework se iniciaron respectivamente, pero aún no hay un puente.
FingeprintintService I FingerprintServiceWrapper registerAuthenticators
Después de innumerables impresiones de seguimiento de registros, se descubrió que se llamará al método registerAuthenticators de FingerprintServiceWrapper
Luego, a través de la búsqueda de código, se encuentra que será llamado por el método registerAuthenticators de AuthService.java
Ingrese el archivo AuthService.java, el método registerAuthenticators es el siguiente
En las líneas de código 690 a 693, se encuentra que la clase de implementación de la interfaz IFingerprintService llama a los registerAuthenticators de la interfaz IFingerprintService; se puede adivinar que este mInjector.getFingeprintService() obtiene el servidor FingerprintServiceWrapper descrito anteriormente como el correspondiente cliente, por lo que a través del método registerAuthenticators finalmente llama al método registerAuthenticators de FingerprintServiceWrapper en el lado del servidor;
A través del seguimiento, se encuentra que el método onStart llama al método registerAuthenticators de AuthService; por lo que ahora está relativamente claro que también se llama al método onStart de AuthService porque SystemServer llama a AuthService
Resumir:
- SystemServer llama al constructor y al método onStart de AuthService
- AuthService llama a su propio método registerAuthenticators en el método onStart y
llama
a la función registerAuthenticators del servidor remoto FingerprintServiceWrapper obteniendo el cliente correspondiente al servidor FingerprintServiceWrapper