【发布时间】:2017-06-24 12:40:43
【问题描述】:
我正在尝试从应用程序的内部存储 (/data/data/%package%/..)) 运行生成文件。生成文件由存储在内部存储中应用程序特定文件夹中的 run.sh 文件触发。
Shell 脚本
06-24 17:14:16.893 E/File Manager: Shell: #!/system/bin/sh
06-24 17:14:16.893 E/File Manager: Shell: /data/data/com.mkmv.playground/files/appfldr/make -f /data/data/com.mkmv.playground/files/appfldr/tmp/Makefile
还有日志
06-24 17:14:16.956 E/File Manager: Execution Error: /system/bin/sh: sed: not found
/system/bin/sh: sed: not found
/system/bin/sh: sed: not found
/system/bin/sh: sed: not found
/system/bin/sh: sed: not found
在appfldr中的所有文件上运行chmod 777,结果徒劳无功。
另外,尝试添加
"cd " + this.getFilesDir().getAbsolutePath() + "/appfldr \n";
到 shell 脚本,在执行 makefile 之前,什么都没有发生。
当我尝试在 root 手机上运行相同的程序时,无论是否使用 cd ing,即使不要求超级用户访问,它都可以正常工作。但在无根设备中则不然。据我对该主题的研究,该应用程序应该能够从其私有文件夹中执行。我哪里错了?
谢谢!
【问题讨论】:
-
也许你需要一个有根设备。 Android 操作系统可能会阻止无根设备上的某些命令
-
但是当我尝试使用有根设备时,超级用户从未请求根访问权限。即使我检查了超级用户日志,也没有找到与该应用程序相关的内容!
-
有根安卓和非根安卓还是有区别的。即使您不请求超级用户访问权限,仍然存在差异。
-
我们会,您是否知道从应用程序中将 pwd 更改为 appfldr。为什么不允许这样做?
-
有关该问题的答案,请询问 google(或 AOSP 的常用修饰符)