步驟 1:前往 Android ndk 官網:http://developer.android.com/intl/zh-tw/ndk/downloads/index.html
依照自己的作業系統下載自我解壓縮檔。下面以 Linux Ubuntu 為例,用此作業系統較易進行跨編譯,用 Windows 則需要使用 Cygwin,較複雜且使用不易。
步驟 2:下載解壓檔後,切換到檔的目錄下開啟終端機,執行下列的指令:
chmod a+x android-ndk-r10c-linux-x86_64.bin
步驟 3:依照自己需求,產生相對應 Android API level 版本,以便可以在那個版本系統上執行,否則對應錯誤會導致編譯出執行檔無法執行。(可向下相容)
出現類似如下的錯誤:
CANNOT LINK EXECUTABLE: cannot locate symbol "sigfillset" referenced by "./rgbimg"...
PIE 簡介:Error: only position independent executables (PIE) are supported
PIE這個安全機制從4.1引入,但是Android L之前的系統版本並不會去檢驗可執行文件是否基於PIE編譯出的。因此不會報錯。但是Android L已經開啟驗證,如果調用的可執行文件不是基於 PIE 方式編譯的,則無法運行。
Executables with PIE (Position Independent Execution) have been supported since Android 4.1. It is a security feature involving address space layout randomization(ASLR) to prevent attacks such as buffer overflow. In Android’s latest release Lollipop, PIE has been made a requirement.
Android 平台對應參考:
platforms: see http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels
- Android 1.5 API level 3 (arm/neon)
- Android 1.6 API level 4 (arm/neon)
- Android 2.0 API level 5 (arm/neon)
- Android 2.2.x API level 8
- Android 2.3-2.3.2 API level 9 (arm/neon, x86, mips)
- Android 2.3.3-2.3.4 API level 10
- Android 3.0.x API level 11
- Android 3.1.x API level 12
- Android 3.2 API level 13
- Android 4.0-4.0.2 API level 14
- Android 4.0.3-4.0.4 API level 15
- Android 4.1 API level 16
- Android 4.2 API level 17
- Android 4.3 API level 18
- Android 4.4 API level 19
- Android 5.0 API level 21
- Android 5.1 API level 22
步驟 4:執行產生 standalone toolchain 指令:
cd ~/android-ndk-r10e/build/tools ./make-standalone-toolchain.sh --platform=android-16 --install-dir=/home/lab501/android-toolchain-16 --ndk-dir=/home/lab501/android-ndk-r10e --toolchain=arm-linux-androideabi-4.8 --system=linux-x86_64
–install-dir 產生的 toolchain 要安裝的目錄,–ndk-dir 是指定的 ndk 目錄。
產生工具就到這裡結束。下回開始教如何編譯一個 Node.js 在 Android 上執行。