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系统>