方案核心与痛点
如果你也在做 RN + Android 的本地人脸识别,通常会踩这几个坑:
- 密钥硬编码,安全和运维都很被动。
- 激活偶发卡住,前端一直 loading。
- 识别链路断点多,定位问题全靠猜。
- 页面代码和原生代码耦合严重,后续改动风险大。
这套方案的核心在于三件事:
- 配置收敛:激活参数改成'配置文件优先,接口兜底'。
- 职责拆分:RN 负责流程与状态,Kotlin 负责引擎与特征处理。
- 排障前置:超时、错误码、脱敏日志、缓存兜底都做在链路里。
完整链路概览
业务页面 RobotMatchUserTrtcScreen 调用 useArcsoftSdk,通过 arcsoftSdkService 获取配置(本地配置文件优先,后端接口 types=6 兜底,AsyncStorage 缓存保底)。随后初始化 ArcFace.initArcFace,经过 ArcFaceModule.kt 和 ArcFaceConfig.update 确保激活(activeOffline / activeOnline)。最终通过 ArcFaceCameraView 和 ArcFaceCameraController 进行实时检测,提取 featureBase64,调用 ArcFace.validFaceLocal 比对,结果存入 FaceFeatureStore。
Android 工程集成基础
SDK 包与 ABI
编辑 android/app/build.gradle:
dependencies {
implementation files('libs/arcsoft_face.jar')
implementation files('libs/arcsoft_image_util.jar')
}
android {
defaultConfig {
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
packagingOptions {
pickFirst '**/*.so'
}
}
实战建议:
abiFilters必须和你实际放入libs的 so 架构一致。- 新机器型上线前,先用 release 包做一次 so 完整性检查。
- 如果后续接入更多原生 SDK,优先排查
pickFirst是否掩盖冲突。
权限与 Manifest
编辑 android/app/src/main/AndroidManifest.xml,最小相关权限如下:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission =/>


