3、项目搭建与权限配置:创建Android项目、添加指纹权限、配置硬件特性、检查设备兼容性

好,咱们正式开始动手了。

这一章,我会带你从零创建一个Android项目,然后一步步把指纹识别需要的权限、硬件声明、兼容性检查都配好。说白了,就是给App铺好路,让后面的指纹代码能跑起来。

我个人习惯,在项目一开始就把这些基础配置做扎实。不然写到一半发现少个权限,或者设备不兼容,回头再改,挺烦的。

3.1 创建Android项目

打开Android Studio,点"New Project"。选"Empty Views Activity",然后填项目名。我建议包名用类似 com.yourname.fingerprintdemo 这种格式,清晰好记。

语言选Kotlin,最低SDK版本选多少?嗯,这里要注意:指纹API(BiometricPrompt)是从Android 9(API 28)开始稳定支持的。如果你非要兼容更老的版本,也不是不行,但代码会复杂很多。我个人建议,新项目直接设 minSdk = 28,省心。

// build.gradle.kts (Module :app)
android {
    namespace = "com.yourname.fingerprintdemo"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.yourname.fingerprintdemo"
        minSdk = 28  // 推荐
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"
    }
    // ...
}
小提示:如果你项目里用了Java,也没问题。指纹API在Java和Kotlin里都能用,只是Kotlin语法更简洁一些。

3.2 添加指纹权限

指纹识别需要两个权限。一个是 USE_BIOMETRIC,另一个是 USE_FINGERPRINT(这个其实已经废弃了,但为了兼容旧设备,我建议还是加上)。

打开 AndroidManifest.xml,在 <manifest> 标签里加上:

<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />

注意,这两个权限都是 普通权限,不需要运行时申请。你只要在清单文件里声明,系统就会自动授予。

注意:千万不要漏掉 USE_BIOMETRIC。我曾经见过一个项目,只加了 USE_FINGERPRINT,结果在Android 10以上的设备上,指纹弹窗死活不出来。排查了半天,才发现是权限问题。

3.3 配置硬件特性

这一步很多人会忽略,但我觉得挺重要的。你想想看,如果App在Google Play上架,你肯定不希望那些没有指纹硬件的设备也能搜到你的App吧?

AndroidManifest.xml 里,加上 <uses-feature> 声明:

<uses-feature
    android:name="android.hardware.fingerprint"
    android:required="true" />

required 设为 true,Google Play就会自动过滤掉没有指纹硬件的设备。如果你的App还支持其他认证方式(比如人脸),可以设为 false,然后在代码里做兼容处理。

核心要点:硬件特性声明,决定了你的App能在哪些设备上安装。设成 true,就是"没指纹别想装";设成 false,就是"有指纹最好,没有也能用"。

3.4 检查设备兼容性

配置好了权限和硬件特性,不代表万事大吉。你想想看,有些设备虽然有指纹硬件,但可能被系统禁用了(比如企业设备策略),或者用户根本没录入指纹。这些情况,都需要在代码里检查。

Android提供了 BiometricManager 类,专门干这个事。用法很简单:

val biometricManager = BiometricManager.from(context)
when (biometricManager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG)) {
    BiometricManager.BIOMETRIC_SUCCESS -> {
        // 设备支持指纹,并且用户已录入
        Log.d("Fingerprint", "可以开始指纹认证")
    }
    BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> {
        // 设备没有指纹硬件
        Log.e("Fingerprint", "没有指纹硬件")
    }
    BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> {
        // 硬件暂时不可用
        Log.e("Fingerprint", "指纹硬件暂时不可用")
    }
    BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED -> {
        // 用户没有录入指纹
        Log.e("Fingerprint", "请先录入指纹")
    }
}

这段代码,我建议放在 onCreate 或者进入指纹页面时调用。如果返回 BIOMETRIC_SUCCESS,再显示指纹按钮;否则,给出相应的提示。

避坑指南:我曾经遇到一个情况,某款国产手机明明有指纹,但 canAuthenticate 返回了 BIOMETRIC_ERROR_HW_UNAVAILABLE。后来发现,是系统的一个bug,重启手机就好了。所以,如果遇到这个错误,可以提示用户重启试试。

3.5 知识体系总览

为了让你更直观地理解这一章的内容,我画了一张图。它把项目搭建、权限配置、硬件声明、兼容性检查串在了一起。你看完应该能有个整体印象。

项目搭建与权限配置 · 知识体系 ① 创建Android项目 · 选择 Empty Views Activity · 语言:Kotlin / Java · minSdk ≥ 28(推荐) · 包名:com.yourname.fingerprintdemo ② 添加指纹权限 · USE_BIOMETRIC(必需) · USE_FINGERPRINT(兼容旧设备) · 普通权限,无需运行时申请 · 写在 AndroidManifest.xml 中 ③ 配置硬件特性 · uses-feature: fingerprint · required="true" 过滤无硬件设备 · required="false" 做兼容处理 · 影响Google Play上架分发 ④ 检查设备兼容性 · BiometricManager.canAuthenticate() · 检查硬件、可用性、录入状态 · 返回 SUCCESS 才显示指纹按钮 · 给出用户友好的错误提示 四步走完,基础环境就绪,可以开始写指纹代码了

3.6 完整清单文件示例

最后,给你一个完整的 AndroidManifest.xml 参考。把下面这段复制到你的项目里,稍微改一下包名就行。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <!-- 指纹权限 -->
    <uses-permission android:name="android.permission.USE_BIOMETRIC" />
    <uses-permission android:name="android.permission.USE_FINGERPRINT" />

    <!-- 硬件特性声明 -->
    <uses-feature
        android:name="android.hardware.fingerprint"
        android:required="true" />

    <application
        android:allowBackup="true"
        android:label="指纹Demo"
        android:supportsRtl="true"
        android:theme="@style/Theme.FingerprintDemo">

        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

好了,项目搭建和权限配置就到这里。下一章,我们会真正开始写指纹认证的代码。到时候,你会看到 BiometricPrompt 怎么用,回调怎么处理。嗯,先把这个基础打好,后面就顺了。


公众号:蓝海资料掘金营,微信deep3321