当前位置: 首页 > news >正文

调试android 指纹遇到的坑

Android8以后版本

一、指纹服务不能自动
指纹服务fingerprintd(biometrics fingerprintservice),可以手动起来,但是在init.rc中无法启动。

解决办法:

1.抓取开机时kernel log ,确认我们的启动指纹服务的init.rc 文件有被init.cpp加载进来,如图所示


注: push 进去的init.rc 要跟目录里面的其他权限保持一致,指纹的init.rc 文件在系统目录:vendor/etc/init

2.不论SELinux策略是否关闭,你都需要写好你的te文件。

3.请用adb shell ls -lZ 查看你的 service 文件,看下文件类型是不是同你在te文件file_contexts里面注册的文件类型一样,如图所示


二、指纹服务不能回调给framework
framework调用IBiometricsFingerprint接口enumedate方法时,指纹服务fingerprintd 的enumedate方法能够被调用
但是我们回调notify(&message) 时候,framework中的回调函数onEnumerate()不能执行。

解决办法:

在你的biometrics fingerprint service te 文件里面用vndbinder_use(xx) 代替 binder_use(xx),如下图所示

xx指你的biometrics fingerprint service

三、enroll时候报错
在hal层成功加载之后,进入到enroll界面。发现还没有录入,就自动退出enroll界面。
framework 在enroll 之前会调用 enumedate(),cancel(),pre_enroll() 等函数,如果这些函数,没执行成功,或者return 一个错误的值。
就enroll 不了。

解决方法:

实现上述的函数,按照要求,返回或者回调相关的值。

四、enumedate()函数策略问题
此函数是枚举 所有的指纹模板。需要你一个一个回调给framework

1.指纹id为0时候,需要gid = 0;fid = 0;remaining_templates = 0

2.当指纹id不为0的时候,需要把gid ,fid,remaining_templates 报上去
当时最后一个模板的时候,remaining_templates要为0

五、SELinux
android 8.0 SELinux 发生了比较大的变化,目前SELinux 编译出来,会生成在两个目录:

1.system/etc/sepolicy
2.vendor/etc/sepolicy

编译SELinux 不能像以前那样只编译bootimage.目前编译bootimage 是生成不了Selinux 文件的,
暂时只能想到全部编译的方法。

检验SeLinux 是否编译到的办法:

1.android 8.0之前,可以看下这out/project/obj/sepolicy_interdaiates/policy.conf这个文件里面有没有
自己书写的selinux 规则

2.android 8.0之后,看下system/etc/sepolicy或者vendor/etc/sepolicy 有没有自己书写的selinux 规则

六、从源码中关闭SELinux安全策略
代码位置:/system/core/init/init.cpp

修改selinux_is_enforcing() 函数为下面

static bool selinux_is_enforcing(void){
    return false; //force set selinux permissive.
    if (ALLOW_PERMISSIVE_SELINUX) {
        return selinux_status_from_cmdline() == SELINUX_ENFORCING;
    }
    return true;
}

七、app加载jni编译出来的.so报错问题
如果你app是在系统编译,然后你install安装的,很容易出现此问题

1.报错大概具体如下:

java.lang.UnsatisfiedLinkError: dlopen failed: library "xx.so"
("/system/lib/xx.so") needed or dlopened by
"/system/lib/libnativeloader.so" is not accessible for the namespace
"classloader-namespace"at java.lang.Runtime.loadLibrary0(Runtime.java:977)
 at java.lang.System.loadLibrary(System.java:1602)

原因:android 7.0,发生一些行为变更,app不能调用系统的私有.so 文件。只能调用系统的公有.so

解决方案:

把自己jni生成的.so 放在/system/etc/public.libraries.txt 或者/vendor/etc/public.libraries.txt中去。

然后把public.libraries.txt push 进去

八、CST 指纹测试失败

九、SPI通信失败

十、识别率低

十一、唤醒慢

十二、指纹无法工作


http://www.mrgr.cn/news/79141.html

相关文章:

  • xss总结标签
  • skywalking的使用
  • Deformable Detr回顾
  • Mac——Cpolar内网穿透实战
  • K8S集群常用命令
  • Vue 学习之旅:核心技术学习总结与实战案例分享(vue指令下+计算属性+侦听器)
  • 右值引用和完美转发【C++11】
  • flask简易版的后端服务创建接口(python)
  • 【时间序列预测】基于Pytorch实现CNN_LSTM算法
  • 典型的调度算法--短作业优先调度算法
  • 写译热点单词
  • STM32 I2C案例2:硬件实现I2C 代码书写
  • 【Linux---10】本地机器 <=> 服务器 文件互传
  • 工业—使用Flink处理Kafka中的数据_ProduceRecord2
  • 【RDMA】RDMA read和write编程实例(verbs API)
  • React第十一节 组件之间通讯之发布订阅模式(自定义发布订阅器)
  • 微信小程序横滑定位元素案例代码
  • 【go】select 语句case的随机性
  • Python矩阵并行计算;CuPy-CUDA 实现显存加速:;在Python中实现显存加速或卸载;CuPy 和 NumPy 区别
  • compose组件库
  • java调用cmdsh命令
  • 流媒体之linux下离线部署FFmpeg 和 SRS
  • MongoDB集群的介绍与搭建
  • 【测试工具JMeter篇】JMeter性能测试入门级教程(七):JMeter断言
  • pset2 substitution.c
  • Linux内核__setup 宏的作用及分析