Android NDK编程开发

确定下载对应的adt-bundle和NDK,主要两个软件的操作系统版本。软件的版本配置是决定成功的重要因素。


环境说明

OS:Windows 7 x64

Adt-bundle-windows-x86-x64:Eclipse 4.2.0

Adt:

NDK:Android-ndk-windows-x86-x64(版本为9,经过测试NDK 10配置失败)

参考使用软件下载地址,目前只提供ndk插件

http://pan.baidu.com/s/1nukTked



版本与更新



查看版本

首先拿到版本以后不要急着开发,首先确定自己对应的软件版本。各个软件之间的版本将会直接影响到最终能否调试成功。

Eclipse版本查看

打开文件查看版本adt-bundle-windows-x86_64-20140702\eclipse\.eclipseproduct

Adt版本查看:

    Android SDK Manger中查看

NDK版本查看:

 网上下载,版本提前知道,具体通过软件查看未知。



版本更新



更新Eclipse

因为版本问题可能导致一些无法预测的问题,如果你有信心解决这些意外,可以跳过版本更新匹配。

首先选择版本更新,首先更新Eclipse版本

Eclipse->Help->Install New Software


 


更新ADT

打开Android SDK Manager,首先设置网络代理,因为下载地址被屏蔽只能通过代理下载数据。

Android SDK Manager->Tools->Option

Windows下 Android NDK 安装 android ndk版本_开发工具

 

然后刷新开始下载。建议不要更新最新版本,根据自身的NDK的版本下载,我选择了API19和API21两个版本的所有文件下载,不要使用过多版本,这样控制容易出现问题更具需要配置。

首先全选所有的版本,执行删除操作。

Windows下 Android NDK 安装 android ndk版本_移动开发_02

 

然后在勾选对应的版本进行更新下载。

Windows下 Android NDK 安装 android ndk版本_Android_03

 

这里涉及到:

Tools

Android SDK Tools

Android SDK Platform-tools

Android SDK Build-tools

Android <version>(API<version>)

SDK Platform

Sample for SDK

<Version> System Image:注意CPU/ABI版本和操作系统的位数

Google APIS

Sources for Android SDK

Extras


环境配置


配置SDK路径


配置NDK路径

完成以后打开Eclipse->Preference->Android看看是否有NDK选择,如果没有就下载一个NDK Plugin插件。com.android.ide.eclipse.ndk_23.0.7.2120684.jar

然后将Eclipse->Preference->Android->NDK路径指向对应路径

这样就完成基础的环境配置。


NDK开发


新建Android程序

因为涉及NDK开发,不建议导入和使用NDK自带的例子因为问题太多了。在新建过程中最好minSDKVersion,targetSDKVersion,保持一致要不在后续开发中会出现不必要的问题。

首先新建一个Android程序。设置如下:

Windows下 Android NDK 安装 android ndk版本_二进制文件_04

 

其他的采用默认。

Windows下 Android NDK 安装 android ndk版本_Android_05

 

Activty Name根据需求自行决定是否更改,我这边修改为HelloWorld。

新建完成以后的界面

Windows下 Android NDK 安装 android ndk版本_c/c++_06

 

配置NDK编译


Add Native Support

新建完成Android程序以后,在工程树右键Android Tools->Add Native Support

Windows下 Android NDK 安装 android ndk版本_Android_07

 

完成操作以后工程树发生变化,执行一次编译工程,将会多出Include、libs、jni三个文件夹。

Windows下 Android NDK 安装 android ndk版本_二进制文件_08

 

Include:主要存储C/C++以及NDK使用的头文件路径

Libs:主要存储生成的so文件,区分不同的CPU/API

Jni:用于存储C/C++代码以及相关的mk文件

配置编译C++代码

打开工程数据属性Property->C++ Build

Windows下 Android NDK 安装 android ndk版本_开发工具_09

建议将NDK路径添加到PATH环境变量中,这样可以简化设置,减少部分意外事件的发生。

