文档章节

Android NDK配、编译、调试

洋碱
 洋碱
发布于 2016/01/19 09:01
字数 1648
阅读 1108
收藏 2
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

 

更新ADT

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

Android SDK Manager->Tools->Option

 

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

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

 

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

 

这里涉及到:

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程序。设置如下:

 

其他的采用默认。

 

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

新建完成以后的界面

 

配置NDK编译

Add Native Support

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

 

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

 

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

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

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

配置编译C++代码

打开工程数据属性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后就可以执行编译和调试开发

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

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

 

第一步:

 

第二:

 

第三:

 

 

 

编译NDK提示

 

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

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

编写NDK代码

首先添加C/C++代码

 

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

Java_com_jni_helloworld_HelloWorld_Hello:函数名

Java:固定格式

com_jni_helloworld:包的名称

HelloWorldActivity名称,类似类名称

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

 

Java代码中引用JNI代码

 

调试NDK代码

 

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

Debug As->Android Native Appliton

 

当出现问题时直接以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


© 著作权归作者所有

洋碱

洋碱

粉丝 3
博文 75
码字总数 29500
作品 0
广州
高级程序员
私信 提问
加载中

评论(2)

洋碱
洋碱 博主

引用来自“杨周元echo”的评论

你好,在添加ndk-build.cmd后,后来提示说系统找不到指定的路径,请问是怎么回事尼?

回复@杨周元echo : 这个需要检查你的系统化环境变量是否设置正确,然后清理一下你的工程配置,最后一种可能就是编译器的一个提示而已,不会影响后续的操作
杨周元echo
你好,在添加ndk-build.cmd后,后来提示说系统找不到指定的路径,请问是怎么回事尼?
闲来无事,塔建了一下android ndk和简单的编译并安装运行apk

一、Android Ndk 下载地址 http://developer.android.com/tools/sdk/ndk/index.html#Installing 二、环境变量配质 1、创建环境变量名 ‘ANDROID_NDK’,变量名的值'D:androidandroid-ndk-r9'......

军歌
2013/08/28
0
0
Cocos2d-x 2.2.3 使用NDK配置编译环境

https://blog.csdn.net/wwj_748/article/details/30072379 2014年6月11日 Cocos2d-x 3.0以下的开发环境的配置恐怕折磨了很多人,使用cygwin配置编译环境足够让初学者蛋疼一阵子了。本篇博客就...

tropicofcancer9
2018/04/19
0
0
开发兼容英特尔架构的Android应用(三) 如何设置您的NDK应用

如何设置您的NDK应用 本篇主要介绍NDK应用的开发步骤,调试流程已经如何为英特尔架构设置您的NDK应用。 相关文章 •1. 开发兼容英特尔架构的Android应用(一) 应用架构介绍 •2. 开发兼容英特...

LiSteven
2013/08/07
0
0
android NDK开发、编译、调试环境搭建与操作入门

前话 现在越来越多的应用开发、场景会用到NDK,NDK的开发环境和工具也可谓是“日新月异”,Googleg还是比较给力,时至今日ADT已经发布了21.0.1,实际上从20.0.3已经对我们需要使用的NDK有了比...

带梦想一7飞
2013/10/14
0
0
使用 Swift 语言编写 Android 应用入门

Swift标准库可以编译安卓armv7的内核,这使得可以在安卓移动设备上执行Swift语句代码。本文解释了如何在你的安卓手机上运行一个简单的“hello,world”程序。 如果你遇到了任何问题,请参考下...

oschina
2016/04/19
12.4K
27

没有更多内容

加载失败,请刷新页面

加载更多

用Javascript评估用户输入密码的强度

密码已经是我们生活工作中必不可少的工具,但一个不安全的密码有又有可能会给我们造成不必要的损失。作为网站设计者,如果我们在网页中能对用户输入的密码进行安全评估,并显示出相应的提示信息...

花漾年华
29分钟前
0
0
Python 打开目录与指定文件

Python打开外部文件有很多方法, os.popen打开外部程序,但发现只能打开文件所在目录的文件 os.system可打开外部文件os.system(command) command 要执行的命令,相当于在Windows...

shzwork
30分钟前
2
0
Leetcode # 118:Pascal's Triangle 杨辉三角

118:Pascal's Triangle 杨辉三角 Given a non-negative integer numRows, generate the first numRows of Pascal's triangle. 给定一个非负整数 *numRows,*生成杨辉三角的前 numRows 行。 ......

iCodeBugs
41分钟前
1
0
IntelliJ IDEA导入Gradle项目

1.File > Open 找到项目后选择build.gradle文件,点击ok image 2.点击Open as Project image 3.选择本地Gradle以及JDK image 4.点OK完成...

青峰Jun19er
45分钟前
2
0
Python实现斐波那契数列

斐波那契数列大家都很熟悉吧,咱们在高中学数学的时候,老师会讲这个定律以及算法,其实数据结构和数学息息相关,数学思维好的往往逻辑思维就比较好,今天小猿圈带大家学习一下python的斐波那...

小猿圈加加
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部