【发布时间】:2021-08-30 23:39:08
【问题描述】:
我可以使用 adb 授予访问权限。请看下面的命令
adb shell settings put secure enabled_accessibility_services <package_name><package-name>.AccessibilityServiceName
是否也可以通过 adb 授予 VPN 权限?
【问题讨论】:
我可以使用 adb 授予访问权限。请看下面的命令
adb shell settings put secure enabled_accessibility_services <package_name><package-name>.AccessibilityServiceName
是否也可以通过 adb 授予 VPN 权限?
【问题讨论】:
TLDR:您不能使用该命令,也不能使用其他基于权限的命令。
我能想到的唯一解决方案是使用adb 按下操作系统生成的连接请求警报对话框上的OK 按钮:
adb shell uiautomator dump /sdcard/Download/view.xml
adb pull /sdcard/Download/view.xml
观察文件,它包含警告对话框。具体来说,OK是:
<node index="2" text="OK" resource-id="android:id/button1" class="android.widget.Button" package="com.android.vpndialogs" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[564,2040][1008,2148]" /></node>
coords=$(perl -ne 'printf "%d %d\n", ($1+$3)/2, ($2+$4)/2 if /text="OK"[^>]*bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/' view.xml)
adb shell input tap $coords
大部分灵感来自Apricot's answer。
您可能已经尝试过:adb shell pm grant com.example.package_name android.permission.CONTROL_VPN,但这不起作用。
Exception occurred while executing 'grant':
java.lang.SecurityException: Package com.example.package_name has not requested permission android.permission.CONTROL_VPN
at com.android.server.pm.permission.BasePermission.enforceDeclaredUsedAndRuntimeOrDevelopment(BasePermission.java:453)
at com.android.server.pm.permission.PermissionManagerService.grantRuntimePermissionInternal(PermissionManagerService.java:1549)
at com.android.server.pm.permission.PermissionManagerService.grantRuntimePermissionInternal(PermissionManagerService.java:1503)
at com.android.server.pm.permission.PermissionManagerService.grantRuntimePermission(PermissionManagerService.java:1495)
at com.android.server.pm.PackageManagerShellCommand.runGrantRevokePermission(PackageManagerShellCommand.java:2339)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:261)
at android.os.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:98)
at android.os.ShellCommand.exec(ShellCommand.java:44)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:26885)
at android.os.Binder.shellCommand(Binder.java:965)
at android.os.Binder.onTransact(Binder.java:839)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:5206)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:5357)
at android.os.Binder.execTransactInternal(Binder.java:1195)
at android.os.Binder.execTransact(Binder.java:1159)
您必须使用prepare(context) 请求权限。
settings 命令在做什么吗?这不是为了权限。
enabled_accessibility_services 用于更改设置(在设置应用程序中)以启用在应用程序中声明的特定可访问服务。在这种情况下,这个无障碍服务仍然需要"android.permission.BIND_ACCESSIBILITY_SERVICE" 权限。无法通过 ADB 添加。
其中没有等效的 VPN 权限,此命令不会向应用程序授予 权限,它会配置操作系统 设置。
【讨论】: