Android
1 简介
1.1 产品介绍
百度安全增强级采集 SDK Android 版是一种面向 Android 移动设备的人脸技术开发包,此版SDK包含人脸检测、活体识别等功能,以aar包+动态链接库的形式发布。基于该方案,开发者可以轻松的构建包含基于人脸采集和活体识别的实名认证和人脸比对流程的应用。
为了解决人脸的采集和使用过程中的安全问题,本SDK在实名认证和人脸比对流程中应用了多种安全解决方案,使第三方应用能更简单地集成安全的实名认证和人脸比对能力,本SDK为面向API level 22以上设备的Android APP提供流程安全的人脸采集,及采集后的实名认证和人脸比对流程。
1.2 功能介绍
此版SDK基于在线的安全能力封装为人脸比对和实名认证两个核心流程,主要用于在客户端执行这两种流程。因为这两种流程最终需要向服务器发起请求以完成认证,因此无法在离线环境下使用。
此版SDK所包含的能力如下:
- 动作活体检测:通过让用户做出指定人脸配合式的交互动作,识别当前操作者是否为活体,此功能为离线使用,可设定指定动作是否使用及应用顺序。动作包含:眨眨眼、张闭嘴、向左摇头、向右摇头、向上抬头,向下低头6个。可有效抵御高清图片、3D建模、视频等攻击。
- 人脸质量检测:判断视频流中的图片帧中,哪些图片质量较佳,即人脸图像特征清晰(满足姿态角、光照、模糊度、遮挡等校验)。
- 人脸图像采集:通过本地SDK能力,采集人脸图像,同时经过人脸质量检测,确保采集到的人脸图像符合各条件校验(满足姿态角、光照、模糊度、遮挡等校验),为设备前端获取有效可分析人脸的主要功能。
- 授权:SDK的授权判断,授权介质也称为license,在SDK使用中,需要通过license向授权服务器发起请求,判断SDK的使用合法性及使用有效期。
- 人脸比对和实名认证流程:通过将原子操作封装为安全的流程,在流程中加入多种安全防护能力,能够抵御大多数针对人脸流程的攻击。因为不用自行维护流程,应用程序使用人脸比对和实名认证功能也变得更加简便。
1.3 兼容性
- 系统:支持 Android 5.1(API Level 22)及以上系统。需要开发者通过 minSdkVersion来保证支持系统的检测。
- 机型:手机和平板皆可(暂不支持横屏)
- 构架:支持 CPU架构平台【armeabi-v7a、arm64-v8a】
- 网络:支持 WIFI 及移动网络。
1.4 开发包说明
文件/文件夹名 | 说明 |
---|---|
/lib-liantian | SDK lib库、模型文件以及流程逻辑代码打包的aar |
/faceplatform-ui | SDK的UI库,封装采集和动作活体UI等功能,以及各平台的so库。so包含以下几个平台如果关注包大小,请自行删减。【armeabi-v7a、arm64-v8a】 |
/app | DEMO工程(包含首页面、采集成功失败页面、设置页面等) |
2 集成指南
本章将进行 Step-By-Step的讲解,如何快速的集成 人脸Sdk到现有应用中。一个完整的Demo 请参考开发包中的示例程序 FacePlatform。方案架构参考下图:
2.1 准备工作
2.1.1 申请License
人脸SDK License:此license用于SDK离线功能使用,在您的申请人脸SDK的后台页面,全局->产品服务->人脸识别->客户端SDK申请
人脸控制台路径如下:
点击客户端SDK管理,弹出如下图:创建应用(这里创建应用是为了使用离线SDK,上面创建应用为了使用人脸在线接口,如注册、识别等)
在弹出的框中输入授权标识,选择应用类型,应用系统,以及包名,详情请查看输入框右边提示
2.1.2 下载SDK
下载SDK分为自动配置授权信息(创建license后就可以选择为该应用,下载后SDK自动帮您配置授权,不用下载license拷贝到工程中,初始化参数licenseID,包名也帮您配置好了)和未配置授权信息两种方式:
2.2 运行示例工程
2.2.1 运行自动配置授权信息的示例工程
该下载的示例工程,已经帮您改好了license和包名 • Android Studio导入下载的示例工程 • 配置打包签名文件,由于SDK运行时会校验签名文件的MD5是否和申请时填入一样。为了便于debug能正常使用SDK,需要配置打包签名文件。 • 运行示例工程
2.2.2 运行未配置授权信息的示例工程
(1)Android Studio导入下载的示例工程 (2)下载license拷贝到工程的assets目录 (3)修改HomeActivity.java的initialize方法参数 (4)修改app.gradle里面的包名为申请license填入的包名,如上图安卓包名。 (5)配置打包签名文件,由于SDK运行时会校验签名文件的MD5是否和申请时填入一样。为了便于debug能正常使用SDK,需要配置打包签名文件。 (6)运行示例工程。如果无法正常体验,请查看logcat日志。是否有 FaceSDK-License LICENSE_INFO_CHECK_ERROR日志。如果有说明授权没有成功,可以查看本文档最后的常见问题进行解决。
2.3 添加SDK到工程
安全增强级采集SDK以androidstudio开发方式提供,以下介绍在android studio开发工具导入FaceSdk
(1)将开发包中的lib-liantian库Copy 到工程根目录。
(2)将开发包中的faceplatform-ui库Copy 到工程根目录。
(3)SDK提供的了开源的faceplatform-ui库,把活体检测和人脸图像采集功能等功能进行了封装,适配了主流机型机型。如果需要使用,请添加faceplatform-ui模块到的工程中。faceplatform-ui目录结构如下图
(4)在build.gradle使用compile project引人faceplatform-ui库和lib-liantian库。
(5)Setting.gradle中include faceplatfrom-ui和lib-liantian
(6)从官网下载授权文件license,复制到app/src/main/assets目录下。
(7)申请的license已经和打包签名key进行了绑定(申请时用到了签名的md5,为了便于debug模式也能调用SDK的功能,需要把debug的key改成申请license的key。
• 把key拷贝到项目根目录下
• 主appbuild.gradle android 下面添加(修改)signingConfigs相关的配置。如下图。
(8)将app module下的AndroidManifest.xml中的liantian库的注册包名改成您工程中的包名
2.4 权限声明
2.5 混淆设置
如果工程需要做混淆处理的话,则在工程的proguard-rules.pro文件中添加如下配置。aar文件中已经包含了混淆设置,如果正常使用aar集成,可以不用单独进行混淆设置: -keep class com.baidu.vis.unified.license. {;} -keep class com.baidu.liantian. {;} -keep class com.baidu.baidusec. {;} -keep class com.baidu.idl.main.facesdk. {;}
3 功能使用
3.1 实名认证/人脸比对
(1)同意隐私协议。 需要在用户同意隐私协议后调用LH.setAgreePolicy。用户未同意隐私协议前请勿调用初始化方法,以避免可能触发的隐私API调用。
(2)初始化SDK。 本SDK使用时需要同时初始化安全增强级采集SDK自身和Face采集模块。 为达到较好的安全效果,请在应用启动后尽早执行本SDK初始化,并设置同意隐私协议。 首先调用LH.init方法初始化安全模块。随后调用FaceSDKManager.getIntance().initialize(Context context, String licenseID, String licenseFileName, IInitCallback callback); 参数分别表示:当前上下文、鉴权key、鉴权名称、回调参数 。 Demo中此段代码在HomeActivity中。同时需要 (3) 初始化参数设置。
FaceConfig config = FaceSDKManager.getInstance().getFaceConfig();
// SDK初始化已经设置完默认参数(推荐参数),也可以根据实际需求进行数值调整
// 质量等级(0:正常、1:宽松、2:严格、3:自定义)
// 获取保存的质量等级
SharedPreferencesUtil util = new SharedPreferencesUtil(mContext);
int qualityLevel = (int) util.getSharedPreference(Const.KEY_QUALITY_LEVEL_SAVE, -1);
if (qualityLevel == -1) {
qualityLevel = ExampleApplication.qualityLevel;
}
// 根据质量等级获取相应的质量值(注:第二个参数要与质量等级的set方法参数一致)
QualityConfigManager manager = QualityConfigManager.getInstance();
manager.readQualityFile(mContext.getApplicationContext(), qualityLevel);
QualityConfig qualityConfig = manager.getConfig();
if (qualityConfig == null) {
return false;
}
// 设置模糊度阈值
config.setBlurnessValue(qualityConfig.getBlur());
// 设置最小光照阈值(范围0-255)
config.setBrightnessValue(qualityConfig.getMinIllum());
// 设置最大光照阈值(范围0-255)
config.setBrightnessMaxValue(qualityConfig.getMaxIllum());
// 设置左眼遮挡阈值
config.setOcclusionLeftEyeValue(qualityConfig.getLeftEyeOcclusion());
// 设置右眼遮挡阈值
config.setOcclusionRightEyeValue(qualityConfig.getRightEyeOcclusion());
// 设置鼻子遮挡阈值
config.setOcclusionNoseValue(qualityConfig.getNoseOcclusion());
// 设置嘴巴遮挡阈值
config.setOcclusionMouthValue(qualityConfig.getMouseOcclusion());
// 设置左脸颊遮挡阈值
config.setOcclusionLeftContourValue(qualityConfig.getLeftContourOcclusion());
// 设置右脸颊遮挡阈值
config.setOcclusionRightContourValue(qualityConfig.getRightContourOcclusion());
// 设置下巴遮挡阈值
config.setOcclusionChinValue(qualityConfig.getChinOcclusion());
// 设置人脸姿态角阈值
config.setHeadPitchValue(qualityConfig.getPitch());
config.setHeadYawValue(qualityConfig.getYaw());
config.setHeadRollValue(qualityConfig.getRoll());
// 设置可检测的最小人脸阈值
config.setMinFaceSize(FaceEnvironment.VALUE_MIN_FACE_SIZE);
// 设置可检测到人脸的阈值
config.setNotFaceValue(FaceEnvironment.VALUE_NOT_FACE_THRESHOLD);
// 设置闭眼阈值
config.setEyeClosedValue(FaceEnvironment.VALUE_CLOSE_EYES);
// 设置图片缓存数量
config.setCacheImageNum(FaceEnvironment.VALUE_CACHE_IMAGE_NUM);
// 设置活体动作,通过设置list,LivenessTypeEunm.Eye, LivenessTypeEunm.Mouth,
// LivenessTypeEunm.HeadUp, LivenessTypeEunm.HeadDown,
// LivenessTypeEunm.HeadLeft, LivenessTypeEunm.HeadRight
config.setLivenessTypeList(ExampleApplication.livenessList);
// 设置动作活体是否随机
config.setLivenessRandom(ExampleApplication.isLivenessRandom);
// 设置开启提示音
config.setSound(ExampleApplication.isOpenSound);
// 原图缩放系数
config.setScale(FaceEnvironment.VALUE_SCALE);
// 抠图宽高的设定,为了保证好的抠图效果,建议高宽比是4:3
config.setCropHeight(FaceEnvironment.VALUE_CROP_HEIGHT);
config.setCropWidth(FaceEnvironment.VALUE_CROP_WIDTH);
// 抠图人脸框与背景比例
config.setEnlargeRatio(FaceEnvironment.VALUE_CROP_ENLARGERATIO);
// 检测超时设置
config.setTimeDetectModule(FaceEnvironment.TIME_DETECT_MODULE);
// 检测框远近比率
config.setFaceFarRatio(FaceEnvironment.VALUE_FAR_RATIO);
config.setFaceClosedRatio(FaceEnvironment.VALUE_CLOSED_RATIO);
FaceSDKManager.getInstance().setFaceConfig(config);
关于抠图内部实现方案如下图所示:
(4) startActivity(new Intent(this, FaceLivenessExpActivity.class))启动界面。
(5)实现FaceProcessCallback,对流程中的回调事件进行处理。
(6)调用LH.startFaceVerify启动实名认证流程,或调用LH.startFaceCompare启动人脸比对流程。
(7)在onConfigCamera回调中,配置摄像头参数,以及设置预览图大小,人脸检测框的坐标。调用LH.setSoundEnable设置是否开启语音。
(8)在整个流程中,根据FaceProcessCallback的回调事件进行界面处理。在进入采集页面后,于希望开始流程的时机调用startFaceVerify或startFaceCompare开始流程。 该界面至少应当包含一个用于显示摄像头预览图像的SurfaceView,但不需要从开始就显示。请保证在onDeviceCheckResult回调后,直到onEnd回调为止的过程中,该SurfaceView可见。
一次正常的采集流程: 调用startFaceProcess -> onBegin被回调 -> 设备环境扫描 -> onDeviceCheckResult被回调-> onBeginCollectFaceInfo被回调 -> 开启摄像头 -> onConfigCamera被回调,用户配置摄像头 -> 开始预览 -> onCollectCompletion被回调(多次,需要更新界面,最后一次回调status为OK或DetectRemindCodeTimeout)-> onBeginRequestRemote 被回调 -> 请求云端进行人脸比对或实名认证 -> onEnd被回调。
一次异常的采集流程: onEnd可能在onBegin后的任何时间被回调,其他中间步骤可能会缺失。此种情况下,onEnd会回调错误码。
(9)采集完成后,会自动将数据发送到在onEnd中获取从服务器获取的实名认证/人脸比对结果。
3.2 质量校验设置
3.3 界面定制说明
(1)如果SDK自带的UI和您的APP不统一,您可以自行修改FaceDetectRoundView。 (2)修改提示语音音频文件,有两种方式。 a、直接替换FaceUI工程raw下的mp3文件和string.xml。 b、FaceEnvironment 提供了setSoundId(FaceStatusNewEnum status, int soundId); 设置提示音资源。FaceStatusNewEnum为不同的状态。soundId为资源文件所对应的resource id。
3.4 采集中的预览区域和检测区域说明
如下图所示(图中背景设置为透明了,可以看出这两个区域): 其中: surfaceView宽高为屏幕的宽高; previewRect的宽高为手机摄像头的宽高; detectRect的宽高是以previewRect为基准计算出来的。 计算方式参照FaceDetectRoundView.java的Rect getPreviewDetectRect(int w, int pw, int ph)方法。 在onConfigCamera中,传入了previewRect和detectRect对象,可以在此处对其进行配置。
4 API 接口
4.1 安全增强级采集SDK初始化接口
安全增强级采集SDK的初始化接口。 如果在同意隐私协议前调用初始化接口,初始化过程会被中止,并在调用同意隐私协议方法后恢复。 在开始采集人脸的流程前,请保证调用了本初始化方法并同意了隐私协议,否则采集流程将无法启动。
void LH.init(Context context, String licenseId, String apiKey, String secretKey);
参数说明:
licenseId:Face为App分配的许可Id,在Face云端平台注册App时获取。
apiKey:百度AI开放平台授权的ApiKey,在Face云端平台注册App时获取。
secretKey:百度AI开放平台授权的secrecKey,在Face云端平台注册App时获取。
4.2 设置用户同意隐私协议接口
通过调用此接口告知安全增强级采集SDK用户是否同意了隐私协议。 在同意隐私协议前,所有对安全增强级采集SDK的调用均会失败,直到同意了隐私协议。
void LH.setAgreePolicy(Context context, boolean agree)
参数说明:
agree:为用户是否同意了隐私协议,true为同意,false为不同意。
4.3 人脸功能管理器FaceSdkManager
- 获取实例 通过调用getInstance()获取人脸功能管理器的实例。
-
人脸功能管理器初始化
public void initialize(final Context context, String licenseID, String licenseFileName, IInitCallback callback)
参数说明:
licenseID: 传入申请License时获取的应用名称+_face_android后缀。
licenseFileName: 鉴权文件名称。
callback :鉴权成功与否回调。 -
设置人脸功能控制参数
void setFaceConfig(FaceConfig config)
参数说明: config:人脸功能控制参数对象。请按照4.1(3)初始化参数配置中的配置项按需进行配置。
4.4 开始实名认证流程
开始实名认证流程。该方法是异步方法,调用后,安全增强级采集SDK自身执行人脸采集和实名认证逻辑。
void LH.startFaceVerify (Activity activity, SurfaceHolder previewSurfaceHolder, FaceProcessCallback processCallback, int deviceCheckTimeout, FaceVerifyInfo info, boolean liveness)
参数说明:
activity:执行人脸采集的Activity。
previewSurfaceHolder:用于展示摄像头预览的SurfaceView的Holder。
processCallback:流程回调,见“FaceProcessCallback接口”。
deviceCheckTimeout:安全检测超时时间,传入正数时,若在该时间内(单位:秒)未完成检测,则跳过。传入-1跳过检测,传入0后台检测。
info:实名认证信息,包含身份证号,姓名等信息。
liveness:是否进行活体检测。
4.5开始人脸比对流程
开始人脸比对流程。该方法是异步方法,调用后,安全增强级采集SDK自身执行人脸采集和人脸比对逻辑。
void LH.startFaceCompare (Activity activity, SurfaceHolder
previewSurfaceHolder, FaceProcessCallback processCallback,int deviceCheckTimeout,FaceCompareInfo info,boolean liveness)
参数说明:
activity:执行人脸采集的Activity。
previewSurfaceHolder:用于展示摄像头预览的SurfaceView的Holder。
processCallback:流程回调,见“FaceProcessCallback接口”。
deviceCheckTimeout:安全检测超时时间,传入正数时,若在该时间内(单位:秒)未完成检测,则跳过。传入-1跳过检测,传入0后台检测。
info:人脸比对信息,包含比对用图片等信息。
liveness:是否进行活体检测。
4.6 取消正在进行的流程
取消正在进行的人脸比对或实名认证流程。调用此接口后,安全增强级采集SDK取消整个流程。请在Activity的onPause中调用此方法,保证界面离开顶端时流程被取消。下次进入界面应当重新开始人脸验证过程。
void LH.cancelFaceProcess()
4.7 采集过程中设置语音开关
设置是否开启人脸采集过程的语音提示。只有采集过程中可以通过此方法开启或关闭语音提示。采集前调用此方法不会生效。采集前若要开启或关闭全局语音提示,请在Face采集SDK的配置项中进行配置。
void LH.setSoundEnable (boolean enable)
4.8 FaceProcessCallback接口
回调类,回调方法顺序随人脸采集流程自上向下:
- onBegin ()
必有。
回调流程开始事件。 - onDeviceCheckResult (int status)
回调设备风险检测结果。无安全插件会认为是未知。无风险或未知会进入人脸采集流程。
若有风险,则不会进行人脸采集流程。此回调方法return后,会直接回调onEnd方法。
若在云端配置了采集后置摄像头的功能,则在本回调开始,会将后置摄像头的图像预览视频流输出到传入的SurfaceHolder上。请从此处开始保证SurfaceView处于可见状态。
status:1代表无风险,-1代表有风险。 - onBeginCollectFaceInfo();
将要开始采集人脸信息,此方法回调后,请保证SurfaceView处于可见状态。 - onConfigCamera(Camera camera,Rect previewRect,Rect detectRect)
此时已经开启前置摄像头,但还未开始预览。此回调方法中可以对camera进行配置,并可以对人脸识别模块的预览Rect和检测Rect进行设置。此回调方法返回后,将开始预览前置摄像头图像。 - onCollectCompletion(FaceStatusNewEnum status, String message, HashMap<String, ImageInfo> base64ImageCropMap, HashMap<String, ImageInfo> base64ImageSrcMap,int currentLivenessCount);
回调人脸采集过程的阶段性结果,供APP刷新界面。
status:按FaceStatusNewEnum的枚举值返回的当前状态。
message:需要在界面展示的提示。
base64ImageCropMap:完成时的抠图图像信息。只有status为OK时才会包含此信息。
base64ImageSrcMap:完成时的原图图像信息。只有status为OK时才会包含此信息。
currentLivenessCount:当前完成的活体验证步骤数,用于界面展示验证进度。 - void onBeginRequestRemote();
开始向服务器发起实名认证/人脸比对请求。
此方法回调后,SurfaceView可以处于不可见状态。 - onEnd (int status,String resultJson)
必有,包括被Cancel的情况。
回调流程结束事件。
status:1代表正常结束, <0的值均表示未正常结束。
resultJson:云端返回的结果。只有status为1时此字段有值。其他情况为空字符串。
onEnd的部分status值列举如下:
1:正常结束,返回云端验证结果。
-1:已经有一个采集验证流程在运行。
-2:云端验证过程异常。
-3:风控验证失败。
-4:更严格情形下的风控验证失败。
-5:摄像头异常。
-6:流程被取消。
-7:线程异常。
-8:筛选图像异常。
-9:采集前流程异常。
-10:活体验证步骤异常。
-11:预览异常。
-12:采集后流程异常。
-13:未初始化安全增强级采集SDK。
-14:未同意隐私协议。
- void setCurrentLiveType(LivenessTypeEnum livenessType);
- void viewReset();
- void animStop();
- void setFaceInfo(FaceExtInfo faceExtInfo); 此4个回调方法为Face采集SDK的ILivenessViewCallback接口的原有方法,本SDK在接到这些回调时会透传给本Callback类的实现。
4.9 实名认证信息类FaceVerifyInfo
实名认证信息类,请调用以下构造方法获取实例。
FaceVerifyInfo(String idCardNumber, String name, int verifyType, String nation, FaceEnum.LivenessControl livenessControl, FaceEnum.SpoofingControl spoofingControl, FaceEnum.QualityControl qualityControl, String phoneNumber)
参数含义:
idCardNumber:证件号。
name:姓名,不必进行编码。组织数据时会对此字段进行URLEncode。
verifyType:证件类型,0:大陆身份证(default);1:港澳居民来往内地通行证;2:外国人永久居留身份证;3:定居国外的中国公民护照。
nation:国家或地区三位大写英文字母缩写。当verify_type为1、2、3时填写国籍3位(国家名英文缩写,除港澳以外参照ISO3166 标准,定居国外的中国公民和港澳居民使用 CHN)
livenessControl:活体控制配置项
spoofingControl:合成图控制配置项
qualityControl:质量控制配置项
phoneNumber:需要风控的电话号码
4.10 人脸比对信息类FaceCompareInfo
人脸比对信息类,请调用以下构造方法获取实例。
FaceCompareInfo(FaceEnum.QualityControl qualityControl, FaceEnum.LivenessControl livenessControl, FaceEnum.FaceType faceType, int faceSortType, String registerImage, FaceEnum.ImageType registerImageType, FaceEnum.FaceType registerFaceType, FaceEnum.QualityControl registerQualityControl, FaceEnum.LivenessControl registerLivenessControl, String phoneNumber)
参数含义:
qualityControl:质量控制配置项
livenessControl:活体控制配置项
faceType:人脸类型
faceSortType:人脸检测排序类型。 0:代表检测出的人脸按照人脸面积从大到小排列;1:代表检测出的人脸按照距离图片中心从近到远排列
registerImage:比对用图片信息
registerImageType:比对用图片类型
registerFaceType:比对用人脸类型
registerQualityControl:比对用质量控制配置项
registerLivenessControl:比对用活体控制配置项
phoneNumber:需要风控的电话号码
4.11 枚举类FaceEnum
FaceVerifyInfo和FaceCompareInfo中使用的枚举类均在FaceEnum中定义。
public enum LivenessControl { NONE, // 不进行控制 LOW, // 较低的活体要求(高通过率 低攻击拒绝率) NORMAL, // 一般的活体要求(平衡的攻击拒绝率, 通过率) (default) HIGH; // 较高的活体要求(高攻击拒绝率 低通过率) }
public enum SpoofingControl { NONE, // 不进行控制 LOW, // 较低的合成图检测要求(高通过率 低攻击拒绝率) NORMAL, // 一般的合成图检测要求(平衡的攻击拒绝率, 通过率) (default) HIGH; // 较高的合成图检测要求(平衡的攻击拒绝率, 通过率) }
public enum QualityControl { NONE, // 不进行控制(default) LOW, // 较低的质量要求 NORMAL, // 一般的质量要求 HIGH; // 较高的质量要求 }
public enum FaceType { LIVE, // 表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等 (default) IDCARD, // 表示身份证芯片照:二代身份证内置芯片中的人像照片 WATERMARK, // 表示带水印证件照:一般为带水印的小图,如公安网小图 CERT, // 表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片 INFRARED; // 表示红外照片:使用红外相机拍摄的照片 }
public enum ImageType { BASE64, // 图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M URL, // 图片的 URL地址( 可能由于网络等原因导致下载图片时间过长) FACE_TOKEN; // 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个 }
5 多进程支持
安全增强级采集SDK支持在指定进程中运行。注意,负责采集和验证Activity应该与安全增强级采集SDK的配置进程在同一进程。
a) 如果需要配置安全增强级采集SDK运行在其它进程,请将如下所有组件都通过 Android:process属性配置在同一个进程中。
<activityandroid:name="com.baidu.liantian.LiantianActivity"android:exported="false"android:theme="@android:style/Theme.Translucent"android:excludeFromRecents="true"android:launchMode="standard"><intent-filter><action android:name="com.baidu.action.Liantian.VIEW"/><category android:name="com.baidu.category.liantian"/><category android:name="android.intent.category.DEFAULT"/></intent-filter></activity><serviceandroid:name="com.baidu.liantian.LiantianService"android:exported="false"><intent-filter><action android:name="com.baidu.action.Liantian.VIEW"/><category android:name="com.baidu.category.liantian"/><category android:name="android.intent.category.DEFAULT"/></intent-filter></service><provider android:authorities="应用包名.liantian.ac.provider" android:name="com.baidu.liantian.LiantianProvider" android:exported="false"tools:replace="android:authorities"/>
b) 请不要为本SDK的provider配置android:multprocess属性。 c) 为了给APP提供更安全的采集和验证流程,请尽可能在APP主进程初始化sdk和进行采集验证。