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!