首页 > 其他分享 >Android自动化实现

Android自动化实现

时间:2024-01-17 17:14:18浏览次数:24  
标签:实现 bili appActivity apk intent 自动化 Android tools find

基于Appium框架实现手机app RPA

参考资料

一、基础环境搭建

关于相关软件的 百度网盘:https://pan.baidu.com/s/1uZBxE6e1RoBdQQDVOIrnqA?pwd=yang

  1. 安装client编程库

    pip install appium-python-client
    
  2. 安装Appium Server

    下载百度网盘连接中的:Appium-windows-1.15.1.exe

  3. 安装JDK

    百度网盘链接:https://pan.baidu.com/s/1MEqywawXQ_tYf6k8h9by3A?pwd=yang

    推荐使用jdk 1.8 版本,使用jdk 11.0可能会报错

    JDK安装完成后需要配置环境变量 如:JAVA_HOME d:\tools\java\jdk1.8.0_211

  4. 安装Android SDK

    下载第一个百度网盘链接中的:androidsdk.zip

    下载并解压完成后,添加系统环境变量 ANDROID_HOME 值为 d:\tools\androidsdk

    此外,将adb.exe所在目录加入PATH系统环境变量 d:\tools\androidsdk\platform-tools\

二、连接手机

  1. 在你运行程序的电脑上 用 USB线 连接上 你的安卓手机
  2. 进入 手机设置 -> 关于手机 ,不断点击 版本号 菜单(7次以上)
  3. 退出到上级菜单,在开发者模式中,启动USB调试(不同的手机有不同的设置需求,可以自行百度,如OPPO手机需( 将选择USB配置设置为MIDI);开启 禁止权限监控

三、命令

  1. 查看是否成功连接手机

    adb devices -l
    -------#若出现一下结果则链接成功#------------
    List of devices attached
    f5865013               device product:PDPM00 model:PDPM00 device:OP4A47 transport_id:5
    
  2. 查看从软件商城安装的(无apk安装包)的app的appPackageappActivity参数命令

    需要现在手机上启动程序,让程序页面处于最上层

    adb shell dumpsys activity recents | find "intent={"
    
    -------#输出结果的第一行则是该app的相关数据#------------
    intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=tv.danmaku.bili/.MainActivityV2}
    intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000300cmp=com.huawei.android.launcher/.unihome.UniHomeLauncher}
    intent={flg=0x10804000 cmp=com.android.systemui/.recents.RecentsActivity bnds=[48,1378][10322746]}
    intent={flg=0x10000000 cmp=com.tencent.mm/.ui.LauncherUI}
    
    #-------------
    cmp=tv.danmaku.bili/.MainActivityV2
    
    appPackage = tv.danmaku.bili
    appActivity = .MainActivityV2
    
  3. 有apk安装包,查看app的appPackageappActivity参数

    • 查看 appPackage 在命令行窗口执行

      d:\tools\apk\bili.apk --> apk文件在电脑中的路径

    d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "package: name="
    
    -------------
    # 输出
    package: name='tv.danmaku.bili' versionCode='5531000' versionName='5.53.1' platformBuildVersionName='5.53.1' compileSdkVersion='28' compileSdkVersionCodename='9'
    
    则 appPackage = tv.danmaku.bili
    
    • 查看 appActivity 在命令行窗口执行
    d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "launchable-activity"
    
    -----------
    # 输出
    launchable-activity: name='tv.danmaku.bili.MainActivityV2'  label='' icon=''
    
    则 appActivity = tv.danmaku.bili.MainActivityV2
    或 appActivity = .MainActivityV2
    

四、测试

  1. 先通过 adb devices -l检测电脑是否成功连接手机

  2. 在手机上启动某个app程序,这里以哔哩哔哩为例

  3. 在电脑命令行窗口输入命令查看启动的手机app的appPackageappActivity参数值

    • 无apk

      adb shell dumpsys activity recents | find "intent={"
      
    • 有apk

      • appPackage参数值
      d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "package: name="
      
      • appActivity参数值
      d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "launchable-activity"
      
  4. 打开安装好的Appium Server程序

    点击编辑配置,按搭建环境是配置的ANDROID_HOMEJAVA_HOME环境变量的值输入即可,并点击保存并重新启动

    image-20230905110649431

    点击启动服务器

  5. 编辑python自动化程序作为客户端

    desired_caps字典中的appPackageappActivity输入通过上面说的方法查询到的值对应输入即可

    from appium import webdriver
    from selenium.webdriver.common.by import By
    
    
    desired_caps = {
        'platformName': 'Android',  # 被测手机-安卓
        'platformVersion': '12',    # Android版本
        'deviceName': 'xxx',        # 设备名称
        'appPackage': 'tv.danmaku.bili',    # 启动APP Package名称
        'appActivity': '.MainActivityV2',  # 启动Activity名称
        # 'unicodeKeyboard': True,    # 使用自带输入法,输入中文是填True,输入中文时需要
        # 'resetKeyboard': True,      # 执行完程序恢复原来的输入法,输入中文时需要
        'noReset': True,            # 不重置App,【重要】
        'newCommandTimeout': 6000,
        'automationName': 'UiAutomator2'
    }
    
    # 连接Appium Server,初始化自动化环境
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_capabilities=desired_caps)
    
    # 设置缺省等待时间
    driver.implicitly_wait(10)
    
    driver.find_element(By.ID, 'expand_search').click()
    
    driver.find_element(By.ID, 'search_src_text').send_keys('yuanshen')
    
    driver.find_element(By.ID, 'action_search').click()
    
    eles = driver.find_elements(By.ID, 'title')
    
    for ele in eles:
        # 打印标题
        print(ele.text)
    
    input('**** Press to quit..')
    # 根据id定位搜索框位置
    driver.quit()
    

    在启动程序后,手机会自动安装Appium Settings程序,需要手动通过安装一下,之后就不需要再动手机了

