You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

系统级Android设置应用指纹功能开发咨询(存储至TEE安全区)

系统级Settings应用实现指纹管理(添加/删除)的解决方案

嘿,刚好我有过在系统级应用里做指纹管理的经验,给你梳理下核心流程和关键要点——毕竟这和普通Play应用完全不是一回事,得吃透系统权限和框架层的API:

一、核心前提:系统应用身份与权限配置

要操作TEE里的指纹数据,你的Settings应用必须是系统级预装应用,这一步是基础:

  • AndroidManifest.xml中声明系统用户ID:
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        android:sharedUserId="android.uid.system">
    
  • 申请系统级指纹管理权限:
    <uses-permission android:name="android.permission.MANAGE_FINGERPRINT" />
    <uses-feature android:name="android.hardware.fingerprint" android:required="true" />
    
  • 应用必须使用系统签名(和你的智能手表ROM签名一致),否则无法获得系统权限。

二、关键实现:利用系统FingerprintManager API

安卓框架已经封装了和TEE交互的逻辑,你不需要直接操作TEE硬件,只需调用系统提供的FingerprintManager(Android 6.0+)或适配更高版本的BiometricManager底层方法:

1. 指纹添加流程

系统应用可以直接触发指纹采集并将模板存入TEE,核心步骤:

  • 获取FingerprintManager实例:
    FingerprintManager fingerprintManager = 
        (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);
    
  • 检查硬件支持状态:
    if (!fingerprintManager.isHardwareDetected()) {
        // 设备无指纹传感器,提示用户
        return;
    }
    
  • 启动指纹注册流程(通过系统回调处理采集状态):
    fingerprintManager.enroll(
        null, // 系统应用可传null,普通应用需CryptoObject验证
        0, 
        0, 
        new FingerprintManager.EnrollmentCallback() {
            @Override
            public void onEnrollmentProgress(int remaining) {
                // 提示用户还需采集多少次指纹样本(比如"再按3次")
            }
    
            @Override
            public void onEnrollmentCompleted(int result) {
                // 注册成功!可通过getEnrolledFingerprints()获取新指纹的ID和信息
                List<Fingerprint> enrolledFps = fingerprintManager.getEnrolledFingerprints();
                // 可将指纹名称等元数据存入系统Settings数据库(比如Settings.Secure.FINGERPRINT_NAMES)
            }
    
            @Override
            public void onEnrollmentError(int errMsgId, CharSequence errString) {
                // 处理注册失败(比如传感器故障、超时)
            }
        }, 
        null // 可选Handler,指定回调线程
    );
    

2. 指纹删除流程

通过指纹ID即可删除TEE中的模板:

// 先获取已注册的指纹列表
List<Fingerprint> enrolledFps = fingerprintManager.getEnrolledFingerprints();
// 假设要删除第一个指纹
Fingerprint targetFp = enrolledFps.get(0);
// 调用remove方法删除TEE中的模板
fingerprintManager.remove(targetFp.getBiometricId());
// 同时更新系统Settings数据库中的元数据(比如移除对应的指纹名称)

三、重要注意事项

  • 版本适配:Android 10+中FingerprintManager部分方法被标记为Deprecated,但系统级应用仍可使用,若要兼容更高版本,可结合BiometricManager做版本判断。
  • TEE交互透明化:你无需直接对接TEE硬件,FingerprintManager已经帮你完成了模板加密存储、身份验证等安全逻辑,只需确保应用拥有系统权限。
  • 参考AOSP源码:谷歌原生Settings应用的指纹模块(路径:packages/apps/Settings/src/com/android/settings/security/fingerprint/)是最权威的实现参考,里面包含了完整的采集流程、UI适配、错误处理逻辑。
  • 手表适配:针对智能手表的小屏幕,要优化指纹采集的引导UI,比如简化提示文字、适配侧边/背面指纹传感器的操作指引。

内容的提问来源于stack exchange,提问作者Aymen Masmoudi

火山引擎 最新活动