Android12指纹框架完全解析(一)

news2024/11/15 1:53:41

前言:自从Android6.0开始Google官方出了标准的Android指纹框架,结束了各家指纹厂商各自为政的局面,推动了电容指纹在Android的发展;自从2017年新思的屏下指纹方案横空出世,后边汇顶等指纹厂商跟进,Android 屏下指纹方案技术层出不穷;不过在Android12开始,Google 更新了Android指纹框架,添加了屏下指纹的支持,本文章会一一讲解新的指纹框架,也是为记录自己的学习过程

注:目前指纹框架代码修改比较大,笔者手上是android_12.0.0_r34, 使用的测试手机是pixel 3xl

一.指纹的启动过程

1.init 进程解析init.rc文件启动HAL层指纹service

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/android.hardware.biometrics.fingerprint@2.2-service.fpc.rc...

从笔者的手机log输出中,可以看到指纹的init 文件是vendor/etc/init/android.hardware.biometrics.fingerprint@2.2-service.fpc.rc

通过指纹的init.rc 文件,启动/vendor/bin/hw/路径下面的android.hardware.biometrics.fingerprint@2.1-service.fpc可执行文件


 

2.执行HAL层指纹serivce并通知TEE环境Load指纹TA

 

 从上面的log中可以看到两个关键点

pid-1297                             D  fpc fingerprint hwbinder service starting
QSEECOM: qseecom_load_app: App with id 2 (fpctzappfingerprint) now loaded

可以看出,启动HAL层指纹service, 调用指纹Hal 层代码,通知TEE去load名字叫

fpctzappfingerprint 的程序

注意:这里先暂时跳过HAL层的讲解

总结:

  • init 进程启动的时候,解析了android.hardware.biometrics.fingerprint@2.2-service.fpc.rc文件,通过此文件启动HAL 指纹Service
     
  • 指纹Service在启动过程中,回去通知TEE去load名字叫fpctzappfingerprint 的程序

           

3.启动Framework层指纹service

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

SystemServer.java文件中的2466行到2478行,分别启动了FingerprintService,BiometricService跟

AuthService这三个Framework层的系统将服务;将会调用这三个系统级服务的构造函数跟oStart方法

FingerprintService的构造函数,创建了一个FingerprintServiceWrapper类的对象,然后FingerprintService的onStart方法,调用了publishBinderService方法

FingerprintServiceWrapper继承了IFingerprintService.Stub方法,并通过上面的publishBinderService方法;启动了这个FingerprintServiceWrapper 远程服务端,

通过168行的注释,知道其客户端就是FingerprintManager,后边可以验证是否正确

    /**
     * Receives the incoming binder calls from FingerprintManager.
     */

总结:

  • SystemServer 调用FingerprintService的构造函数跟onStart方法
  • FingerprintService在其构造函数创建了一个FingerprintServiceWrapper类的对象
    这个类是一个Binder的远程服务器
  • FingerprintService在onStart方法中,启动了FingerprintServiceWrapper这个远处服务器

二.Framework指纹服务连接HAL层指纹服务

上面已经讲了,指纹从开机启动到Framework的启动流程;Hal层指纹service跟Framework指纹service都已经各自启动了;但是目前还没有牵桥搭线

FingeprintintService   I  FingerprintServiceWrapper registerAuthenticators

经过无数的Log跟踪打印之后,发现了FingerprintServiceWrapper的registerAuthenticators方法会被调用

然后通过代码搜索发现其会被AuthService.java的registerAuthenticators方法调用

 进入到AuthService.java文件中,registerAuthenticators方法如下

 690到693行代码中,发现是IFingerprintService接口的实现类,调用了IFingerprintService接口的registerAuthenticators;可以从其中猜测,这个mInjector.getFingeprintService()获取到的是上面介绍的FingerprintServiceWrapper服务器做对应的客户端,所以通过registerAuthenticators方法,最终调用到了服务器端FingerprintServiceWrapper的registerAuthenticators方法;

 通过跟踪,发现AuthService的registerAuthenticators方法,是被其onStart方法调用的;所以现在的比较明朗,AuthService的onStart方法,也是因为AuthService被SystemServer调用而被调用的

