【问题标题】:Android - running command line program compiled with CCToolsAndroid - 运行用 CCTools 编译的命令行程序
【发布时间】:2015-09-16 23:41:15
【问题描述】:

我知道这可能被问过很多次了;但我找不到正确的答案。总之,

在我的 Android 手机上,我已经安装了 CCTools。我可以编译 C/C++ 程序并使用 CCTools 菜单项运行它们。但是,当我尝试从终端运行程序时,我得到“权限被拒绝”。我使用 Linux 风格的 './a.out' 来运行。

【问题讨论】:

    标签: android c++ command-line terminal


    【解决方案1】:

    tl.dr.:Android 不是开发命令行应用程序的好平台。

    出于安全原因,Android 不支持从用户存储执行文件。这是由noexec 挂载标志完成的。这无法更改,因为底层文件系统不支持可执行文件。 (至少在我的带有 Lollipop 的 Nexus 5 上。你可以尝试(如果你有 root)mount -o remount,exec /storage/[your sdcard path]。路径可以在mount 的输出中找到)

    作为一个hack,如果你有root,你可以将文件复制到/mnt/obb/。这是一个临时文件系统。在那里你必须做chmod 0755 /mnt/obb/[filename] 将文件标记为可执行文件。然后就可以执行了。

    【讨论】:

    • 谢谢。但是,CCTools 是如何运行命令行应用程序的呢?
    • CCTools 将文件复制到缓存目录中,该目录允许执行文件。该文件被标记为可执行文件,然后执行。它与我的 hack 相同,但使用了另一个目录。您可以在 OnCreate 中看到LauncherConsoleActivity.java 中的实现
    • 我明白了。你知道 C++ 的做法吗?
    • 使用 QT 和 QDir 类我可以获得临时文件夹。我想我可以在那里复制文件并执行。
    • 要在 Android 上运行二进制文件,您应该将其放在 /data/local/ 目录中并使其可执行。您可能还需要以 root 权限启动 adbd 守护进程。
    猜你喜欢
    • 1970-01-01
    • 2013-01-25
    • 2010-11-24
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多