【问题标题】:Mount USB thumb drive to android things when starting the activity启动活动时将 USB 拇指驱动器挂载到 android 的东西
【发布时间】:2017-10-07 12:32:55
【问题描述】:

我正在尝试将 USB 大容量存储设备安装到运行 android 设备的 Raspberry Pi 上。我遇到了this 答案,它显示了如何使用命令行 ADB shell 安装它。 但问题是我每次设备启动时都必须运行这些命令。我想在我的启动活动的onCreate() 中安装 USB 驱动器。这是代码:

//Here is the mount drive function which I called in onCreate of my activity.

 private void mountDrive() throws IOException, InterruptedException {
        Process mProcess = Runtime.getRuntime().exec("/system/xbin/su");
        BufferedReader reader = new BufferedReader(new InputStreamReader(mProcess.getInputStream()));

        DataOutputStream dos = new DataOutputStream(mProcess.getOutputStream());
        dos.writeBytes("mkdir /mnt/usb\n");
        dos.flush();
        dos.writeBytes("mount -t vfat -o rw /dev/block/sda1 /mnt/usb\n");
        dos.flush();
        dos.writeBytes("exit\n");

        //Read the response
        String line, result = "";
        while ((line = reader.readLine()) != null) {
            result += line;
            Log.d("CMD","RESULT:"+result);
        }
        reader.close();
        dos.flush();
        dos.close();

        mProcess.waitFor();
    }

但我收到此错误:

I/sh: type=1400 audit(0.0:31): avc: denied { read } for name="/" dev="mmcblk0p6" ino=2 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:rootfs:s0 tclass=dir permissive=1
I/sh: type=1400 audit(0.0:32): avc: denied { open } for path="/" dev="mmcblk0p6" ino=2 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:rootfs:s0 tclass=dir permissive=1
W/System.err: java.io.IOException: Cannot run program "su": error=13, Permission denied
W/System.err:     at java.lang.ProcessBuilder.start(ProcessBuilder.java:983)
W/System.err:     at java.lang.Runtime.exec(Runtime.java:691)
W/System.err:     at java.lang.Runtime.exec(Runtime.java:524)
W/System.err:     at java.lang.Runtime.exec(Runtime.java:421)

如何在 Android Things 上使用我的应用程序安装 USB 设备?

【问题讨论】:

  • Android 下是自动挂载的。所以我想知道为什么这不会在 Android Things 下发生。

标签: android raspberry-pi3 usb-drive android-things


【解决方案1】:

另一种方法是修改init.rc 文件。在init.rc 文件中搜索on property: sys.boot_completed = 1

on property: sys.boot_completed = 1
bootchart stop
  # WLD 201805031702
  mkdir / mnt / usb
  chmod 777 / mnt / usb
  exec / system / bin / mount -t vfat / dev / block / sda1 / mnt / usb

#operate only if the pendrive is placed before powering on, if you remove and put it will not work

【讨论】:

    【解决方案2】:

    我遇到了与您完全相同的问题。您无法在应用程序中执行 adb 命令。

    但是,您可以通过 Android 的 Usb Host API 访问 USB,因此 libaums 库可以访问 USB 大容量存储设备 - 假设大容量存储设备使用 FAT32 文件系统。

    【讨论】:

      【解决方案3】:

      您只能在有根的 Android 中运行这些命令。出于安全原因,Android Things(作为 Android)不允许执行 shell 命令。

      【讨论】:

      • 您的答案完全错误! Android Things 图像默认附带su 二进制文件(至少现在是这样),考虑到操作系统适用于嵌入式系统。更重要的是,您可以执行很多 shell commands (incl. programmatically),因为它们中的大多数都具有全球可执行权限
      • 是的,您可以从 shell 或通过 adb 运行 su 命令,但您不能以编程方式执行此操作。至少我总是得到那个“权限被拒绝”。
      • 您还没有仔细阅读我审阅的答案。无需以编程方式获取 su,-/system/bin 下的大多数二进制文件都是全局可执行的Here is another example。你为什么不试试呢?!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多