如何解决“自动装包”过程中oppo、vivo等手机需要输入密码的问题

简介: 如何解决“自动装包”过程中oppo、vivo等手机需要输入密码的问题

前言



前俩天看到Airtest讨论群里面提出了1个有意思的问题:一位同学在测试自动装包的过程中,发现像oppo、vivo这类品牌的手机在装包过程中都需要输入账号密码,而这会直接让 install() 指令运行失败。


值得思考的是,我们如何保证在安装应用的过程中,同时完成输入账号密码的任务而不中断安装应用的任务呢?


利用多线程解决装包过程输入密码的问题



看到这里,相信很多同学已经想到了可以利用多线程来解决这个问题了。没错,利用python的多线程确实可以帮助我们轻松地实现同时 运行多个任务


关于新建线程,我们需要用到python标准库里面的 threading 模块:


from threading import Thread
# 新建1个新的线程
# 其中function为线程函数,args为传递给线程函数的参数,它必须是tuple类型
t1 = threading.Thread(function, args)
# 将线程设置为守护线程
t1.setDaemon(True)
# 启动线程活动
t1.start()
复制代码


简单了解完python线程的一些基础用法,我们回到刚才的问题上来,在执行安装应用的任务之前,我们可以先开启1个线程,用于等待输入账号密码弹窗的弹出,以及输入账号密码、点击安装等操作:


网络异常,图片无法展示
|


完整的示例代码如下:


# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
from threading import Thread
auto_setup(__file__)
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
def input_pw():
    sleep(5.0)
    # 等待弹窗出现
    wait(Template(r"tpl1604980843615.png", record_pos=(-0.001, -0.029), resolution=(720, 1440)),timeout=60)
    sleep(2.0)
    # 点击输入密码
    touch(Template(r"tpl1604978804097.png", record_pos=(0.211, 0.233), resolution=(720, 1440)))
    sleep(2.0)
    poco("com.coloros.safecenter:id/et_login_passwd_edit").click()
    poco("com.coloros.safecenter:id/et_login_passwd_edit").set_text("password")
    sleep(2.0)
    poco("android:id/button1").click()
    sleep(2.0)
    touch(Template(r"tpl1604979337502.png", record_pos=(-0.003, 0.608), resolution=(720, 1440)))
# 新建用于等待弹窗输入账号密码的线程
a_thread = Thread(target=input_pw)
a_thread.setDaemon(True)
a_thread.start()
install(r"D:\demo\tutorial-blackjack-release-signed.apk")
复制代码


PS:感谢Airtest用户“jxou”提供了上述的解决思路。


知识拓展



1.install()与uninstall()


install()uninstall() 都是Airtest的核心API,分别用于 安装应用和卸载应用 ,并且它们都 仅支持安卓平台


  • install(filename) ,其中 filename 为被安装应用的路径
  • uninstall(package), 其中 package 为被卸载应用的包名


示例:


from airtest.core.api import *
install(r"D:\demo\tutorial-blackjack-release-signed.apk")
uninstall("org.cocos2dx.javascript")
复制代码


2.install_app()与uninstall_app()


airtest的安卓模块 下,也提供了安装和卸载应用的方法,分别是 install_app()uninstall_app()


相比于 install() 方法,install_app(filename,replace=False,install_options=[]) 的参数更加丰富:


  • filepath ,apk文件在PC上的完整路径
  • replace , 如果应用已存在,是否替换,默认为False
  • install_optionsinstall 命令的额外选项,默认是[],可填入 "-l"、"-t"、"-s"、"-d"和"-g" 等参数,用于控制安装apk的行为


其中,install_options 的参数含义如下:


  • "-l" ,将应用安装到保护目录/mnt/asec
  • "-t" ,允许安装AndroidManifest.xml里application指定android:testOnly="true"的应用
  • "-s" ,将应用安装到sdcard
  • "-d" ,允许降级覆盖安装
  • "-g" ,授予所有运行时权限


示例:


from airtest.core.android.android import *
android = Android()
# 非覆盖安装
android.install_app(r"D:\demo\tutorial-blackjack-release-signed.apk",False)
# 覆盖安装
android.install_app(r"D:\demo\tutorial-blackjack-release-signed.apk",True)
android.uninstall("org.cocos2dx.javascript")
复制代码