将NDK路径添加到PATH的配置方法

首先配置系统环境路径

添加NDKROOT

 

在PATH中追加

Windows下 Android NDK 安装 android ndk版本_Android_10

 

然后配置ndk-build编译

Windows下 Android NDK 安装 android ndk版本_二进制文件_11

 

未设置NDK路径到PATH的配置方法

首先配置环境变量

Windows下 Android NDK 安装 android ndk版本_c/c++_12

 

然后配置ndk-build

Windows下 Android NDK 安装 android ndk版本_c/c++_13

 

NDK_DEBUG=1:必选,编译为可调式版本的二进制文件,默认为NDK_DEBUG=0

V=1:可选,执行ndk-build且打印出所执行的消息编译命令

到此已经完成NDK的编译操作,每次执行Build Project后就可以执行编译和调试开发


配置自动编译C/C++代码

对于自动编译,建议大型工程和频繁更改的工程不要设置,否则只要编译目录文件修改后将会执行编译,影响工作。

Windows下 Android NDK 安装 android ndk版本_开发工具_14

 

第一步:

 

第二:

Windows下 Android NDK 安装 android ndk版本_开发工具_15

 

第三:

Windows下 Android NDK 安装 android ndk版本_移动开发_16

 

 

 

编译NDK提示

Windows下 Android NDK 安装 android ndk版本_开发工具_17

 

这是由于使用的是64位的原因。找到x86的ndk安装包把prebuilt里面的android-arm拷贝到x64位的路径文件夹下。

关于修改copy命令暂时未找到。


编写NDK代码

首先添加C/C++代码

Windows下 Android NDK 安装 android ndk版本_Android_18

 

首先添加extern “C”,导出该函数,主要避免C/C++之间语法和编译上的异常问题,直接导出为C接口的函数。注意函数的字符大小写需要和对应类名、包名操持一致,要不出现意外。我的例子中是没有考虑到小写的问题。

Java_com_jni_helloworld_HelloWorld_Hello:函数名

Java:固定格式

com_jni_helloworld:包的名称

HelloWorld:Activity名称,类似类名称

Hello:真正的函数名,上层调用的函数名

 

在Java代码中引用JNI代码

Windows下 Android NDK 安装 android ndk版本_二进制文件_19

 

调试NDK代码

 

首先以安卓方式直接启动,确认代码编写正常,然后确定模拟器或手机正常启动运行的状态下,执行NDK调试。

Debug As->Android Native Appliton

Windows下 Android NDK 安装 android ndk版本_移动开发_20

 

当出现问题时直接以Android方式调试,确定代码是否编写正常,或者是模拟器或调试机正常启动连接。

有什么问题直接回帖,将长期维护本贴


附件


ndk-build常用选项

Android NDK引入shell脚本ndk-build,简化源码编译,其实质是对GNU Make的分装,主要用于调用正确的NDK编译脚本。Ndk-build必须要gun make3.841及以上版本的make才能正常支持ndk-build和NDK。建议将ndk-build所在的目录加入PATH环境变量中。

所有给ndk-build的选项都会直接传给GNU Make,由make运行NDK的编译脚本。几个常见调用方式如下:

ndk-build                 编译

ndk-build clean          清掉二进制文件

ndk-build NDK_DEBUG=1     编译为可调试版的二进制文件

ndk-build NDK_DEBUG=0     编译为release版

ndk-build V=1                       执行ndk-build且打印出它所执行的详细编译命令。

ndk-build -B                          强制重新编译

ndk-build -B V=1                   -B 和 V=1 的组合

ndk-build NDK_LOG=1          打印出内部的NDK日志信息(用于调试NDK自己)

ndk-build NDK_APP_APPLICATION_MK=<文件路径>      用这里指定的路径寻找Application.mk文件

ndk-build -C <project路径>  先cd进入<project路径>,然后执行ndk-build。