Android NDK工程的编译和链接以及使用gdb进行调试
前提条件:已经安装了JDK 6.0、android SDK、NDK r9和eclipsele4.2开发环境.
推荐下载Android开发的综合套件adt-bundle-windows-x86,再下载Android NDK既可以开始Android NDK程序的编程了。
1. 首先在eclipsele4.2上创建一个空的Android工程,无所谓,只要是一个Android工程就OK了。
2. 安装NDK开发的插件com.android.ide.eclipse.ndk_23.0.2.1259578.jar
之前的Eclipse版本是包含有这个插件的,不用自己手动安装这个插件;最新的Eclipse软件不包含有该插件,必须自己下载com.android.ide.eclipse.ndk_23.0.2.1259578.jar插件,然后复制到eclipse\plugins的文件夹下,关闭Eclipse软件然后重启Eclipse,再进行操作就可以出现上图的实例。
3. 配置NDK的路径
Eclipse的主菜单Windows—>preferences打开如下图,配置Android NDK的文件路径:
然后进行如下的操作:
出现如下所示,点击finish即可。
点击完成以后,观察Android工程,会发现多生成3个文件夹,如下图所示:
4. Andriod NDK代码的编写
Android NDK的开发用C或C++都可以,但是使用C或C++开发NDK时,应该使用C或C++的标准库提供的函数。
5.在 Android.mk 文件和 Application.mk 文件中可以添加NDK编程需要支持的库,具体信息可以参考NDK编程的谷歌文档。
Android NDK编程可以使用的C++的库:
添加C++的库的支持:
6. Android NDK的动态调试
再次编译Android工程会出现一下的错误提示:
按下图的操作进行该错误的屏蔽,再次编译程序就不会再弹出错误提示框了。
Android NDK的调试使用GDB程序,并且Android NDK的调试原理是使用socket进行通信的,因此必须要有客户端和服务器端,并且Android虚拟机(模拟器)要打开。要调试Android NDK程序还必须自己编写调试的debug.mk和connect.mk文件,并将这两个文件拷贝到Android
 NDK工程的文件目录下。
服务器端的debug.mk文件的编写:
客户端connect.mk文件的编写:
Service--打开cmd程序,开启Android NDK调试的服务端:
调试服务器端,不能关闭。
再
client--打开一个cmd程序开启Android NDK调试的客户端:
注意:
D:\adt-bundle-windows-x86-20130219\android-ndk-r9\prebuilt\android-arm\gdbserver(调试符号)
D:\adt-bundle-windows-x86-20130219\android-ndk-r9\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\bin(GDB)
这两个路径要添加环境变量以后就没有出现错误了。
Mark一下:
如果要在windows平台的cmd环境下运行make命令执行xxx.mk文件中的操作,需要将Android的NDK配置环境中交叉工具链提供的make.exe工具的路径
D:\adt-bundle-windows-x86-20130219\android-ndk-r9\prebuilt\windows\bin
路径添加到windows系统的path环境变量中。
Android NDK工程的编译和链接以及使用gdb进行调试的更多相关文章
- 在eclipse中配置android ndk的自动编译环境builders
		无论linux还是mac在jni目录中直接运行 ndk-build 就可以生成 lib目录及所需要的 so文件: windows 装上lnx模拟器也是一样: 每次修改完 c++代码, 都要运行一下 ... 
- Android NDK开发之C调用Java及原生代码断点调试(二)
		上一篇中,我们主要学习了Java调用本地方法,并列举了两大特殊实例来例证我们的论据,还没学习的伙伴必须先去阅读下,本次的学习是直接在上一篇的基础上进行了.点击:Android NDK开发之从Java与 ... 
- Android Studio工程Gradle编译报错
		一.环境的搭建: 首先搭建好AndroidStudio环境.我使用的是Ubuntu 12.04系统(由于此机器还要运行其他程序,为避免兼容性问题,暂未更新到最新,而继续沿用此稳定版),java和jdk ... 
- Android NDK引用预编译的动态链接库
		NDK里有个例子: android-ndk-r10/samples/module-exports/jni一看就懂了 ———————————————————————————– 从r5版本开始,就支持预编 ... 
- 〖Linux〗Android NDK调用已编译好的C/C++动态连接库(so文件)
		一.背景:假定已有应用程序zigbeeclient.cpp,内容如下: ... extern "C" { int getresult(int argc, char **argv); ... 
- android ndk opencv  jni 编译集成
		OpenCV (Open Source Computer Vision Library) https://docs.opencv.org/2.4/doc/tutorials/introduction/ ... 
- 解决Android NDK 报jxxx编译找不到
		如题 解决: 引入NDK对应的arm或者x86库 如果你用的是GinyMotion模拟器,那就引入x86库 不多说了,见截图 1.选择Propertities->C/C++ General-&g ... 
- windows android ndk的某些编译工具报错乱码0x5 或拒绝访问05
		在IDEA或者AndroidStudio的快捷方式上右键属性 > 兼容性 > 以管理员身份运行 解决问题. 
- android ndk 编译 libevent
		1. 下载 libevent 2.1.8 版本 https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/ ... 
随机推荐
- brew安装Nginx
			目录 安装流程 常用命令记录 典型配置方式 查看启动状态是否有报错 php 启动 参考 安装流程 这里使用 brew 来安装软件. 安装 brew install nginx 查看安装信息(经常用到, ... 
- 关于Laravel框架中Guard的底层实现
			1. 什么是Guard 在Laravel/Lumen框架中,用户的登录/注册的认证基本都已经封装好了,开箱即用.而登录/注册认证的核心就是: 用户的注册信息存入数据库(登记) 从数据库中读取数据和用户 ... 
- web服务器-并发服务器2
			阅读目录 1.Web静态服务器-5-非堵塞模式 2.Web静态服务器-6-epoll 3.Web静态服务器-7-gevent版 4.知识扩展-C10K问题 一.Web静态服务器-5-非堵塞模式 单进程 ... 
- 在onBackPress中实现退出拦截时不生效
			现象描述 在快应用中弹出一个弹窗,期望效果是该弹窗在用户确认后再退出,但是使用onbackpress控制确认弹窗后自动退出不生效. 问题分析 快应用引擎实现机制决定了onbackpress不能有耗时的 ... 
- 攻防世界 reverse BabyXor
			BabyXor 2019_UNCTF 查壳 脱壳 dump 脱壳后 IDA静态分析 int main_0() { void *v0; // eax int v1; // ST5C_4 char ... 
- 翻译 - ASP.NET Core 基本知识 - 配置(Configuration)
			翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0 ASP ... 
- asp.net core 2.0 web api + Identity Server 4 + angular 5 可运行前后台源码
			前台使用angular 5, 后台是asp.net core 2.0 web api + identity server 4. 从头编写asp.net core 2.0 web api 基础框架: 第 ... 
- Mysql之锁机制
			全局锁 全局锁就是对整个数据库实例加锁.MySQL 提供了一个加全局读锁的方法FTWRL Flush tables with read lock 全局锁的典型使用场景是,做全库逻辑备份,也就是把整库每 ... 
- python多版本与虚拟环境
			这篇纯python技术文章,我自己平时也会用到,在此记录一下. 为什么会用到多个Python版本? 用macOS和Ubutntu的同学都知道系统默认安装的Python2.7.x,然后,我们平时pyth ... 
- python中zip函数的使用
			zip(*iterables) zip可以将多个可迭代对象组合成一个迭代器对象,通过迭代取值,可以得到n个长度为m的元组.其中n为长度最短可迭代对象的元素个数,m为可迭代对象的个数.并且每个元组的第i ... 
