You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AndroidX UI自动化中条件化配置@Rule适配多版本权限

解决方案

不需要重写AndroidX测试库,只需根据Android系统版本动态构建权限列表,再传入GrantPermissionRule即可解决跨版本兼容问题。

具体实现(Kotlin)

import android.os.Build
import androidx.test.rule.GrantPermissionRule

@Rule
@JvmField
var grantPermissionRule: GrantPermissionRule = run {
    val permissions = mutableListOf(
        "android.permission.ACCESS_FINE_LOCATION"
    )
    // 仅在Android 13及以上版本添加通知权限
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        permissions.add("android.permission.POST_NOTIFICATIONS")
    }
    // 将列表转为可变参数传入grant方法
    grant(*permissions.toTypedArray())
}

原理说明

  • 利用Build.VERSION.SDK_INT判断当前运行设备的系统版本,Build.VERSION_CODES.TIRAMISU是Android 13对应的版本常量(值为33),用常量比直接写数字可读性更强。
  • 通过可变列表先添加基础权限,再根据版本条件添加高版本专属权限,最后通过Kotlin的**展开运算符***将数组转为grant()方法需要的可变参数格式。
  • 这样初始化GrantPermissionRule时,低版本设备只会请求存在的权限,高版本设备会包含通知权限,既不会崩溃也不会弹出权限弹窗。

额外提示

  • 确保你的AndroidX测试库依赖是最新稳定版,避免因旧版本库的bug导致其他问题。
  • 如果是Java项目,逻辑类似:先创建ArrayList,条件添加权限,再转成数组传入GrantPermissionRule.grant()方法。

内容的提问来源于stack exchange,提问作者jerimiah797

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:10:18