在应用程序中以编程方式启用USB调试(在设置/应用程序/开发下)

时间:2010-08-11 12:38:42

标签: android permissions android-manifest

是否可以在我的应用程序中以编程方式启用USB调试(在设置/应用程序/开发下)?

我在看Permission.WRITE_SETTINGShttp://developer.android.com/reference/android/provider/Settings.System.html, 但我找不到合适的东西。

6 个答案:

答案 0 :(得分:13)

您需要root权限才能从应用中执行此操作。

也就是说, 可以通过执行以下终端命令来启用ADB:

setprop persist.service.adb.enable 1
start adbd

This blog post提供了一个很好的示例,说明了如何通过su升级权限执行这些命令。

答案 1 :(得分:5)

如果不使用您自己的自定义固件来授予对安全设置的访问权限,则无法实现。 请参阅此处的主题:http://groups.google.com/group/android-developers/browse_frm/thread/953c6f0eb0fa9bed#

答案 2 :(得分:5)

首先:您的应用必须是系统应用

这行代码可能有所帮助:

Settings.Global.putInt(getContentResolver(), Global.ADB_ENABLED, 1);

您需要此权限:

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>

但在清单中添加此权限后,您将收到此错误: 权限仅授予系统应用

表示您的应用必须是系统应用

答案 3 :(得分:3)

您可以通过在清单中请求WRITE_SECURE_SETTINGS并通过adb shell授予它来以编程方式启用adb:

adb shell pm grant your.package.name android.permission.WRITE_SECURE_SETTINGS

然后您可以通过调用以下命令在API 17及更高版本上启用adb:

Settings.Global.putString(mContext.getContentResolver, Settings.Global.ADB_ENABLED,"1");

对于从API 16到API 3的调用:

Settings.Secure.putString(mContext.getContentResolver, Settings.Secure.ADB_ENABLED,"1");

要禁用adb,请在命令中将“ 1”替换为“ 0”

答案 4 :(得分:0)

如果您的设备具有root用户,且API级> 17启用adb:

$products = [
    ["id" => "123", "sku" => "MED_BL_DRESS", "size" => "medium", "color" => "black"],
    ["id" => "321", "sku" => "LG_GR_DRESS", "size" => "large", "color" => "green"],
    ["id" => "31321", "sku" => "LG_RD_DRESS", "size" => "large", "color" => "red"]
];

print_r(filterArray($products, ['size' => 'large']));
print_r(filterArray($products, ['size' => 'large', 'color' => 'green']));

function filterArray(array $products, array $filter = []): array
{
    $result = [];
    $keyCount = count($filter);
    foreach ($products as $product) {
        $match = 0;
        foreach ($filter as $key => $value)
            if ($product[$key] === $value) $match++;
        if ($match === $keyCount) $result[] = $product;
    }
    return $result;
}

或(取决于su的实现)

Runtime.getRuntime().exec(new String[] {"su", "-c", "settings put global adb_enabled 1"});

要禁用-将最后一个参数从1更改为0

答案 5 :(得分:0)

你需要按照这三个步骤

  1. 在清单中输入 <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
  2. 在代码中使用此命令启用 USB 调试 Settings.Secure.putInt(requireActivity().contentResolver, Settings.Global.ADB_ENABLED, 1)Settings.Secure.putInt(requireActivity().contentResolver, Settings.Global.ADB_ENABLED, 0) 禁用它
  3. 重要事项 在能够使用这些系统 API 之前,您必须从运行 adb shell pm grant your.package.name android.permission.WRITE_SECURE_SETTINGS 的 adb 授予 WRITE_SECURE_SETTINGS。设备必须连接到计算机,并启用 USB 调试。

我开发了一个简单的应用程序,它使用这种方法来启用/禁用一些开发人员选项,例如 Debug USBKeep Device Screen Active https://play.google.com/store/apps/details?id=it.stzan.devtools

免责声明:我是 DevTools 的实际开发者