美文网首页登录
Android 7.0项目上的指纹老化测试App开发

Android 7.0项目上的指纹老化测试App开发

作者: 飞飞飞_Android | 来源:发表于2017-05-15 22:07 被阅读110次

    开发来源:Android7.0项目上,公司测试提出一个老化fingerprint测试的case,运用机械臂去大量测试手机指纹记录其成功失败次数,提出开发app的需求。

    具体需求如下:

    1. 异常-开机初始化:
      使用测试APK自动执行手机重启-指纹解锁(使用指纹胶套)-软件判断解锁是否成功以及解锁时间-成功后则自动PASS+1,失败则FAIL+1-手机重启-10000次循环
    2. 中断老化测试:
      打开指纹中长期稳定性APK,手机灭屏,正面握持,手指长按指纹触摸面,手机亮屏解锁APK记录的测试次数加1,2s后自动灭屏,1s后自动解锁亮屏,软件APK记录识别次数,识别成功次数,失败次数,直到次数达到80000次

    ** 关于framework层的fingerprint相关代码另开贴梳理,该篇主要记录该apk开发过程的问题记录。(该apk在源码环境编译)**

    1. 关于manifest中的权限配置
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 接受开机广播的权限
    <uses-permission android:name="android.permission.SHUTDOWN"/> 关机权限
    <uses-permission android:name="android.permission.DEVICE_POWER" />  电源管理权限
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 无锁屏权限
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 锁屏权限
    <uses-permission android:name="android.permission.USE_FINGERPRINT"/> 指纹功能权限
    <uses-permission android:name="android.permission.REBOOT" /> 重启权限 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    
    2.打包成系统apk

    manifest中配置shareUserId,代表apk进程是系统进程;
    android.mk文件中配置a打包apk签名为platform;

     manifest:  android:sharedUserId="android.uid.system"
     android.mk:  LOCAL_CERTIFICATE := platform 
    
    3.如何开启指纹测试
    判断手机是否具有指纹硬件
    mFingerprintManager = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
    mFingerprintManager.isHardwareDetected()
    
    启动指纹测试
    mFingerprintManager.authenticate(null, CancellationSignal, 0, AuthCallback, null);
    

    CancellationSignal,该参数用于cancel服务
    AuthCallback,是回调参数,用于传入回调方法

    回调方法
    private FingerprintManager.AuthenticationCallback mAuthCallback = new FingerprintManager.AuthenticationCallback() {
            @Override
            public void onAuthenticationError(int errorCode, CharSequence errString) {}
            @Override
            public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {}        
            @Override
            public void onAuthenticationFailed() { }        
            @Override
            public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {} 
    

    指纹识别开始时,都会先会进入onAuthenticationHelp,之后进行指纹判断,fail的话进入onAuthenticationFailed,成功的话进入onAuthenticationSucceeded,如果多次测试失败或者测试被cancel会进入onAuthenticationError,具体的errorCode,errString可以打印出来,分析原因。

    需要注意的是:

    • 测试成功进入onAuthenticationSucceeded后,该次测试过程会结束。
    • 测试进入onAuthenticationFailed,测试过程并不会停止,会继续捕捉指纹进行识别,直到识别5次失败后,进入onAuthenticationError,测试过程才会结束。
    • 当然如果有需要的话,我们可以在fail后通过调用mCancellationSignal.cancel()方法结束测试。
    4. 系统默认指纹测试必须当apk前台时进行
      private boolean canUseFingerprint(String opPackageName, boolean requireForeground, int uid,
            int pid) {
        ...  if (requireForeground && !(isForegroundActivity(uid, pid) || currentClient(opPackageName))){
            Slog.w(TAG, "Rejecting " + opPackageName + " ; not in foreground");
            return false;
        }  }
    

    FingerprintService.java中有代码如上,当opPackageName该apk试图进行指纹识别,但该apk并不在前台,则会报错reject。解决办法如下,直接对某些需要使用指纹识别测试的apk赋予非前台运行的逻辑:

     if (isKeyguard(opPackageName) || "com.huaqin.hqlock".equals(opPackageName)) {
            return true; // Keyguard is always allowed
        }
    

    以上4点是开发apk中遇到的绊子

    相关文章

      网友评论

        本文标题:Android 7.0项目上的指纹老化测试App开发

        本文链接:https://www.haomeiwen.com/subject/piygtxtx.html