【问题标题】:How to run C++ application in Android SHELL如何在 Android SHELL 中运行 C++ 应用程序
【发布时间】:2012-04-25 08:55:05
【问题描述】:

我想运行用 C++ 编写并使用 Android toolchain 9 编译的 hello world,但我遇到了问题:默认情况下,我没有启动它的权限,也无法使用 chmod` 更改权限。

我用Android 2.3.3 - Api Level 10

应用程序由API level 9的交叉编译器编译

程序:

编译应用程序:

~/toolchain_andr9/bin/arm-linux-androideabi-g++ helloworld.cpp

然后将应用程序发送到模拟器上的 SDCARD:

>adb push a.out /mnt/sdcard

然后转到 SHELL 并尝试运行 a.out:

>adb shell
> 
>/mnt/sdcard/a.out

结果是:

>`/mnt/sdcard/a.out: permission denied`

命令ls -l 显示a.out 的权限:

>`----rwxr-x system   sdcard_rw   863656 2012-04-12 22:42 a.out`

我尝试更改权限:

>chmod 777 /mnt/sdcard/a.out

但权利不会改变:

>`----rwxr-x system   sdcard_rw   863656 2012-04-12 22:42 a.out`

我想我用 android 留下了一些重要的东西。

任何人都可以帮助我并告诉我如何在 `Android SHELL 中运行应用程序吗?

非常感谢。

附:对不起我的英语 =)

【问题讨论】:

  • 你有根吗? Без рута может не выйти фокус: gimite.net/en/…
  • 尝试将您的文件放在 /data/local 下,您应该可以 chmod 您的文件

标签: android shell android-ndk g++


【解决方案1】:

默认情况下,SD卡挂载选项noexec,不允许执行卡上的任何文件,无论它的权限是什么(甚至-rwxrwxrwx),所以你需要将文件移动到另一个位置然后执行。

最简单的方法是将文件移动到 /data/local/tmp/ 并使用完整路径(通常的 POSIX PATH 语义)执行它。

> adb push a.out /data/local/tmp/a.out
> adb shell
> chmod 755 /data/local/tmp/a.out
> /data/local/tmp/a.out

不需要 root 访问权限 并且可以使用 重启

【讨论】:

    【解决方案2】:

    如果您的手机已经root,您可以发送mount -o remount,rw /mnt/sdcard,它应该会运行。

    我已经在我的 Android 上试过了。

    【讨论】:

    • 这行得通吗?有没有其他人试过这个?是否删除 noexec 标志?重启时sdcard会重新挂载吗?我弄乱了格式(vfat > ext2),这让 android 非常生气。不得不使用newfs_msdos来修复它,所以我犹豫要不要弄乱sdcard。
    • @MarkMikofski 这不会在重新启动后继续存在,sdcard 在重新启动时会正常挂载。
    • 太棒了,这完全有效,它只是删除了nosuid, nodev, noexec 标志!
    猜你喜欢
    • 2011-09-03
    • 2011-11-16
    • 2012-12-14
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多