首页 > 其他分享 >【装包测试】Android应用权限授权小技巧

【装包测试】Android应用权限授权小技巧

时间:2024-09-05 10:36:01浏览次数:10  
标签:permission 装包 应用 Android 权限 com android pm

此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途

一、前言

大家在日常测试中,每次新安装应用或游戏都有一些前置的权限设置需要点击,但在不同的Android设备上的同意按钮都不完全相同,如果需要提高脚本的通用性以及复用性我们应该怎么办呢?那我们本周就一起来探讨一下这个问题吧~

二、pm授权与取消授权指令详解

PM工具,即包管理器(Package Manager),是Android开发和测试中不可或缺的工具。可以用于执行安装应用程序、查询应用包信息、管理系统权限以及控制应用程序。通常,PM工具位于系统的/system/bin目录下。

pm工具有两个指令参数,分别是 grant(授予应用权限许可)与 revoke(撤销应用权限),在Airtest环境的具体使用如下:

#授予应用权限许可。必需android6.0(API级别23)以上的设备
shell(pm grant <packageName> <permission>)

#撤销应用权限。必需android6.0(API级别23)以上的设备
shell(pm revoke <packageName> <permission>)

在知道了pm工具的使用方法之后,那我们来看一下我们常用的Android应用的权限操作指令有哪些呢?当然,我们这里只是列举了一部分常见的权限指令,更多的权限指令,我们可以自行去搜索一下。

指令说明 指令
应用的电话权限 android.permission.READ_PHONE_STATE
应用存储的读取权限 android.permission.READ_EXTERNAL_STORAGE
应用存储的写入权限 android.permission.WRITE_EXTERNAL_STORAGE
应用打开位置权限 android.permission.ACCESS_COARSE_LOCATION
应用打开摄像头权限 android.permission.CAMERA
应用访问麦克风 android.permission.RECORD_AUDIO
应用读取联系人数据 android.permission.READ_CONTACTS
应用读取短信数据 android.permission.READ_SMS
应用读取设备的日历表 android.permission.READ_CALENDAR
应用写入设备的日历表 android.permission.WRITE_CALENDAR

如果我们需要给微博打开“允许应用的电话权限”,或者关闭“允许应用的电话权限”,那我们可以这么写:

#允许应用的电话权限
shell("pm grant com.sina.weibo android.permission.READ_PHONE_STATE")

#撤销应用的电话权限
shell("pm revoke com.sina.weibo android.permission.READ_PHONE_STATE")

将应用包名跟对应的权限指令传入,即可给对应的应用开启对应权限指令,但有个别权限是需要执行两条权限授权指令,如:读写设备存储权限、读写设备日历表等

#允许应用存储的读写权限
shell("pm grant com.sina.weibo android.permission.READ_EXTERNAL_STORAGE")
shell("pm grant com.sina.weibo android.permission.WRITE_EXTERNAL_STORAGE")

#撤销应用存储的读写权限
shell("pm revoke com.sina.weibo android.permission.READ_EXTERNAL_STORAGE")
shell("pm revoke com.sina.weibo android.permission.WRITE_EXTERNAL_STORAGE")

在装包后通过先行允许对应的权限,再打开应用进行测试,这样我们可以减少这类权限申请弹窗的跳出。或者需要测试应用的权限申请弹窗是否可以正常跳出的时候,可以反复通过关闭对应的权限,再进行打开应用进行测试。

三、使用案例

根据上述所说的命令以及使用方式,我们可以根据自己的测试需求组合一个小小的使用案例,我们这里就利用了微博APP为例,可以看到我们在同意了APP权限之后,直接打开是可以跳过权限弹窗的,当我们撤销关闭掉权限之后,应用的弹窗是照常出现的。

android_grant.gif

参考代码:

# -*- encoding=utf8 -*-
__author__ = "Airtest"

from airtest.core.api import *

auto_setup(__file__)

from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

# 定义授予权限的函数
def grant_permit():
    #先行允许应用的电话权限
    shell("pm grant com.sina.weibo android.permission.READ_PHONE_STATE")
    print("已允许应用的电话权限")

    #允许应用存储的读写权限
    shell("pm grant com.sina.weibo android.permission.READ_EXTERNAL_STORAGE")
    shell("pm grant com.sina.weibo android.permission.WRITE_EXTERNAL_STORAGE")
    print("已允许应用存储的读写权限")

# 定义撤销权限的函数
def revoke_permit():

    #撤销应用的电话权限
    shell("pm revoke com.sina.weibo android.permission.READ_PHONE_STATE")
    print("已撤销应用的电话权限")

    #撤销应用存储的读写权限
    shell("pm revoke com.sina.weibo android.permission.READ_EXTERNAL_STORAGE")
    shell("pm revoke com.sina.weibo android.permission.WRITE_EXTERNAL_STORAGE")
    print("已撤销应用存储的读写权限")

    
