在Android OS中启动bash shell脚本时遇到问题。使用Android Studio和Google Pixel模拟器。在脚本执行中获得“权限被拒绝”。该脚本的权限为“ 755”。如果我在这里遇到问题,请告诉我。注意-当我这样做时:
%adb shell
%run-as com.example.myapplication
%./getinfo.sh
运行正常。
当脚本在Android模拟器中的应用程序的Java代码中启动时,它不会运行。如果我在这里遇到问题,请告诉我。
谢谢!

相关的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:-命令= / data / data / com.example.myapplication / getinfo.sh ^ M。
05-27 13:37:46.598 9348 9348 W System.err:java.io.IOException:无法运行程序“ /data/data/com.example.myapplication/getinfo.sh”:error = 13,权限被拒绝^ M。
05-27 13:37:46.598 9348 9348 W System.err:位于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:位于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:位于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:位于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:原因:java.io.IOException:error = 13,权限被拒绝^ 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。(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:位于java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)^ M。

最佳答案

我终于可以通过设置在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中的工作区中的任何二进制文件。为此将开始新的帖子。

09-04 14:30