`
qiang106
  • 浏览: 387976 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android NDK开发、编译、调试环境搭建与操作入门

阅读更多

 

前话 

      现在越来越多的应用开发、场景会用到NDK,NDK的开发环境和工具也可谓是“日新月异”,Googleg还是比较给力,时至今日ADT已经发布了21.0.1,实际上从20.0.3已经对我们需要使用的NDK有了比较好的支持了,使用Eclipse可以直接断点NDK代码。

 

       以前似乎我们只能通过打日志或者在其它工具如VS、Xcode下写测试工程来调试,以及使用神话般的GDB来调试,搭建调试环境算是程序调试过程中一点点雕虫小技吧。不废话,直入主题。

 

一、 首先工具准备

       Eclipse ADT插件,版本要求20.0.3以上;NDK,现在最新版本是r8d。Android官网上提供了eclipse、SDK、ADT打包下载,而Android开发不是必须的NDK需要单独下载。不过还是很多人不喜欢打包形式的,对自己喜欢的eclipse版本非常钟情之类。我们按非打包的形式下载的情况来搭建NDK环境:下载好之后,解压eclipse,安装ADT插件,以前我们用eclipse开发C/C++需要安装CDT插件,现在ADT插件已经包含了CDT,安装完ADT,需要设置下SDK目录,然后通过SDK Manager更新下SDK,然后还需要设置NDK目录。当然还有cygwin,官方下载默认安装选项就OK,设置好PATH就不用管了!

 

二、 几项简单设置

SDK目录配置:

       Eclipse文件菜单选择“Window”--->“Preferences”--->“Android”--->设置“SDK Location”--->”Browse”选择SDK目录即可。 如下图:



 

到此,普通Android开发环境已经OK,如果需要开发NDK,那么继续。 NDK目录配置: 设置完SDK后还需在“Android”配置项上设置下“NDK”,选择NDK后,有一个选项“NDK Location”,这里配置NDK根目录。

如下图:

 

 
 

       接下来选择在你要开发NDK的Android项目上右键,选择“Android Tools”再添加Native的支持。



 

       如果不需要调试,这时编译环境已经OK了; 另外:如果需要兼容老的项目,那么老项目的路径得规划好了,新项目我个人觉得把源码都通过eclipse来添加和编辑也未尝不可。这里就不细说这些具体的开发细节了,只探讨环境问题。 除了能开发、编译NDK之外,如果需要调试NDK,那么继续:

修改编译命令,在C++ Build中设置Build command,把Use default选项去掉,在ndk-build后面添加参数NDK_DEBUG=1,使得编译出的SO带源码等调试信息。 如下图:



 

开发、编译、调试环境到这里算是OK了。调试具体的操作继续看下面。

 

三、 操作方法

编译后如果查看源代码:

    Eclipse编译后,我们可以在C/C++视图中的Project窗口看到一个Binaries条目,里面有我们的so,调试环境中编译出来的so和非调试环境编译出来的so不一样,点它左边的个小三解,就可以看到源码了,这对于很多不是在此项目中开发的源码,这个查看方法非常有效。另外我们也可以在Debug视图中打开Executables的窗口,这里除了可以看到你自己项目的so,还可以添加外面编译好的带调试信息的so,然后在右边就也可以看到源码了。

具体见如下两个截图:



 

Executables窗口



 

最最最基本的操作——打断点

       打开源码后,打断点就跟平常一样的了,不过有时候可能会双击打断点,点半天也点不上,不急,这种情况下,你可以先启动Native Debug,

让eclipse先领会下你的意思,具体操作如下截图:

启动Native Debug



 
 

添加断点,跟平常Java断点没有太多区别:



 

断点进来后的效果:

 

跑起来之后,执行操作就等着进到断点这里来吧,效果如下,看图就什么都了解,变量、调用堆栈、反汇编、内存监控,基本上已经够我们用了,当然这比起原生的GDB,还是有些差异的,不能使用break commands,不能打补丁,不过我们也可以知足了。到这里你可以开始你的捉虫、抓鬼活动了。

 

 

四、 可能遇到的问题以及解决办法

       笔者在使用这个环境中还遇到了一些问题,也分享下,如果遇到同样的问题,大家也可以少走弯路了,再看下面吧。

1、 Eclipse可能报一堆的错误提示 由于eclipse的语法检查,当你打开一个源码,尤其是引入外面开发完成的项目,因为源码不是在工程中管理的,大部分情况会报一堆的错误提示,而你是明确这些问题实际上是不存在的,那么就可以这样子做了,设置项目属性,把eclipse多管的这些闲事给免了它的职,如下图,保存后,你会发现你的problems窗口下非常清爽了:

 

 

2、 NDK编译时报错 NDK编译时很多时候可能还会有各种各样的错误,我的解决办法就是google,我们遇到过的问题,一定别人早就遇到过了,一般就是在mk中加入一些参数即可,比如下面我就遇到过的一个问题 Android NDK: WARNING: APP_PLATFORM android-X is larger than android:minSdkVersion x in ./AndroidManifest.xm……

这个问题的解决办法在 Application.mk中添加一个参数APP_PLATFORM :=android-<minSdkVersion>就万事大吉了。

 

3、 NDK调试目标库(so)时,编译过程会清除libs目录所有的so 解决办法,○1把其它的so拷出libs目录,采用指定路径方式来加载so, ○2把其它so拷到另外一个目录,然后在mk文件中添加一个编译target,对这些so 进行一次拷贝,当默的“all”执行完之后再执行这个target,对其它so进行一次拷贝,当然也可以使用Ant添加一个编译脚本来做你想要做的事情。 在Android.mk中添加一个make的target,因为我Windows下装了cygwin所以用了cp来拷贝,Windows下相应的改成copy吧



 

然后在增量编译命令中加入这些target,如下图



 

4、 编译慢 这个问题真的是程序员必定会遇到的问题,不过在这里如是你是跟我一样是在Windows下进行NDK开发,蛋痛的很,编译时间你完全可以去喝杯咖啡。一个小改进,我们在配置编译命令的时候,加一个参数“-j4”,开启多线程去编,不过这时候你就真的只有去喝咖啡了,电脑CPU已经满了,还有一个解决办法,如果你面子大的话,找BOSS申请好机器、加内存换SSD去。

 

5、 一些不需要打断点这么麻烦的问题 很多情况下我们都只是打了日志就够了,NDK也提供了一些工具像ndk-stack, addr2line之类的可以帮助我们来分析日志、出错代码行等。

 

6、NDK调试,经常会碰错误:

No symbol table is loaded.  Use the "file" command.

 

使用ndk-gdb --start 启动程序第一个activity,但是此时so文件并没有被加载。解决方法:首先打开程序并使用,在保证so文件已经被使用的情况下,调用ndk-gdb命令调试程序进程。正确流程:1.创建一个模拟器或者使用真机运行想要调试的程序,确保so文件已经被加载。
一个比较简单的方法,在load so库的java文件中添加一个无关紧要的方法,比如:
	public static void test1(){
		Log.i(tag, "test1");
	}
 然后在主activity起来的时候,调用一下这个方法就OK了。

 

我所遇到的这些问题还是比较少,肯定还有更多更有趣更难搞的问题,欢迎大家找笔者一起交流遇到的问题。

 

     编辑这么一笔文章真的好不容易啊,累了半天。还好之前在公司内部发贴的时候已经写好并且编辑过一次了,真心佩服那些牛人,写那么多文章,真心觉得不容易。转的一定要标明原文链接啊

 

      android职业交流QQ 群,有兴趣的可以一起来多搞搞技术、职业交流,互相学习、提高,互通好的职业信息,群号:66262654

  • 大小: 38.7 KB
  • 大小: 21.8 KB
  • 大小: 50.8 KB
  • 大小: 26.1 KB
  • 大小: 21.7 KB
  • 大小: 15 KB
  • 大小: 21.8 KB
  • 大小: 8.7 KB
  • 大小: 28.8 KB
  • 大小: 33.9 KB
  • 大小: 5.7 KB
  • 大小: 15.2 KB
分享到:
评论
7 楼 kooks 2015-05-18  
楼主我按照你上面的步骤一步一步进行了配置,但是就是进入不了设置的断点啊?楼主能加我的QQ不,非常感谢。QQ号:524586798
6 楼 woyaowenzi 2013-12-10  
楼主最后的心声真是发自肺腑啊。哈哈哈哈。。。。另外问个小问题,在Debug时,你的那个变量提示窗口怎么搞出来的(就是鼠标放到变量上,显示变量的值);还有,你知道如何添加C/C++代码的智能感知么?
5 楼 qiang106 2013-10-30  
f1990512 写道
你好 请问cygwin 安装需要配置什么环境变量啊?
我这里ndk 打了断点 但是debug的时候进不去断点。求帮助

cygwin只要设置一个PATH就可以了
4 楼 f1990512 2013-08-27  
你好 请问cygwin 安装需要配置什么环境变量啊?
我这里ndk 打了断点 但是debug的时候进不去断点。求帮助
3 楼 qq51921182 2013-07-01  
我想请问下,为什么我设置了断点都进不去呢
2 楼 zdszm 2013-04-08  
楼主:
1 楼 zdszm 2013-04-08  
楼主:

相关推荐

    androidndk开发实战

    首先,资源中的“Android NDK 开发环境搭建.doc”提供了详细的步骤来指导用户配置NDK开发环境。这通常包括下载和安装NDK,设置Android Studio,配置路径变量,以及构建本地库项目。了解这些步骤是开始NDK编程的基础...

    Android NDK开发示例

    **NDK开发环境搭建** 首先,你需要安装Android Studio和NDK。在Android Studio中,可以通过SDK Manager下载并配置NDK。确保选择与你的操作系统和项目需求相匹配的版本。此外,还需要设置好CMake或ndk-build作为构建...

    Android_NDK开发入门示例

    ### Android NDK 开发入门详解 #### 一、Android NDK 概述 Android NDK (Native Development Kit) 是一套工具集,它允许开发者使用 C 或 C++ 编写原生代码来构建 Android 应用程序。这为需要高性能计算的应用(如...

    AndroidNDK入门项目实战

    开发环境搭建 - **设置环境变量**:确保Android SDK、NDK和JDK路径已正确添加到系统环境变量。 - **Android Studio配置**:安装NDK插件,配置项目的build.gradle文件,指定NDK版本和abi支持。 - **JNI接口**:Java...

    Android ndk

    ### 二、NDK环境搭建 1. **下载与安装**:首先从Android官方网站下载适合的NDK版本,安装到指定目录。 2. **配置环境变量**:将NDK的路径添加到系统环境变量中,以便于命令行调用。 3. **集成到IDE**:对于...

    android NDK

    环境部署:Windows XP下的Android NDK环境搭建 在Windows XP环境下搭建Android NDK环境,主要步骤包括: - **安装必要的软件**:首先确保已安装Java Development Kit (JDK) 和 Android SDK。 - **下载并安装NDK**...

    android+NDK 开发.pdf

    文档还提到了一本书籍——《Google Android开发入门与实战》,这本书对于初学者来说非常有用,因为它不仅介绍了Android的基本概念和技术,还提供了大量的实际案例分析。以下是该书的一些亮点: - **最新SDK支持**:...

    android 安卓 史上最强NDK入门项目实战

    二、NDK开发环境搭建 2.1 安装NDK:首先需要下载并安装Android NDK,可以从Android开发者官方网站获取最新版本。 2.2 集成NDK到IDE:对于Android Studio,可以通过设置Gradle插件集成NDK,配置本地路径和编译选项。 ...

    Android应用源码史上最强NDK入门项目实战.zip

    二、NDK开发环境搭建 要开始NDK开发,首先需要安装Android Studio,然后配置NDK路径。在Android Studio中,可以通过设置菜单找到Android SDK Manager,下载并安装NDK组件。同时,确保CMake、LLDB等构建工具也已安装...

    Android+ndk

    ### Android NDK编程入门知识点详解 ...通过以上步骤,开发者可以从零开始搭建一个支持NDK的Android开发环境,并能够编写和调试使用C/C++实现的功能模块。这不仅有助于提升应用性能,还能增强代码的安全性和移植性。

    史上最强NDK入门项目实战.zip

    1. **环境配置**:包括设置Android Studio、安装NDK、配置CMake或ndk-build系统,以及调试环境的搭建。 2. **JNI接口**:Java Native Interface(JNI)是Java与原生代码交互的桥梁,学习如何定义本地方法、编写JNI...

    android 开发入门

    首先,让我们来看看Android开发环境的搭建。要开始Android应用开发,你需要安装以下软件: 1. **Cygwin**:一个提供Linux命令行环境的Windows工具,用于在Windows上模拟Linux环境。 2. **NDK (Native Development ...

    android开发资料大全

    android开发环境搭建篇详尽的教程实例汇 图形图像之图像处理(缩放 旋转 转化) android开发之【腾讯微博android客户端开发】Parameter类和SyncHttp 网友自己写的Android腾讯微薄客户端开发教程 Android 所有...

    史上最强NDK入门项目实战毕业设计—(包含完整源码可运行).zip

    本项目旨在为初学者提供一个全面的NDK入门实践,通过实际操作帮助理解NDK在Android开发中的应用。 1. **NDK基础知识**: - NDK是什么:NDK是一组工具,让开发者可以在Android应用中嵌入本地代码,提高执行效率和...

    史上最强NDK入门项目实战.rar

    2. **环境搭建**:指导如何安装和配置Visual Studio,包括安装Android SDK、NDK以及相关的插件和工具链,确保能够编译和运行原生代码。 3. **C/C++编程基础**:如果针对的是完全的新手,可能会有C/C++的基础教程,...

    Android驱动开发与移植实战详解

    3. **Android驱动开发环境搭建** - Android源码获取与编译:熟悉repo工具,设置编译环境,构建Android内核及系统镜像。 - 开发工具:使用NDK进行C/C++编程,使用GDB进行调试,以及使用Android Studio配合NDK插件。...

    Android入门详细介绍

    本文将从Android的基础概念、开发环境搭建、应用程序结构、UI设计、数据存储、网络通信等方面,深入浅出地介绍Android入门所需的知识。 一、Android基础 Android是由Google公司主导开发的一款开源操作系统,主要...

    android源码开发实战9.07.zip

    2. **编译环境搭建**:为了编译Android源码,你需要在Linux环境下设置一套完整的开发环境,包括Java JDK、GCC、NDK等。此外,还要配置好环境变量,确保所有依赖库和工具链能正常工作。 3. **内核定制**:Android...

Global site tag (gtag.js) - Google Analytics