【问题标题】:Android 11 adb push Permission deniedAndroid 11 adb push 权限被拒绝
【发布时间】:2021-01-23 05:38:07
【问题描述】:

我已将操作系统从 Android 10 升级到 Android 11,当我尝试运行 adb push test.txt /mnt/sdcard/ 时,我收到一个错误 adb: error: stat failed when push to /mnt/sdcard/ test.txt:权限被拒绝

在 AndroidManisfest.xml 中,我已授予以下所有权限:

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

<application
android:requestLegacyExternalStorage="true">

【问题讨论】:

  • adb push test.txt /sdcard/works

标签: android adb


【解决方案1】:

试试;

adb 根

这会将 adb 服务器切换为 root。

【讨论】:

    【解决方案2】:

    试试adb push test.txt /sdcard/,这会奏效。

    在 Android 11 上,我们无法通过 ADB 访问 /mnt。但是使用符号链接是可以的,详情见this link

    我在Android 11模拟器上运行ls命令,我们可以看到sdcard -&gt; ?/mnt中,sdcard -&gt; /storage/self/primary/中,这意味着软链接/mnt/sdcard在Android 11上不起作用。

    # symeonchen @ SBook in ~ [22:16:05] 
    $ adb shell ls -al / | grep sdcard   
    lrw-r--r--   1 root   root         21 2020-12-17 02:01 sdcard -> /storage/self/primary
    
    # symeonchen @ SBook in ~ [22:16:14] 
    $ adb shell ls -al /mnt | grep sdcard
    l?????????  ? ?      ?           ?                ? sdcard -> ?
    

    【讨论】:

      【解决方案3】:

      根据安卓文档。

      在 Android 11 上运行但以 Android 10(API 级别 29)为目标的应用仍然可以请求 requestLegacyExternalStorage 属性。

      因此请尝试更改您的目标 API 级别。推荐的方法是使用 ContentResolver 或者可以说 Scoped storage 而不是 Legacy deprecated storage APIs。

      查看此内容了解更多详情。 Scoped storage enforcement

      【讨论】:

      • 您好,感谢您的回复我已经尝试了 Scoped 存储强制,但它不起作用。
      • 你使用的是什么targetSdkVersion?
      猜你喜欢
      • 2012-06-13
      • 1970-01-01
      • 2016-10-30
      • 2014-01-31
      • 2012-12-29
      • 2013-11-08
      • 1970-01-01
      • 2021-12-23
      • 2021-09-16
      相关资源
      最近更新 更多