一.編寫helloworld.c Android.mk [root@fontlose jni]# cat hello.c [root@fontlose jni]# cat Android.mk 二.編譯1) 使用NDK r5目錄結構 ─ hello├── jni ├── Android.mk └── hello.c 2) 使用通用toolchain在hello.c目錄下Windows: http://www.codesourcery.com/gnu_toolchains/arm/portal/package3400/public/arm-none-linux-gnueabi/arm-2008q3-41-arm-none-linux-gnueabi.exe Linux: http://www.codesourcery.com/gnu_toolchains/arm/portal/package3399/public/arm-none-linux-gnueabi/arm-2008q3-41-arm-none-linux-gnueabi.bin 3) 在源碼環境中編譯1. 在源碼development 目錄下創建hello目錄2.將helloworld.c Android.mk拷貝至hello目錄下 3. [root@fontlose Android-2.3]# . build/envsetup.sh 4. [root@fontlose Android-2.3]# mmm development/hello/ 5.編譯完成執行文件在out/target/product/generic/symbols/system/bin/helloworld下載至設備 4) 使用源碼自帶Toolchain在這之前要把上一步中的helloworld模塊clean:使用showcommands選項重新編譯helloworld,查看具體命令,從輸出命令行可以看到,Android編譯環境所用的交叉編譯工具鏈是prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc。 利用上面輸出的編譯命令,簡化來手工編譯helloworld程序,先手工刪除上次編譯得到的helloworld程序: gcc編譯,生成目標文件 生成可執行文件: 使用了out/host/linux-x86/bin/soslim工具進行STRIP Android並沒有采用glibc作为C庫,而是采用了Google自己開發的Bionic Libc,通用的Toolchain用來編譯和移植Android 的Linux內核是可行的,因为內核並不需要C庫,但是開發Android的應用程序時,其他Toolchain編譯的應用程序只能采用靜態編譯的方式才能運行,使用靜態方式編譯出來的執行文件都比較大。 From:http://blog.csdn.net/fontlose/article/details/6666671 |