总结:

  • SystemServer 调用AuthService的构造函数跟onStart方法
  • AuthService在onStart方法中,调用了自己的registerAuthenticators方法,
    通过获取FingerprintServiceWrapper服务器对应的客户端,调用了远程服务器
    FingerprintServiceWrapper的registerAuthenticators函数

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】shell命令以及运行原理

shell命令1.用户不能直接使用操作系统2.Linux是一个操作系统3.在软件层面操作Linux系统4.shell运行原理1.用户不能直接使用操作系统 首先在讲shell命令之前,我们要知道 “用户是不能直接在操作系统上操作的,只能在操作系统之上,也就是软件层面…

基于两阶段鲁棒优化算法的微网多电源容量配置(Matlab)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

风控模型应聘,80%会被问到的面试题

模型过拟合,对经常建模的小伙伴来说是非常熟悉的,稍不留神,模型就出现过拟合了,这让我们在解决模型过拟合问题上花费了不少功夫。同样这个也是在面试中最高频会被Q到的问题。因此,在平日里建立模型的过程中&#xff0c…

视觉BEV语义分割模型 Simple-BEV: What Really Matters for Multi-Sensor BEV Perception?

A Simple Baseline for BEV Perception Without LiDAR本文介绍一篇简单的BEV语义分割模型,这篇文章出彩的是消融实验部分,分析了哪些因素对BEV语义分割影响比较大,此外还分析了如何更好使用Radar数据提高感知性能。 项目链接为:h…

fastjson 反序列化RCE,远程命令执行漏洞CVE、CNVD(2022年12月最新)

1、前言 Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,也可以将 JSON 字符串转换为 Java 对象。Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。 2、漏洞原理 漏洞利用fastjson autotype在处理json对…

GCD和LCM算法

目录 一 整除 定义 性质 二 GCD 1)定义 2)性质 3)GCD编程 ①暴力法 ②欧几里得算法 ③更相减损术 ④Stein算法 三 LCM ①暴力法 ②最大公约数法 四 裴蜀定理 例题:裴蜀定理 五 算法实践 [蓝桥杯 2019 省 B] 等差…

【AIOT】语音学习

声音以波的形式传播,即声波(Sound Wave)。当我们以波的视角来理解声音时,却又大繁若简起来:仅凭频率(Frequency)、幅度(Magnitude)、相位(Phase)便…

19 CPP拷贝构造函数

函数以值的方式返回对象时&#xff0c;可能会调用拷贝构造函数&#xff08;VS会调用&#xff0c;Linux不会&#xff0c;g编译器做了优化&#xff09; 代码说明 #include <iostream>using namespace std;//函数以值的方式返回对象时&#xff0c;可能会调用拷贝构造函数&a…

C++对C的语法增强

1、语法检查增强 声明int a; 定义int a 10; c语言的弱语法类型 2、严格的类型转换 枚举类型不能赋值整形 3、struct类型加强 c中定义结构体变量需要加上struct关键字&#xff0c;c不需要 c中结构体只能定义成员变量&#xff0c;不能定义函数。c可以定义成员函数 4、bool类…

聊聊优惠卷秒杀的下单功能

前言 案例来自黑马程序员视频&#xff1a;https://www.bilibili.com/video/BV1cr4y1671t/?spm_id_from333.999.0.0 案例分析 下单时需要判断两点&#xff1a; 秒杀是否开始或者结束&#xff0c;如果尚未开始或者已经结束则无法下单&#xff1b;库存是否充足&#xff0c;不足…

【图像隐写】DWT+SVD数字水印【含GUI Matlab源码 606期】

