Android NDK配、编译、调试

Android NDK编程开发

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

环境说明

OSWindows 7 x64

Adt-bundle-windows-x86-x64Eclipse 4.2.0

Adt

NDKAndroid-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

Android NDK配、编译、调试_第1张图片 

更新ADT

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

Android SDK Manager->Tools->Option

Android NDK配、编译、调试_第2张图片 

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

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

Android NDK配、编译、调试_第3张图片 

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

Android NDK配、编译、调试_第4张图片 

这里涉及到:

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自带的例子因为问题太多了。在新建过程中最好minSDKVersiontargetSDKVersion,保持一致要不在后续开发中会出现不必要的问题。

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

Android NDK配、编译、调试_第5张图片 

其他的采用默认。

Android NDK配、编译、调试_第6张图片 

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

新建完成以后的界面

Android NDK配、编译、调试_第7张图片 

配置NDK编译

Add Native Support

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

Android NDK配、编译、调试_第8张图片 

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

Android NDK配、编译、调试_第9张图片 

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

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

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

配置编译C++代码

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

Android NDK配、编译、调试_第10张图片

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

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

首先配置系统环境路径

添加NDKROOT

Android NDK配、编译、调试_第11张图片 

PATH中追加

Android NDK配、编译、调试_第12张图片 

然后配置ndk-build编译

Android NDK配、编译、调试_第13张图片 

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

首先配置环境变量

Android NDK配、编译、调试_第14张图片 

然后配置ndk-build

Android NDK配、编译、调试_第15张图片 

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

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

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

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

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

Android NDK配、编译、调试_第16张图片 

第一步:

Android NDK配、编译、调试_第17张图片 

第二:

Android NDK配、编译、调试_第18张图片 

第三:

Android NDK配、编译、调试_第19张图片 

 

 

编译NDK提示

 

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

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

编写NDK代码

首先添加C/C++代码

Android NDK配、编译、调试_第20张图片 

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

Java_com_jni_helloworld_HelloWorld_Hello:函数名

Java:固定格式

com_jni_helloworld:包的名称

HelloWorldActivity名称,类似类名称

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

 

Java代码中引用JNI代码

Android NDK配、编译、调试_第21张图片 

调试NDK代码

 

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

Debug As->Android Native Appliton

Android NDK配、编译、调试_第22张图片 

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

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

附件

ndk-build常用选项

Android NDK引入shell脚本ndk-build,简化源码编译,其实质是对GNU Make的分装,主要用于调用正确的NDK编译脚本。Ndk-build必须要gun make3.841及以上版本的make才能正常支持ndk-buildNDK。建议将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


你可能感兴趣的:(NDK)