熟悉 Android 與 Linux
的開發人員看到這篇弱弱的文章該會嘲笑了,不過這篇文章是寫給那些還不知道的開發人員的。當然如果你對此比較熟悉,又打算看下去,我會感到很高興的。:)
眾所周知,Android 是基於 Linux 的,因此大家都可以想到,Android 應該可以運行 Linux 下的程式,但是該平台是採用的 ARM
的處理器,因此哪裡去找一款 ARM Linux 的編譯器呢?這裡我向大家推薦 Sourcery G++ 這款編譯器,是:
http://www.codesourcery.com/sgpp/lite/arm/portal/release1803
因為我的系統是 Windows,因此我下載了 IA32 Windows Installer ,按照安裝提示一步步安裝完畢後,我們就可以用 C/C++
來寫程式,用它編譯後放在 AVD 或你的實機上運行了。
下面是我用 C 寫的一個 Hello World 程式。
#include <stdio.h>int main(void){char s[20];scanf("%s",s);printf("Hello world, from %s.\n",s);return 0;}
儲存為 hello.c,因為
Android 的 Linux 核心沒有標準IO庫函數,因此我們採用靜態編譯的方式進行編譯。
arm-none-linux-gnueabi-gcc -static
-o hello hello.c
然後我們使用 adb 將 hello 程式上傳在 AVD 或你的實機的 /data
目錄下。你可能會有疑問,為什麼要上傳到這個目錄呢?呵呵,其實是因為 Android 的 /system/bin 與 /sbin 目錄是 Read Only
System,而 /mnt/sdcard 下面所有的檔案所有者使用者是 system,許可權組是 sdcard_r,就算是 root
賬戶也無法增加檔案的可執行許可權。當然你也有可能找到其他可上傳又可改檔案許可權的目錄。
adb push hello /data
然後我們用 adb
shell 命令進入你的 Android 裝置的 shell 裡,更改它的許可權。
adb shell
cd /data
chmod 777 hello
下面是執行的結果:
./hello
newcj
Hello world, from newcj.
怎麼樣,有意思吧,趕快去試試吧,我相信你也會感到有趣的!