2012-04-12 19 views
9

我想運行使用C++編寫的hello world並使用Android toolchain 9進行編譯,但是我遇到了問題:默認情況下,我沒有權限啓動它,並且我無法使用chmod`更改權限。如何在Android中運行C++應用程序SHELL

我用Android 2.3.3 - Api Level 10

申請通過交叉編譯爲API level 9

程序編譯:

編譯應用:

〜/ toolchain_andr9/bin中/臂-Linux的androideabi- g ++ helloworld.cpp

然後發送應用程序到SD卡上的模擬器:

>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中運行應用程序?

非常感謝。

P.S.對不起,我的英文=)

+0

你有根嗎? Безрутаможетневыйтифокус:http://gimite.net/en/index.php?Run%20native%20executable%20in%20Android%20App – 2012-04-12 23:46:43

+1

嘗試將您的文件放在/ data/local下,您應該能夠chmod文件 – mgiza 2012-04-17 13:55:14

回答

13

默認情況下,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 

需要根訪問生存重啓

4

如果你已經紮根你的手機,你可以做一個mount -o remount,rw /mnt/sdcard它應該運行。

我試過了我的Android。

+0

這是行不通的嗎?有沒有其他人試過這個? Doesbit刪除noexec標誌?重新啓動後sdcard是否重新裝入?我弄亂了格式(vfat> ext2),它讓android非常生氣。不得不使用'newfs_msdos'來解決它,所以我很猶豫是不是要弄髒sdcard。 – 2012-10-06 07:55:37

+0

@MarkMikofski這不會在重新啓動後生存,並且'sdcard'通常在重新啓動時掛載。 – 2012-10-06 11:16:18

+0

真棒,完全有效,它只是刪除'nosuid,nodev,noexec'標誌! – 2012-10-06 12:14:59

相關問題