android NDK 交叉編譯

jia635發表於2014-07-24

android中介軟體開發,本來利用NDK就直接生成了一個SO檔案,然後直接打包到APK裡,即可執行,但是由於一般真機是不帶有root許可權的,即使SSH可以解決root許可權,當到了java層,root許可權又失效了。經常碰到operation not permitted 或 permission delied 之類的錯誤,但目前還有一個可以執行在真機上的C編譯器,因為手機的資源畢竟是很有限的,可喜的是android-NDK給我們提供了這個交叉編譯環境,只是生成SO檔案的時候,把裡面的細節全部省掉了。不過還是保留了許多中間過程的開發HTML文件。下面說說具體的實現過程:

1,下載NDK,並配合NDK環境變數為NDK的安裝路徑

2,根據NDK裡docs文件裡的standalone-toolchain.html來抽取交叉編譯的環境。

3,配置SYSROOT環境變數:  SYSROOT=$NDK/platforms/android-8/arch-arm //android-8是你的android開發版本所定
4,然後執行命令:

     $NDK/build/tools/make-standalone-toolchain.sh --platform=android-5 --install-dir=/tmp/my-android-toolchain

     /tmp/my-android-toolchain是你交叉編譯環境的複製路徑。最好別放在tmp目錄裡,因為重啟機子就立即消失了。這個新生成的檔案 夾即是你的交叉編譯環境

5,配置PAHT和CC環境變數:

    export PATH=/tmp/my-android-toolchain/bin:$PATH
    export CC=arm-linux-androideabi-gcc
    如果需要長久有效,在/etc/profile里加上PATH=/..../bin:$PATH

                                                            export PATH

   其他的類似處理。

6,把你要需要編譯的C檔案放在以上生成的編譯環境的bin目錄下,例如:/tmp/my-android-toolchain/bin,進入這個目錄裡,輸入命令: $CC -o  hello hello.c (這相當於我們平時的gcc命令,只是這裡需要引用arm裡的庫,而不是X86裡的庫)

hello.c:

 #include<string.h>

 #include<stdio.h>
 int main()

 {

printf("hello,toolchain!/n");

return 0;

 }

 

即生成了可在手機arm裡執行的可執行檔案hello

7,把這個可執行檔案hello放到手機裡的/data/目錄下,方法有很多,這裡介紹兩種:

    一、把這個檔案放在電腦的某個目錄下,然後進入DOS的這個目錄下,執行如下命令:adb push hello /data/

    二、放在SDCARD目錄下,然後執行cp /sdcard/hello /data/也可以

8,進入/data/目錄下,執行這個hello檔案,例如“./hello”,即可以在adb shell裡看到列印結果: hello,toolchain!

相關文章