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

Mac运行安卓集成测试时如何给应用授予相关权限?

安卓模拟器adb权限授予不生效解决方案

核心原因

默认情况下flutter drive运行时会自动重新安装应用,你提前执行的adb shell pm grant命令授权的是安装前的旧应用,新安装的应用权限会被重置,这是最常见的失效原因。

其他可能原因

  • 安卓版本权限适配问题:Android 13(API 33)及以上版本废弃了WRITE_EXTERNAL_STORAGE、READ_EXTERNAL_STORAGE等旧存储权限,未补充对应新媒体权限会导致存储授权不生效
  • 多设备/模拟器同时连接时,adb命令未指定目标设备,权限被授予到其他设备上
  • 模拟器未完全启动就执行adb命令,授权请求未被正确接收

修复方案

1. 调整脚本执行逻辑

先手动构建安装应用,授予权限后再执行测试,跳过flutter drive的默认安装步骤。如果你的应用targetSdk版本≥33,需要额外补充媒体权限授权命令。

2. 修复后的脚本示例

integration_test.sh

# for tablet iPad Pro 9.7 inch
# xcrun simctl privacy 33FCDA0F-76BB-412B-A99B-FDD0F423A9B9 grant location-always br.com.xxx.app

# for iphone
# xcrun simctl privacy EED25E77-2BC6-4FB1-9061-FC8F7E57B0B4 grant location-always br.com.xxx.app

# 等待模拟器完全启动
adb wait-for-device

# 构建安卓测试包
flutter build apk --debug

# 卸载原有应用避免缓存冲突
adb uninstall br.com.xxx.app

# 安装新构建的测试包
adb install build/app/outputs/flutter-apk/app-debug.apk

# 授予基础权限
adb shell pm grant br.com.xxx.app android.permission.WRITE_EXTERNAL_STORAGE
adb shell pm grant br.com.xxx.app android.permission.READ_EXTERNAL_STORAGE
adb shell pm grant br.com.xxx.app android.permission.CAMERA
adb shell pm grant br.com.xxx.app android.permission.ACCESS_FINE_LOCATION
adb shell pm grant br.com.xxx.app android.permission.ACCESS_COARSE_LOCATION
adb shell pm grant br.com.xxx.app android.permission.ACCESS_BACKGROUND_LOCATION

# 安卓13+版本补充以下媒体权限
# adb shell pm grant br.com.xxx.app android.permission.READ_MEDIA_IMAGES
# adb shell pm grant br.com.xxx.app android.permission.READ_MEDIA_VIDEO
# adb shell pm grant br.com.xxx.app android.permission.READ_MEDIA_AUDIO

# 启动集成测试,跳过安装步骤
flutter drive \
  --driver=integration_test/driver.dart \
  --target=integration_test/app_test.dart \
  --no-install

3. 多设备场景适配

如果同时连接多个模拟器/真机,先执行adb devices获取目标模拟器的序列号(例如emulator-5554),给所有adb命令加上-s 序列号参数指定目标设备,示例:
adb -s emulator-5554 shell pm grant br.com.xxx.app android.permission.CAMERA

授权验证

执行完授权命令后可以运行以下命令,查看对应权限是否已经处于授予状态:
adb shell dumpsys package br.com.xxx.app | grep "android.permission.CAMERA"
输出包含granted=true就代表授权生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:45:00