如何从我的Android应用程序执行shell脚本文件?
我正在尝试从我的Android应用程序执行一个shell脚本 首先,我尝试从Java运行Shell脚本,它可以很好地用于所有命令 像如何从我的Android应用程序执行shell脚本文件?,android,permissions,Android,Permissions,我正在尝试从我的Android应用程序执行一个shell脚本 首先,我尝试从Java运行Shell脚本,它可以很好地用于所有命令 像pwd,cd,netstat。移动文件,复制文件 然后我在Android应用程序中尝试了它,我得到了cd、pwd、netstat的输出,以及脚本中的echo语句,但移动和复制文件不起作用 当这些命令在adb shell中正常工作时,从脚本文件执行这些命令是否需要任何权限 我的代码如下所示: void execCommandLine() { //
pwd
,cd
,netstat
。移动文件,复制文件
然后我在Android应用程序中尝试了它,我得到了cd
、pwd
、netstat
的输出,以及脚本中的echo语句,但移动和复制文件不起作用
当这些命令在adb shell中正常工作时,从脚本文件执行这些命令是否需要任何权限
我的代码如下所示:
void execCommandLine()
{
//***********************
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("ls -all");
proc = rt.exec("sh /data/shTest.sh");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (Throwable t)
{
t.printStackTrace();
}
我的脚本文件如下所示:
#!/bin/sh
echo "Knowledge is Power"
echo "I am a script"
echo $PATH
netstat
pwd
cd /data
pwd
cd /system/bin
pwd
mv /data/local/hello.txt /data/
cp /data/local/hello1.txt /data/
cd /data/local/tmp
cd /system/bin
只有cp
和mv
命令未显示预期结果。
请给我一些指导
我正在尝试的第一件事就是在Emulator中测试它。在/system/bin中有mv commond,我也尝试过使用busybox,但没有得到预期的结果。对于root权限如何继续..给出一些继续的想法。一些关于可能发生在你身上的事情的提示。 你有手机吗?在/system/bin中是否有命令mv和cp? 最后,如果您的手机有busybox,您可以尝试使用它。
也许你应该先请求root权限才能这样做…
mv
和cp
都给我的安卓shell带来了麻烦。许多其他人使用cat x>y
或类似产品,效果不错。Sweeney已经为您提供了解决方案,但这里有一个解释
Android不是GNULinux,因此默认情况下,cp
和mv
是完全不同的。在Android上,它们只管理硬链接,因此,例如,如果您试图跨分区移动文件,它将使您的数据消失,因为它不会在分区之间移动数据,只会调整硬链接。
如果您无法更改脚本,则必须使用busybox,或创建
cp
和mv
脚本,即cat文件>其他文件
和mvrm文件
,但最好更改脚本,因为这样可以将它们移植到没有您的黑客的系统上。我使用的解决方案是一个符号链接。例如,如果in/system/bin中没有cp、grep或mv命令等命令,那么busybox中肯定存在这些命令。
为此,我只需使用命令(来自终端仿真器)将/system重新装载为RW,然后创建符号链接
苏
安装-o rw,重新安装/系统
cd/system/bin
ln-s busybox cp#cp或其他命令
你为什么发布一个新问题而不是编辑前一个问题?@anshu你找到了上述问题的解决方案了吗?如果是,请告诉我解决方案。你能通过adb shell运行这个吗
?小细节,但ls-all
重复使用了-lf,这是我正在尝试的第一件事,并将其测试到Emulator中。在/system/bin中有mv commond,我也尝试过使用busybox,但没有得到预期的结果。对于根权限如何继续..给出一些继续的想法。很好的解决方案,+1。如果你感兴趣的话,我会解释一下你的烦恼。