在Android Shell上运行自己的可执行文件


14

我需要一个特定的命令行工具,并且已经在Linux shell中制作了一个C程序。我已经使用ARM交叉编译器编译了该程序。然后,我将程序移至Android文件系统并尝试运行它。

输出被拒绝权限。

为了在Android文件系统中运行自己的已编译程序,我该怎么办?


试过chmod +x pgm然后./pgm呢?
ott--

8
可能您将其放置在sdcard上-带有noexec标志挂载。您要么需要将其移至手机的内部存储中,要么通过外壳运行它(例如sh /path/to/myexecutable)。
伊兹

Answers:


14

我假设您使用adb push将可执行文件上传到sd卡。不幸的是,SD卡始终安装有“ noexec”,这意味着您无法在此处执行任何操作。

因此,您必须将可执行文件复制到本地文件系统,例如复制到/ data / local。如果设备没有植根或您没有安装BusyBox,将没有“ cp”命令。你可以简单地使用cat: cat /sdcard/myprog > /data/local/myprog

然后,您必须在可执行文件上设置可执行文件权限。Android上的Chmod通常不支持“ u + x”语法。因此,您必须致电chmod 555 /data/local/myprog

之后,您可以执行可执行文件:/data/local/myprog


感谢您的回复。实际上,问题出在二进制生成上。它没有正确生成!;)
Nuno Santos

我的设备上有busybox,但是此命令:shell @ n200C:/ $ busybox cp / storage / external_storage / sda1 / ffmpeg / data / ------显示错误= cp:无法创建'/ data / ffmpeg “:权限被拒绝
Dr.jacky

tmp-mksh: /data/local/workspace/clang+llvm-5.0.0-aarch64-linux-gnu/bin/clang++: No such file or directory尽管文件存在
Necktwi

/ data / local需要我的设备上的root访问权限。请改用/ data / local / tmp
Chan Tzish

10

首先,您必须将其推送到目录中,例如/data/local/tmp。然后,您必须使用设置权限chmod 755 executable。之后,您可以将其运行为./executable

完成的步骤如下:

亚行推送可执行文件/ data / local / tmp
亚行外壳
cd /数据/本地/ tmp
chmod 755可执行文件
./可执行

或者,如果要从资产文件夹运行它,则必须将文件复制到数据文件夹/data/data/packagename/。然后使用Fileclass 将文件的setExecutable标志设置true为,然后由Process类或Root Tools之类的第三方程序包运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.