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/ ...
随机推荐
- MySQL注入点与SQL语句的关系
目录 注入位置分类 内联式 - UNION query SQL injection 终止式 - End SQL injection 堆叠式 - Stacked queries SQL injectio ...
- 【知识点】 gcc和g++的联系和区别
目前(2020-09)GCC 编译器已经更新至 10.2版本,其功能也由最初仅能编译 C 语言,扩增至可以编译多种编程语言,其中就包括 C++ . 除此之外,当下的 GCC 编译器还支持编译 Go.O ...
- Java实现文件的读写
需求:实现基本的读写 package com.sbx.io; import java.io.File; import java.io.FileReader; import java.io.FileWr ...
- 理解ASP.NET Core 中的WebSocket
在本文中,我们将详细介绍RFC 6455 WebSocket规范,并配置一个通用的.NET 5应用程序通过WebSocket连接与SignalR通信. 我们将深入底层的概念,以理解底层发生了什么. 关 ...
- WeihanLi.Npoi 1.16.0 Release Notes
WeihanLi.Npoi 1.16.0 Release Notes Intro 最近有网友咨询如何设置单元格样式,在之前的版本中是不支持的,之前主要考虑的是数据,对于导出的样式并没有支持,这个 is ...
- js 数组的浅拷贝和深拷贝
1.背景介绍 javascript分原始类型与引用类型.Array是引用类型,直接用"="号赋值的话,只是把源数组的地址(或叫指针)赋值给目的数组,指向的是同一个内存地址,其中一个 ...
- C# 应用 - 封装类访问 Mysql 数据库
个人经历的项目主要都是用 Postgresql 或 Oracle 数据库,本文非原创,从他处整理而来. 1. 库类 mysql.data.dll using MySql.Data.MySqlClien ...
- P3369 【模板】普通平衡树 题解(Splay/FHQ)
题目链接 P3369 [模板]普通平衡树 解题思路1:Splay 注意查询的时候大于小于等于号千万不要搞错了:注意适时伸展 AC代码1 #include<stdio.h> #define ...
- EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录
前言 本文主要是讲解EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录 注意拦截器只有EF Core3.0+ 支持,2.1请考虑上下文工厂的形式实现. 说点题外话.. 一晃又大半年没更新技 ...
- redis雪崩,穿透,击穿
缓存雪崩:同一时间大量key到过期时间失效,可在设置失效时间时加随机数,如果直接修改数据库,那么一定会有不一致,通过失效时间去反复刷新缩短不一致的时间, 为了避免数据一直存在,一定要设置过期时间如果通 ...