另外这个安卓模块下,还提供了一些其它的与应用相关的方法:


  • list_app(third_only=False) ,返回packages列表,third_only如果为 True ,只返回所有第三方应用列表
  • path_app(package) ,打印出package的完整路径
  • check_app(package) ,检查package在设备中是否存在


实际的测试应用中,比如我们要往设备中安装某个应用,可以先使用 check_app(package) 检查当前设备是否已经安装了该应用,然后再决定是直接安装还是覆盖安装:


from airtest.core.android.android import *
android = Android()
try:
    android.check_app("org.cocos2dx.javascript")
    print("当前设备已存在待安装应用,执行覆盖安装")
    android.install_app(r"D:\demo\tutorial-blackjack-release-signed.apk",True)
except AirtestError:
    print("当前设备不存在待安装应用,执行非覆盖安装")
    android.install_app(r"D:\demo\tutorial-blackjack-release-signed.apk",False)
复制代码


3.start_app()、stop_app()与clear_app()


其它常用于应用操作的方法还有 start_app()stop_app()clear_app()


  • start_app() ,在设备上启动目标应用,适用于Android和iOS平台
  • stop_app() ,终止目标应用在设备上的运行,适用于Android和iOS平台
  • clear_app() ,清理设备上的目标应用数据,仅适用于Android平台


小结



今天主要跟大家分享了用多线程解决自动装包过程需要输入账号密码的问题,另外还给大家补充了一些airtest在应用操作这方面的方法,奉上新鲜整理好的思维导图,有需要的同学可以先保存起来方便后续查看哦:


网络异常,图片无法展示
|

相关文章
|
15天前
|
数据采集 人工智能 编解码
算法系统协同优化,vivo与港中文推出BlueLM-V-3B,手机秒变多模态AI专家
BlueLM-V-3B是由vivo与香港中文大学共同研发的多模态大型语言模型,专为移动设备优化。它通过算法和系统协同优化,实现了高效部署和快速生成速度(24.4 token/s),并在OpenCompass基准测试中取得优异成绩(66.1分)。模型小巧,语言部分含27亿参数,视觉编码器含4000万参数,适合移动设备使用。尽管如此,低端设备可能仍面临资源压力,实际应用效果需进一步验证。论文链接:https://arxiv.org/abs/2411.10640。
37 9
|
10月前
|
安全 开发者 iOS开发
iOS16系统手机设置开启开发者模式才能安装ipa包
iOS16系统手机设置开启开发者模式才能安装ipa包
329 1
|
10月前
|
移动开发
使用charles来抓取手机App的网络包
使用charles来抓取手机App的网络包
77 1
|
10月前
|
人工智能 安全 Android开发
OPPO召开AI战略发布会,联发科天玑芯构建AI手机时代计算底座
近期,OPPO举办AI战略发布会,会上正式推出了由OPPO AI超级智能体与AI Pro智能体开发平台共同构建的OPPO 1+N智能体生态战略。与此同时,OPPO与联发科展开深度合作,展示了双方在AI手机领域的创新成果,以共同推进“AI手机(AI Smartphone)”的发展,为广大用户带来更为智能、便捷和高效的下一代AI体验。

热门文章

最新文章

  • 1
    【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
  • 2
    【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
  • 3
    【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
  • 4
    算法系统协同优化,vivo与港中文推出BlueLM-V-3B,手机秒变多模态AI专家
  • 5
    MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
  • 6
    OmAgent:轻松构建在终端设备上运行的 AI 应用,赋能手机、穿戴设备、摄像头等多种设备
  • 7
    美团面试:手机扫描PC二维码登录,底层原理和完整流程是什么?
  • 8
    ClKLog支持手机端查询统计数据啦!
  • 9
    【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 10
    Mac微信更新 可备份手机聊天记录
  • 1
    算法系统协同优化,vivo与港中文推出BlueLM-V-3B,手机秒变多模态AI专家
    37
  • 2
    【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
    62
  • 3
    【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
    43
  • 4
    【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
    148
  • 5
    美团面试:手机扫描PC二维码登录,底层原理和完整流程是什么?
    127
  • 6
    MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
    1648
  • 7
    【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    38
  • 8
    ClKLog支持手机端查询统计数据啦!
    47
  • 9
    OmAgent:轻松构建在终端设备上运行的 AI 应用,赋能手机、穿戴设备、摄像头等多种设备
    299
  • 10
    Mobile-Agent:通过视觉感知实现自动化手机操作,支持多应用跨平台
    559