开发者中心

作者:辛鹏飞 日期:2021-12-28

1、SDK的混淆规则有哪些?

SDK 内部已经自带了混淆规则,打包的时候会自动将 SDK 中的混淆规则和你们自己的混淆规则合并,所以无需手动额外添加混淆规则。

2、添加了网络权限,还是无法进行活体检测

Android P 开始,默认拦截了非 HTTPS 的请求,所以在 **AndroidManifest.xml **文件的<Application/>标签中添加如下代码即可:

android:usesCleartextTraffic="true"

在高版本系统中,新建一个文件 **network_security_config.xml **内容如下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

然后在 AndroidManifest.xml 文件中的 Application 标签中引用就可以了。

android:networkSecurityConfig="@xml/network_security_config"

3、关于 64k 问题

如果在集成的时候遇到 64k 错误,请按如下配置:

1.在 app 的 build.gradle 中添加 multiDexEnabled true

android {
	...
	defaultConfig {
		...
       multiDexEnabled true
   }
}

2.添加依赖并同步一下工程:

implementation 'com.android.support:multidex:1.0.3'

如果您使用的是 AndroidX 依赖:

implementation "androidx.multidex:multidex:2.0.1"

3.在你们自己的 Application 类中,继承于 MultiDexApplication 类,或者在 Application 类中重写如下方法:

@Override
protected void attachBaseContext(Context base) {
	super.attachBaseContext(base);
	MultiDex.install(this);
}

4、令牌无效(000400)

**原因1:**从服务端获取的 authToken 超过了 30 分钟;

**解决方案:**代码中缓存 token,使用时先判断有效期,如果超过有效期则重新获取 token,为了留有一些余地,建议超时判断可以设置为 25 分钟;

**原因2:**配置的 appKey 不对;

**解决方案:**检查配置的 appKey 是否正确;

5、活体检测页面按 home 键,再次进来后预览框黑屏

**原因:**SufaceView 的 holder 没有跟相机绑定,所以监控不到 SufaceView 的状态变化,所以导致黑屏;

**解决方案:**SurfaceView 实现 SurfaceHolder.Callback 接口,并实现接口方法,在 surfaceCreated 方法中调用如下代码将 holder 绑定到相机上;

@Override
public void surfaceCreated(SurfaceHolder holder) {
	OnlineAliveDetectorApi.getInstance().bindSurfaceHolder(holder);
}

6、调用活体检测黑屏

报错日志如下所示:

W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.WindowManager android.app.Acti
W/System.err:     at com.chuanglan.alivedetected.a.b.a(Unknown Source:8)
W/System.err:     at com.chuanglan.alivedetected.a.a.a(Unknown Source:12)
W/System.err:     at com.chuanglan.alivedetected.api.OnlineAliveDetectorApi.bindSurfaceHolder(Unknown Source:4)
W/System.err:     at com.chuanglan.alive.demo.widget.AliveDetectSurfaceView.surfaceCreated(AliveDetectSurfaceView.java:63)
W/System.err:     at android.view.SurfaceView.updateSurface(SurfaceView.java:856)
W/System.err:     at android.view.SurfaceView$2.onPreDraw(SurfaceView.java:160)
W/System.err:     at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1088)
W/System.err:     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2856)
W/System.err:     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1819)
W/System.err:     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7781)
W/System.err:     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1031)
W/System.err:     at android.view.Choreographer.doCallbacks(Choreographer.java:854)
W/System.err:     at android.view.Choreographer.doFrame(Choreographer.java:789)
W/System.err:     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1016)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:883)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:100)
W/System.err:     at android.os.Looper.loop(Looper.java:224)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7590)

2022-01-26 16:52:10.839 7317-7317/com.chuanglan.alive.demo W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

检查是否调用初始化方法。

可以通过 tag 过滤日志来查看初始化是否成功:PROCESS_LOGTAG。