尝试在 Android 操作系统中启动脚本执行的权限被拒绝



在Android操作系统中启动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: -   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.        

我终于能够通过设置在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 中运行任何导入到我的工作区域中的二进制文件。 将为此开始一个新帖子。

最新更新