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

输出被拒绝权限。我自己在Android文件系统中编译的程序?

评论

尝试过chmod + x pgm然后也使用./pgm吗?

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

stackoverflow.com/questions/9868309 / ...

复制:如何在无根的Android设备上运行为ARM编译的本机可执行文件?

#1 楼

我假设您使用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)
13年5月27日在9:43

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

–.jacky博士
2015年11月16日13:58



tmp-mksh:/data/local/workspace/clang+llvm-5.0.0-aarch64-linux-gnu/bin/clang++:尽管存在该文件或目录

–颈部
18年3月8日在15:59

/ data / local需要我的设备上的root访问权限。使用/ data / local / tmp代替

– Chan Tzish
20-2-4在13:26



#2 楼

首先,您必须将其推送到目录中,例如/data/local/tmp。然后,您必须使用chmod 755 executable设置权限。之后,您可以将其作为./executable运行。
完成步骤如下:
adb push executable /data/local/tmp
adb shell
cd /data/local/tmp
chmod 755 executable
./executable

或者,如果要从资产文件夹中运行它,则必须将文件复制到数据文件夹/data/data/packagename/。然后使用File类,将该文件的setExecutable标志设置为true,并由Process类或Root Tools之类的第三方程序包运行。资产文件夹中的二进制文件!您必须将二进制文件复制到jnilib文件夹,然后从本机库目录运行它! context.getApplicationInfo().nativeLibraryDir