我正在尝试将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设备?
答案 0 :(得分:1)
您只能在root的Android中运行这些命令。 Android Things(作为Android)不允许出于安全原因执行shell命令。
答案 1 :(得分: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 :(得分:0)
我遇到了与你完全相同的问题。您无法在应用内执行adb命令。
但是,您可以通过Android的Usb Host API访问USB,因此libaums库可以访问Usb大容量存储设备 - 假设大容量存储设备使用FAT32文件系统。