测试activity跳转第三方app时遇到的坑~
发布时间:2019-07-08

一、背景

      小编所在的团队前段时间出现一个比较特殊的bug。 

      输入法做了一个功能按钮,点击可以跳转手机已安装的第三方apk;测试功能全部通过,但在机型适配时发现在OPPO手机上跳转失败了,点击按钮就没有然后了(╯‵□′)╯︵┻━┻。

二、调查过程

      发现问题后,立刻与OPPO的同学进行联系,抛出了问题后,对方给出的答案是:输入法属于后台应用,通过后台应用直接调起其他前台应用是对用户很不友好的行为,因此禁止掉了这一能力; 
      为了验证OPPO确实屏蔽了后台调起前台的能力,小编编写了一个简单的demo,详细内容如下: 
1、在mainactivity中添加点击事件:调起一个后台service模拟输入法环境(输入法作为一个后台应用存在,这里利用service模拟后台环境)。

2、在创建的Myservice中配置调起事件:通过后台service直接去调起第三方apk。

3、执行:

        将该demo放在Android8.1的小米6上运行,log及现象为:

调起后台service→启用第三方apk→(现象:第三方apk被调起);

        将该demo放在相同Android版本的OPPO手机上运行,log及现象为:

调起后台service→启用第三方apk→(现象:手机没有任何反应)。

三、解决方案:

        开发同学给出一个折中的方法,既然后台无法跨进程调起前台应用,那么我们就创建一个自己的前台的隐藏的activity,然后通过前台activity来调起第三方应用,这样就可以规避掉OPPO的屏蔽策略。

        为了证明该方案有效,小编重新改写了下之前的demo:

        1、调起service方法不变;

        2、改写startOtherApp()方法,直接调起一个新建的activity。

        3、在新创建的OneActivity中配置调起第三方apk操作。

        4、给OneActivity添加隐藏属性:在Androidmanifest中添加。

        5、验证:  

       将该demo放在android8.1的小米6和OPPO设备上运行,log及现象为:

调起后台service→调起空的前台activity→前台activity跳转第三方apk→(第三方apk被调起)。

四、总结:

        遇到典型bug,一定要想办法弄明白bug产生的详细原因、解决方案。这样有助于提高个人的测试发散度,遇到类似需求能够立刻指出隐患,规避问题。