【Appium踩坑】Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS

本文针对小米9和OPPO R17设备在使用Appium进行自动化测试时遇到的USB调试和权限监控问题提供了详细的解决方案。通过开启USB调试和禁止权限监控,解决了在执行adb命令时出现的未知服务器错误和权限拒绝问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设备:小米9 + Android 9.0 / OPPO R17 + Android 10
工具: Appium desktop 1.15.1

相关解答:github issue

1、解决方法
*小米设备: 开启 USB调试(安全设置)

(1) 手机-插入 sim卡
(2) 设置 - 更多设置 - 开发者选项 - USB调试(安全设置)- 开启

*OPPO设备: 开启 禁止权限监控

开发者选项 - 禁止权限监控 - 开启

2、详细报错信息
An unknown server-side error occurred while processing the command. 
Original error: Error executing adbExec. 
Original error: 'Command '/Users/xx/Library/Android/sdk/platform-tools/adb -P 5037 -s 77c9ea2f shell settings delete global hidden_api_policy_pre_p_apps' exited with code 255'; 
Stderr: 'Security exception: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS java.lang.SecurityException: 
Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS 
at com.android.providers.settings.SettingsProvider.enforceWritePermission(SettingsProvider.java:1815) 
at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1023) 
at com.android.providers.settings.SettingsProvider.deleteGlobalSetting(SettingsProvider.java:1006) 
at com.android.providers.settings.SettingsProvider.delete(SettingsProvider.java:592) 
at android.content.ContentProvider$Transport.delete(ContentProvider.java:343) 
at com.android.providers.settings.SettingsService$MyShellCommand.deleteForUser(SettingsService.java:406) 
at com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SettingsService.java:289) 
at android.os.ShellCommand.exec(ShellCommand.java:103) 
at com.android.providers.settings.SettingsService.onShellCommand(SettingsService.java:51) at android.os.Binder.shellCommand(Binder.java:634) 
at android.os.Binder.onTransact(Binder.java:532) 
at android.os.Binder.execTransact(Binder.java:733)'; Code: '255'
<think>用户现在遇到了一个SecurityException,提示需要android.permission.WRITE_SECURE_SETTINGS权限。这个问题通常发生在尝试修改系统级设置时,而应用没有相应的权限。 首先,我需要确认用户是否在正确的上下文中执行这些adb命令。通常,通过adb执行这些命令需要设备具有root权限,或者应用已经获取了系统级权限。用户可能是在没有root的设备上运行,或者应用没有签名所需的权限。 接下来,我应该考虑可能的解决方案。比如,用户是否可以通过授予应用WRITE_SECURE_SETTINGS权限来解决这个问题?这可能需要使用adb命令来授予权限,例如:adb shell pm grant <package_name> android.permission.WRITE_SECURE_SETTINGS。但这里需要注意的是,普通应用无法获取这个权限,除非它们是系统应用或者设备已经被root。 另外,用户可能是在使用Appium或Selenium进行自动化测试时遇到这个问题。这时候,可能需要检查测试框架的配置,确保使用的驱动版本兼容,或者尝试切换不同的驱动,比如UiAutomator2,看看是否能避免权限问题。 还有一种可能是设备的Android版本较新,对权限的管理更加严格。用户可能需要调整测试策略,比如使用更早的Android版本进行测试,或者寻找替代方法来修改隐藏API策略,而不需要直接操作settings数据库。 最后,用户可能需要检查设备是否已经正确解锁,并且USB调试模式已经启用,同时确认开发者选项中的相关设置是否允许通过USB进行调试。如果这些基本配置有问题,也可能导致权限不足的错误。</think>要解决`SecurityException: Permission denial`错误,需按以下步骤处理: 1. **授予WRITE_SECURE_SETTINGS权限** 执行命令将权限赋予测试进程: ```bash adb shell pm grant <your_app_package> android.permission.WRITE_SECURE_SETTINGS ``` (需替换`<your_app_package>`为实际应用包名,如`com.example.app`) 2. **使用系统级签名APK** 若权限仍不生效,需重新打包测试APK并使用系统签名(需设备已root或通过OEM解锁): ```bash jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore debug.keystore app-debug.apk androiddebugkey ``` 3. **切换测试驱动至UiAutomator2** 在Appium/Selenium配置中指定`automationName`为`UiAutomator2`: ```python desired_caps = { "automationName": "UiAutomator2", "platformName": "Android", # 其他必要配置 } ``` 4. **降级Android版本测试** 若设备支持,尝试在Android 9.0及以下版本测试,这些版本对隐藏API限制较宽松。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值