⛄一、DWTSVD数字水印简介 理论知识参考文献&#xff1a;基于DWT和SVD的彩色图像数字水印算法研究 一种基于DWT-SVD的图像数字水印算法\ ⛄二、部分源代码 function varargout main(varargin) % MAIN M-file for main.fig % MAIN, by itself, creates a new MAIN or raises…

想要提升英语阅读能力的小伙伴,走过路过,千万不要错过!

一、英语四六级阅读提升网站&#xff1a; 据统计&#xff1a;四六级阅读题目的来源主要来自纽约时报、经济学人、大西洋月刊、时代、新闻周刊、卫报等报刊&#xff0c;其分布比重如下图&#xff1a; 原文链接&#xff1a;英语四六级阅读外刊来源&#xff0c;知道事半功倍&#…

IIC信号为什么要加上拉电阻

IIC是一个两线串行通信总线&#xff0c;包含一个SCL信号和SDA信号&#xff0c;SCL是时钟信号&#xff0c;从主设备发出&#xff0c;SDA是数据信号&#xff0c;是一个双向的&#xff0c;设备发送数据和接收数据都是通过SDA信号。 在设计IIC信号电路的时候我们会在SCL和SDA上加一…

计算机毕业设计springboot+vue基本微信小程序的外卖点餐平台

项目介绍 餐饮行业是一个传统的行业。根据当前发展现状,网络信息时代的全面普及,餐饮行业也在发生着变化,单就点餐这一方面,利用手机点单正在逐步进入人们的生活。传统的点餐方式,不仅会耗费大量的人力、时间,有时候还会出错。小程序系统伴随智能手机为我们提供了新的方向。手机…

基于vue2整合tinymce富文本编辑器

文章目录1.导入依赖2.全部代码3.实际效果1.导入依赖 npm install tinymce -Snpm install tinymce/tinymce-vue -S2.全部代码 <template><editor:key"tinymceFlag"ref"editor"v-model"content":init"tinymceInit"></e…

国内使用ChatGPT的方式汇总

最近ChatGPT大火呀&#xff0c;小伙伴们是不是在网上看到各种和ChatGPT有趣聊天的截图&#xff0c;奈何自己实力不够&#xff0c;被网络拒之门外&#xff0c;只能眼馋别人的东西。看别人玩&#xff0c;肯定不如自己玩一把舒服的啊。今天小卷就给大家汇总了国内能使用ChatGPT的方…

【C/C++ 数据结构】-就这一篇博客让你玩爆二叉树的各种遍历问题!!!

作者&#xff1a;学Java的冬瓜 冬瓜的主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【C/C 数据结构与算法】 分享&#xff1a;被苦难淬炼过的人&#xff0c;内心真诚。——都靓评宋濂 主要内容&#xff1a;二叉树的递归前序遍历、中序遍历、后序遍历、层序遍历。…

你还会想起这道题吗(another version)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 众所周知&#xff0c;原神是由米哈游自主研发的一款全新开放世界冒险游戏。游戏发生在一个被称作「提瓦特」的幻想世界&#xff0c;在这里&#xff0c;被神选中的人将被授予「神之眼…

“价格+产品+服务”:京东手机开启“复合竞赛”

市场唯一不变的就是变化&#xff0c;那些最终生存下来的企业往往是最能适应变化的。 11月份&#xff0c;京东再次强调“低价”策略的重要性&#xff0c;背后无疑是其对消费环境变化做出的及时反应。“消费者对价格更为敏感&#xff0c;对高性价比商品的需求依旧是主流”&#…

YOLO-V5 算法和代码解析系列 —— 学习路线规划综述

目录标题为什么学习 YOLO-V5 &#xff1f;博客文章列表面向对象开源项目学习方法预备知识项目目录结构为什么学习 YOLO-V5 &#xff1f; 算法性能&#xff1a;与YOLO系列&#xff08;V1&#xff0c;V2&#xff0c;V3&#xff0c;V4&#xff09;相比&#xff0c;YOLO-V5效果最好…