2017-05-09 21 views
4

USB 대용량 저장 장치를 안드로이드 물건을 실행하는 Raspberry Pi에 마운트하려고합니다. 나는 this 대답을 통해 명령 줄 ADB 셸을 사용하여 마운트하는 방법을 보여 주었다. 하지만 문제는 장치가 부팅 될 때마다 해당 명령을 실행해야한다는 것입니다. 내 발동 활동 중 onCreate()에 USB 드라이브를 마운트하고 싶습니다. 여기 코드는 다음과 같습니다활동을 시작할 때 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) 

가 어떻게 안드로이드 것들에 내 응용 프로그램에서 사용하는 USB 장치를 장착 할 수 있습니까?

+1

Android에서는 자동으로 마운트됩니다. 그래서 왜 이것이 안드로이드 것들 아래에서 발생하지 않을 지 궁금해. – greenapps

답변

0

루트가있는 Android에서만이 명령을 실행할 수 있습니다. 안드로이드 (Android)는 보안상의 이유로 셸 명령을 실행할 수 없습니다.

+0

당신의 대답은 ** 완전히 잘못되었습니다! **'Android Things' 이미지는 기본적으로'su' 바이너리와 함께 출하됩니다. OS는 임베디드 시스템을위한 것임을 고려하면 상당히 논리적입니다. ** 대부분의 사용자가 실행 가능한 권한을 가지고 있기 때문에 ** [쉘 명령 (프로그램 적으로 포함)] (https://stackoverflow.com/a/44145193/3290339)을 실행할 수 있습니다 **. – Onik

+0

예 쉘 또는 adb를 통해 su 명령을 실행할 수 있지만 프로그래밍 방식으로 수행 할 수는 없습니다. 적어도 나는 항상 그 "허가 거부"를 얻는다. –

+0

당신은 내가주의 깊게 심판 한 대답을 읽지 않았습니다. 프로그래밍 방식으로'su '를 사용할 필요가 없습니다. **/system/bin 아래의 바이너리 대부분은 세계에서 실행 가능합니다 **. [다른 예가 있습니다] (https://stackoverflow.com/a/44209713/3290339). 왜 그걸 시도해 보지 그래?! – Onik

0

나는 당신과 똑같은 문제가있었습니다. 앱 내에서 adb 명령을 실행할 수 없습니다.

그러나 Android의 Usb 호스트 API를 통해 USB에 액세스 할 수 있으므로 libaums 라이브러리는 대용량 저장 장치가 FAT32 파일 시스템을 사용하는 경우 Usb 대용량 저장 장치에 액세스합니다.