确定下载对应的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->Help->Install New Software
打开Android SDK Manager,首先设置网络代理,因为下载地址被屏蔽只能通过代理下载数据。
Android SDK Manager->Tools->Option
然后刷新开始下载。建议不要更新最新版本,根据自身的NDK的版本下载,我选择了API19和API21两个版本的所有文件下载,不要使用过多版本,这样控制容易出现问题更具需要配置。
首先全选所有的版本,执行删除操作。
然后在勾选对应的版本进行更新下载。
这里涉及到:
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
完成以后打开Eclipse->Preference->Android看看是否有NDK选择,如果没有就下载一个NDK Plugin插件。com.android.ide.eclipse.ndk_23.0.7.2120684.jar
然后将Eclipse->Preference->Android->NDK路径指向对应路径
这样就完成基础的环境配置。
因为涉及NDK开发,不建议导入和使用NDK自带的例子因为问题太多了。在新建过程中最好minSDKVersion,targetSDKVersion,保持一致要不在后续开发中会出现不必要的问题。
首先新建一个Android程序。设置如下:
其他的采用默认。
Activty Name根据需求自行决定是否更改,我这边修改为HelloWorld。
新建完成以后的界面
新建完成Android程序以后,在工程树右键Android Tools->Add Native Support
完成操作以后工程树发生变化,执行一次编译工程,将会多出Include、libs、jni三个文件夹。
Include:主要存储C/C++以及NDK使用的头文件路径
Libs:主要存储生成的so文件,区分不同的CPU/API
Jni:用于存储C/C++代码以及相关的mk文件
打开工程数据属性Property->C++ Build
建议将NDK路径添加到PATH环境变量中,这样可以简化设置,减少部分意外事件的发生。
将NDK路径添加到PATH的配置方法
首先配置系统环境路径
添加NDKROOT
在PATH中追加
然后配置ndk-build编译
未设置NDK路径到PATH的配置方法
首先配置环境变量
然后配置ndk-build
NDK_DEBUG=1:必选,编译为可调式版本的二进制文件,默认为NDK_DEBUG=0
V=1:可选,执行ndk-build且打印出所执行的消息编译命令
到此已经完成NDK的编译操作,每次执行Build Project后就可以执行编译和调试开发
对于自动编译,建议大型工程和频繁更改的工程不要设置,否则只要编译目录文件修改后将会执行编译,影响工作。
第一步:
第二:
第三:
编译NDK提示
这是由于使用的是64位的原因。找到x86的ndk安装包把prebuilt里面的android-arm拷贝到x64位的路径文件夹下。
关于修改copy命令暂时未找到。
首先添加C/C++代码
首先添加extern “C”,导出该函数,主要避免C/C++之间语法和编译上的异常问题,直接导出为C接口的函数。注意函数的字符大小写需要和对应类名、包名操持一致,要不出现意外。我的例子中是没有考虑到小写的问题。
Java_com_jni_helloworld_HelloWorld_Hello:函数名
Java:固定格式
com_jni_helloworld:包的名称
HelloWorld:Activity名称,类似类名称
Hello:真正的函数名,上层调用的函数名
在Java代码中引用JNI代码
首先以安卓方式直接启动,确认代码编写正常,然后确定模拟器或手机正常启动运行的状态下,执行NDK调试。
Debug As->Android Native Appliton
当出现问题时直接以Android方式调试,确定代码是否编写正常,或者是模拟器或调试机正常启动连接。
有什么问题直接回帖,将长期维护本贴
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。