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

Android NDK使用的更多相关文章

  1. Android NDK debug 方法

    最近又频繁遇到 NDK 的错误,记录一下debug调试的一些经验,以备后续查看 一般来说,在Android Studio中的Monitor中将过滤器的 LOG TAG 设置为 "DEBUG& ...

  2. Android NDK开发Hello Word!

    在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...

  3. Android NDK开发初识

    神秘的Android NDK开发往往众多程序员感到兴奋,但又不知它为何物,由于近期开发应用时,为了是开发的.apk文件不被他人解读(反编译),查阅了很多资料,其中有提到使用NDK开发,怀着好奇的心理, ...

  4. android NDK debug 遇到的问题与解决方法

    最近在研究android  NDK 的eclipse调试,遇到点问题,总结一下: 1.Unknown Application ABI :在application.mk里面添加APP_PLATFORM ...

  5. 初识Android NDK

    本文介绍Windows环境下搭建Android NDK开发环境,并创建一个简单的使用Native代码的Android Application. 一.环境搭建 二.JNI函数绑定 三.例子 一.环境搭建 ...

  6. Android SDK Android NDK Android Studio 官方下载地址

    2016.12 Android Studio Windows Includes Android SDK https://dl.google.com/dl/android/studio/install/ ...

  7. Android NDK之JNI陷阱

    背景: 最近一个月一直在做移植库的工作,将c代码到share library移植到Android平台.这就涉及到Android NDK(native develop kit)内容.这里只想记录下JNI ...

  8. Android NDK开发

    Android NDK 开发教程(极客学院) 一.Android NDK环境搭建 使用最新ndk,直接抛弃cygwin,以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin( ...

  9. Eclipse+CDT+GDB调试android NDK程序(转)

    Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 11.10 eclipse 3.7(indego) for ja ...

  10. android NDK入门 windows下安装cygwin

    一.Android NDK环境简介 Android NDK 是运行于Android 平台上的Native Development Kit 的缩写. Android 应用开发者可以通过NDK 调用C 或 ...

随机推荐

  1. C17K:Lying Island

    链接 题意: 有n个人,每个人可能会说: 第x个人是好人/坏人 如果第x个人是好人/坏人,则第y个人是好人/坏人 思路: 状压dp,首先每个人所说的人只能是他前面10个人,所以对于第i个人记录下,他前 ...

  2. springboot 采用HttpClient获取天气预报 异常及原因

    采用httpClient调用天气预报地址获取出现异常 2018-10-04 15:18:25.815 ERROR 10868 --- [nio-8080-exec-5] o.a.c.c.C.[.[.[ ...

  3. 为什么rows这么大,在mysql explain中---写在去acumg听讲座的前一夜

    这周五下班前,发现了一个奇怪问题,大概是这个背景 一张表,结构为 Create Table: CREATE TABLE `out_table` ( `id` ) NOT NULL AUTO_INCRE ...

  4. Pascal小游戏 文件的产生

    一个整人的Pascal小程序 运行之后硬盘里面会有一大堆垃圾,当然更好的方法当然不是这样做! var a,b,c,d:char;beginfor a:='0' to '9' dofor b:='0' ...

  5. 一个初学者的辛酸路程-jQuery

    前言: 主要概要: 1.HTML+CSS补充 2.DOM事件 3.jQuery示例 内容概要: 1.布局 代码如下 <!DOCTYPE html> <html lang=" ...

  6. DWZ(J-UI)之路:错误

    1:关于左侧点击会把右边小窗口替换掉,导致右边永远只有一个小窗口. 方法:因为缺少了这个—— <li><a href="/admin/demo/index" ta ...

  7. CodeForces-1061D TV Shows

    题目链接 https://vjudge.net/problem/CodeForces-1061D 题面 Description There are nn TV shows you want to wa ...

  8. 【志银】Win764位配置Github环境及将代码部署到Github pages-志银强势总结

    (软件及教程下载分享:链接:http://pan.baidu.com/s/1dFysay9 密码:pug0) 1-安装Git-2.9.2-64-bit.exe(解压安装文件,运行安装程序,除了记得修改 ...

  9. NodeJs01 文件浏览器

    ES6常用新语法 前言 是时候学点新的JS了! 为了在学习NodeJs之前,能及时用上语言的新特性,我们打算从一开始先学习一下JavaScript语言的最基本最常用新语法.本课程的内容,是已经假设你有 ...

  10. asp.net连接SQL server,SQLLite,Oracle,Access数据库

    asp.net中连接数据库有两种方式为appSettings和connectionStrings connectionStrings比较常用,所以只讲一下connectionStrings方式的连接 ...