以上为学习白月黑羽大佬文档后的总结,原文链接:https://www.byhy.net/tut/auto/appium/01/

标签:实现,bili,appActivity,apk,intent,自动化,Android,tools,find
From: https://www.cnblogs.com/yangxsby/p/17970473

相关文章

  • ETLCloud详解,如何实现最佳实践及问题排查
    ETLCloud介绍ETLCloud是新一代全域数据集成平台,领先于市场同类产品的数据集成平台(DataOps),只需单击几下即可完成数据清洗转换、传输入仓等操作,具备高效、智能、一站式的全域数据集成优势,如:毫秒级实时数据同步支持异构数据源实时数据监听读取,实时数据通过经过清选、转换后可以实时......
  • 国内首台“无人介入”LNG全自动化装车撬首装成功
    近日,国内首台“无人介入”LNG全自动化装车撬在某LNG接收站成功完成首次装车。该装车撬由中国船舶第七一六研究所、连云港杰瑞自动化有限公司、中国石化天然气分公司青岛LNG、中国石化工程建设有限公司联合研制,是国内该领域的全新突破,创新槽车充装作业模式,以全新技术开启LNG行业充装......
  • 深耕细作,持续发展|企业级快速开发平台助力实现流程化办公!
    新时代,新机遇,新挑战!在新的发展形式下,应用更专业的办公利器,在实现流程化办公的路途中就会事半功倍,获得可持续发展。流辰信息作为一家企业级快速开发平台服务商,一直在低代码开发市场深耕发展,厚积薄发,增强自主创新能力,持续为实现数字化转型而努力奋斗。1、认识新形势,迎接新挑战当......
  • 你不知道的vue3:使用runWithContext实现在非 setup 期间使用inject
    前言日常开发时有些特殊的场景需要在非setup期间调用inject函数,比如app中使用provide注入的配置信息需要在发送http请求时带上传给后端。对此我们希望不在每个发起请求的地方去修改,而是在发起请求前的拦截进行统一处理,对此我们就需要在拦截请求的函数中使用inject拿到app注入的......
  • SpringBoot+MybatisPlus+dynamic-datasources实现连接Postgresql和mysql多数据源
    场景dynamic-datasource-spring-boot-starter实现动态数据源Mysql和Sqlserver:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/117356693SpringBoot中整合MybatisPlus快速实现Mysql增删改查和条件构造器:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail......
  • 《机器人流程自动化能力评估体系 第1部分:系统和工具》行标发布
    2023年8月,工业和信息化部公告(2023年第17号)批准发布多项行业标准,由中国通信标准化协会提出并归口,中国信息通信研究院、南京新一代人工智能研究院牵头制定的YD/T4391.1-2023《机器人流程自动化能力评估体系第1部分:系统和工具》发布,标准已于2023年11月1日实施。该标准是RPA产业推进......
  • python 切片slice和实现一个切片类
    alist=[2,5,32,34,11,44,65,113]print(alist[::])##取所有alist[2,5,32,34,11,44,65,113]print(alist[::-1])##alist倒序[113,65,44,11,34,32,5,2]print(alist[::2])##取alist偶数位数值[2,32,11,65]print(alist[1::2])##取alist奇数位数值[5,34,44,......
  • C# websocket服务端实现
    1、创建一个winform项目2、创建websocket服务端类WebSocket_Service.cs1usingSystem;2usingSystem.Collections.Generic;3usingSystem.ComponentModel;4usingSystem.Linq;5usingSystem.Net;6usingSystem.Net.Sockets;7usingSystem.Security......
  • 实现连贯IT硬件资产管理的6个最佳实践
    随着业务的发展,对更好服务体验的需求成倍增加,服务运营必须跟上这一需求。此外,在应对持续的经济逆风和IT人才紧缩等全球挑战的同时,企业需要利用现有的IT投资实现更多目标。从配置IT资产和利用数据中心到确保跨区域的服务可用性,有凝聚力的IT资产管理策略可以帮助企业掌握这......
  • 实现HTTP请求的重定向处理
    HTTP重定向是一种常见的Web技术,用于将用户从一个URL地址导向到另一个URL地址。重定向可以用于多种目的,例如网站重新设计、临时移动页面或处理URL重写。理解如何处理HTTP重定向对于Web开发者来说是至关重要的。以下是实现HTTP请求重定向处理的基本步骤:1.确定重定向需求首先,你需要明......