if __name__ == "__main__":
    #安装微博app
    install("./com.sina.weibo.apk")

    #点击确认安装按钮
    poco("com.sonymobile.cta:id/btn_ok").wait_for_appearance()
    poco(text="确定").click()
    
    #先允许微博的所需权限
    grant_permit()
    
    #点击打开微博App
    start_app("com.sina.weibo")

    #点击开屏的用户隐私确认
    poco(text="我知道了").click()

    # 检查微博是否成功打开
    if exists(Template(r"tpl1725350455008.png", record_pos=(0.001, -0.803), resolution=(1080, 2520))):
        print("已成功打开微博")
        
    #关闭微博
    stop_app("com.sina.weibo")
    
    #移除微博的所需权限
    revoke_permit()
    
     #点击打开微博App
    start_app("com.sina.weibo")
    sleep(3.0)

    # 检查权限申请弹窗是否出现
    if exists(Template(r"tpl1725350984228.png", record_pos=(0.001, -0.061), resolution=(1080, 2520))):
        print("权限申请弹窗正常跳出")

四、小结

本周推文我们介绍了关于Android设备的应用权限授权以及撤销授权的命令以及在Airtest环境中的具体的使用方法。包括了常见的电话权限、媒体存储权限等等。大家可以根据自己的需求去找更多的权限指令,并运用起来。

同时如果大家在使用过程中有一些新的使用方式或者遇到了问题,又或者有任何想要深入了解的知识点,欢迎在官方交流群(526033840)里告诉我们或者提交issue。


AirtestIDE下载:airtest.netease.com/
Airtest 教程官网:airtest.doc.io.netease.com/
搭建企业私有云服务:airlab.163.com/b2b

官方答疑 Q 群:526033840

标签:permission,装包,应用,Android,权限,com,android,pm
From: https://www.cnblogs.com/AirtestProject/p/18397906

相关文章

  • 网站提示“文件权限错误”错误如何解决
    当您遇到“文件权限错误”时,这通常意味着文件系统上的某个文件或目录不允许当前用户进行所需的访问操作,如读取、写入或执行。这类问题常见于Web服务器环境中,尤其是当试图上传文件、保存配置文件或执行脚本时。以下是解决文件权限错误的一些步骤:基础排查检查文件或目录的所有权......
  • 2024最新最全【Android Studio 】下载及安装和【Gradle配置】零基础入门到精通
    文章目录下载安装修改Sdk的位置创建项目修改Gradle的位置查看AS版本工具栏–View项工具栏–Build下的功能说明BuildVariants视图说明下载模拟器(avd)/安卓虚拟设备屏幕熄灭功能关闭虚拟设备功能删除自己开发的应用软件将开发的应用运行到虚拟设备上。修改模拟器的位置下......
  • 服务器运维-sudo权限控制的sudoers配置文件详细说明以及利用sudo对用户账号分组权限控
    一、服务器运维-sudo权限控制的sudoers配置文件详细说明1.sudo权限控制的sudoers配置文件详细说明:[root@test~]#cat/etc/sudoers##Sudoersallowsparticularuserstorunvariouscommandsastherootuser,withoutneedingtherootpassword.##该文件允许特定......
  • Android 使用拦截器结合协程实现无感知的 Token 预刷新方案
    背景在应用中,我们通常使用Token作为用户认证的凭证。为了安全起见,Token一般设置较短的有效期,并通过refreshToken进行续期。传统的做法是当服务端返回Token过期的响应(如401)时,再进行刷新,但这种方式可能导致用户体验不佳(如突然的登录状态丢失、请求失败等)。网上关于A......
  • 安装Android Studio及第一个Android工程可能遇到的问题
    AndroidStudio版本众多,电脑操作系统、电脑型号、电脑硬件也是多种多样,幸运的半个小时内可以完成安装,碰到不兼容的电脑,一天甚至更长时间都无法安装成功。Android安装及第一个Android工程分为4个步骤,为什么放到一起讲,因为只有Android的第一个工程运行到虚拟机上,Android的开......
  • android 二维码扫描的逻辑
    用的是ZXing库依赖有//二维码依赖(ZXing库)implementation'com.journeyapps:zxing-android-embedded:4.3.0'implementation'androidx.appcompat:appcompat:1.4.2' 1.建立一个二维码扫描的工具类(QrCodeScanner)里面的逻辑有可以根据不同的标识符处理不同的扫描......
  • 在Android中发送网络请求(post和get的区别)
    get//将参数附加到URLStringurlWithParams=HttpConfig.GET_USER_NAME+"?qrCodeContent="+msg;//构建请求Requestrequest=newRequest.Builder().url(urlWithParams).addHeader("Authorization&q......
  • mac 上golang编译 安卓系统的so 错误 'android/log.h' file not found
    lib.gopackagemainimport"C"//exportSpeedTestfuncSpeedTest(config*C.char){ configContent:=C.GoString(config) run(configContent)}funcmain(){}需要安装NDK,用Androidstudio安装,在SDKManeger的SDKTool里选择安装NDK(sidebyside),成功后一般在......
  • Android 12.0 wifi设置静态ip功能实现
    1.前言在12.0的系统rom定制化开发中,在某些功能开发中,在wifi模块中,有产品需要要求设置wifi静态ip功能,而系统中wifi连接后ip是动态的,每次开机后连接wifi的ip就是不固定的,所以产品需要采用固定ip,就需要实现静态ip功能2.wifi设置静态ip功能实现的核心类frameworks\base\wifi\ja......
  • 网站提示:”会话目录写入权限不足“
    当网站提示“会话目录写入权限不足”时,这意味着PHP会话文件无法写入指定的会话目录。这通常是由目录权限、所有者或PHP配置问题引起的。以下是一些排查和解决该问题的方法:1.检查会话目录首先,确认PHP会话目录的位置和权限。查看PHP配置创建一个 info.php 文件,内容......