В разрешении отказано при попытке инициировать выполнение скрипта в Android ОС - PullRequest
0 голосов
/ 28 мая 2020

Возникли проблемы с запуском сценария оболочки bash в Android ОС. Использование Android Studio и эмулятора Google Pixel. Получение «отказано в разрешении» на выполнение скрипта. Разрешение сценария - «755». Сообщите мне, если у меня что-то не так. Обратите внимание: когда я делаю: %adb shell %run-as com.example.myapplication. %./getinfo.sh. он работает нормально.

Он просто не запускается, когда скрипт запускается в коде Java приложения в эмуляторе Android. Сообщите мне, если у меня что-то не так. Спасибо!

Соответствующий код java -

String command="/data/data/com.example.myapplication/getinfo.sh"; 
ProcessBuilder builder = new ProcessBuilder(command); 
Process p = builder.start();
p.waitFor();.  

Ошибки, перечисленные logcat:

05-27 13:37:46.588  9348  9348 I System.out: -   command=/data/data/com.example.myapplication/getinfo.sh^M.  
05-27 13:37:46.598  9348  9348 W System.err: java.io.IOException: Cannot run program "/data/data/com.example.myapplication/getinfo.sh": error=13, Permission denied^M.  
05-27 13:37:46.598  9348  9348 W System.err:    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1050)^M.  
05-27 13:37:46.598  9348  9348 W System.err:    at com.example.myapplication.MainActivity$1.onClick(MainActivity.java:227)^M.    
05-27 13:37:46.598  9348  9348 W System.err:    at android.view.View.performClick(View.java:7125)^M.  
05-27 13:37:46.598  9348  9348 W System.err:    at android.view.View.performClickInternal(View.java:7102)^M    
05-27 13:37:46.598  9348  9348 W System.err:    at android.view.View.access$3500(View.java:801)^M.  
05-27 13:37:46.598  9348  9348 W System.err:    at android.view.View$PerformClick.run(View.java:27336)^M.  
05-27 13:37:46.598  9348  9348 W System.err:    at android.os.Handler.handleCallback(Handler.java:883)^M.  
05-27 13:37:46.598  9348  9348 W System.err:    at android.os.Handler.dispatchMessage(Handler.java:100)^M.  
05-27 13:37:46.598  9348  9348 W System.err:    at android.os.Looper.loop(Looper.java:214)^M  
05-27 13:37:46.598  9348  9348 W System.err:    at android.app.ActivityThread.main(ActivityThread.java:7356)^M.  
05-27 13:37:46.598  9348  9348 W System.err:    at java.lang.reflect.Method.invoke(Native Method)^M  
05-27 13:37:46.598  9348  9348 W System.err:    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)^M.  
05-27 13:37:46.599  9348  9348 W System.err:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)^M  
05-27 13:37:46.599  9348  9348 W System.err: Caused by: java.io.IOException: error=13, Permission denied^M.  
05-27 13:37:46.599  9348  9348 W System.err:    at java.lang.UNIXProcess.forkAndExec(Native Method)^M.   
05-27 13:37:46.599  9348  9348 W System.err:    at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)^M.   
05-27 13:37:46.599  9348  9348 W System.err:    at java.lang.ProcessImpl.start(ProcessImpl.java:141)^M.    
05-27 13:37:46.599  9348  9348 W System.err:    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)^M.        

1 Ответ

0 голосов
/ 08 июня 2020

Я наконец смог выполнить сценарий на Android, установив:

ProcessBuilder pb = new ProcessBuilder();
pb.command("/system/bin/sh","test.sh");

pb.redirectErrorStream(true);
File workingDirectory = new File(localPath);
pb.directory(workingDirectory);  //set the working directory for this process

Process process = pb.start();

where "localPath" is passed in after being determined via:

Context c = getApplicationContext();
final String localPath=c.getFilesDir().getPath()

Хотя это хороший шаг, я обнаружил, что не могу запускать какие-либо двоичные файлы, которые я импортирую в свою рабочую область, в /data/data/com.example.myapplication. Начну новый пост по этому поводу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...