【问题标题】:Grant android VPN permission via command line using adb使用 adb 通过命令行授予 android VPN 权限
【发布时间】:2021-08-30 23:39:08
【问题描述】:

我可以使用 adb 授予访问权限。请看下面的命令

adb shell settings put secure enabled_accessibility_services <package_name><package-name>.AccessibilityServiceName

是否也可以通过 adb 授予 VPN 权限?

【问题讨论】:

    标签: android adb vpn


    【解决方案1】:

    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>
    

    Press it:

    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 权限,此命令不会向应用程序授予 权限,它会配置操作系统 设置

    【讨论】:

      猜你喜欢
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      相关资源
      最近更新 更多