虹软人脸算法WIFI信息变化导致授权失败
- 开发平台基本信息
- 补丁下载地址
- 前言
- 问题描述
- 解决方法
开发平台基本信息
芯片: 高通SDM450
版本: Android 9.0
kernel: msm-4.9
补丁下载地址
https://gitee.com/Hebin320/csdn_patch
前言
人脸算法授权会获取设备终端的一些硬件信息进行算法绑定,而如果设备终端的信息发生改变算法授权就会失效;上一篇讲到了IMEI发生变化导致虹软算法失效的解决,具体可以看 虹软人脸识别因IMEI变化导致授权失败
问题描述
虹软算法在绑定设备终端的硬件信息中,有保存wifi的硬件信息,而wifi的硬件信息会随着wifi驱动的卸载与加载发生变化,而Android原生的代码中,开关wifi都会卸载、挂载wifi驱动;这使得在使用人脸算法的时候,开关wifi算法会认为设备终端的硬件信息发生了改变。
解决方法
通过问题的分析,可以得出解决方案就是在开关wifi的时候,只有第一次才会去加载wifi驱动,加载成功之后,再开关wifi都不要去卸载以及重新挂载wifi驱动;并且在开机的时候,系统拉起来之前,去开关一次wifi,把wifi驱动挂载。修改文件路径是:
- frameworks/opt/net/wifi/libwifi_hal/driver_tool.cpp
- frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
具体修改patch如下:
diff --git a/libwifi_hal/driver_tool.cpp b/libwifi_hal/driver_tool.cpp
old mode 100644
new mode 100755
index 3089ee0..3f2774d
--- a/libwifi_hal/driver_tool.cpp
+++ b/libwifi_hal/driver_tool.cpp
@@ -44,16 +44,33 @@ bool DriverTool::TakeOwnershipOfFirmwareReload() {return true;}+bool isFirstLoad = true;
+bool isLoadDriver = false;
+bool DriverTool::LoadDriver() {
- return ::wifi_load_driver() == 0;
+ //return ::wifi_load_driver() == 0;
+ if(isFirstLoad){
+ if(::wifi_load_driver() == 0){
+ isFirstLoad = false;
+ isLoadDriver = true;
+ return true;
+ }
+ return false;
+ }else{
+ isLoadDriver = true;
+ return true;
+ }}bool DriverTool::UnloadDriver() {
- return ::wifi_unload_driver() == 0;
+ //return ::wifi_unload_driver() == 0;
+ isLoadDriver = false;
+ return true;}bool DriverTool::IsDriverLoaded() {
- return ::wifi_unload_driver() != 0;
+ //return ::wifi_unload_driver() != 0;
+ return isLoadDriver;}bool DriverTool::IsFirmwareModeChangeNeeded(int mode) {
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
old mode 100644
new mode 100755
index fc98f4e..27ded35
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -654,7 +654,25 @@ public class WifiServiceImpl extends IWifiManager.Stub {} catch (RemoteException e) {/* ignore - local call */}
- }
+ }else{
+ try {
+ setWifiEnabled(mContext.getPackageName(), true);
+ } catch (RemoteException e) {
+ /* ignore - local call */
+ }
+ final WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(1000);
+ wifiManager.setWifiEnabled(false);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }).start();
+ }}public void handleUserSwitch(int userId) {
--