Android NDK使用


1. 介紹

這里主要想記錄一下Android NDK開發C程序的使用方法

2. ndk下載

google官網或者國內鏡像網站下載android-ndk
形如:  android-ndk-r<version>-<os-type>-<arch>.zip

筆者使用的是CentOS 7 x86-64, 下載的是android-ndk-r17b-linux-x86_64.zip

關於不同到底該使用哪個版本的NDK, 從網上獲取的信息來看
使用哪個版本都沒問題 新版本的NDK應該是向下兼容的 同時傾向於編譯64位

當我們開發ndk應用時, 有兩種方式

 - 使用獨立工具鏈, 僅依賴Linux
 - 使用ndk工具, 依賴Android

2. 獨立工具鏈

有兩種方式可以生成獨立toolchain

首先將android-ndk-r17b-linux-x86_64.zip 解壓

2.1 make-standalone-toolchain.sh

# ./build/tools/make-standalone-toolchain.sh --platform=android-23 --package-dir=/opt --toolchain=arm-linux-androideabi-4.9
WARNING: make-standalone-toolchain.sh will be removed in r13. Please try make_standalone_toolchain.py now to make sure it works for your needs.
HOST_OS=linux
HOST_EXE=
HOST_ARCH=x86_64
HOST_TAG=linux-x86_64
HOST_NUM_CPUS=4
BUILD_NUM_CPUS=8
Auto-config: --arch=arm
Copying prebuilt binaries...
Copying sysroot headers and libraries...
Copying c++ runtime headers and libraries...
Creating package file: /opt/arm-linux-androideabi-4.9.tar.bz2
Cleaning up...
Done.

可以看到生成的工具鏈位於/opt/arm-linux-androideabi-4.9.tar.bz2
參數說明如下:

--platform:    Android API版本(android-23 <=> Android 6.0)
--toolchain:   工具鏈類型,可在toolchains中查看支持的類型
--package-dir: 工具鏈的存放路徑

2.2 make_standalone_toolchain.py

# ./build/tools/make_standalone_toolchain.py --arch arm --api 23  --package-dir /opt

沒有任何提示, 在/opt目錄下生成了arm-linux-androideabi.tar.bz2
參數說明如下:

--arch:        arm,arm64,mips,mips64,x86,x86_64
--api:         API version
--package-dir: Package location

其中需要說明的是arch, 通常手機都是arm, 但是是32位還是64位則需要判斷一下
參考<關於如何區分Android手機是32位還是64位>

3. ndk構建腳本

ndk提供了比較高級的構建腳本來實現ndk的開發

3.1 配置

在<project>目錄下創建Android.mk和Application.mk;  假定源代碼為test.c

Android.mk內容如下

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := testproj

LOCAL_SRC_FILES := \
    test.c

LOCAL_CFLAGS += -Wno-unused-parameter -Wno-pointer-arith \
                -Wno-missing-field-initializers

include $(BUILD_EXECUTABLE)

Application.mk內容如下

APP_ABI := x86_64
APP_BUILD_SCRIPT := /home/user/proj/Android.mk

3.2 編譯

使用如下命令即可進行編譯

$ export NDK=<ndk>
$ $NDK/ndk-build NDK_PROJECT_PATH=<project> NDK_APPLICATION_MK=<project>/Application.mk
$ $NDK/ndk-build NDK_PROJECT_PATH=<project> clean NDK_APPLICATION_MK=<project>/Application.mk

參考:
<NDK入門指南>
<Android.mk語法>
<理解Android Build系統>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM