2019独角兽企业重金招聘Python工程师标准>>>

网上用Android Studio调试NDK的资料不多且分散。我将这几天踩过的坑及经验纪录一下,方便其它朋友。我将从导入一个NDK Samples中的项目开始。

演示代码放在GitHub上,每个坑为一次Submit。

开发环境

  • 操作系统: Mac OS 10.11.1
  • IDE: Android Studio 1.5.1
  • NDK: android-ndk-r10e

Native链接其它库

加载NDK Samples中的hello-gl2项目后,直接运行会出现如下错误:

Error:(39) undefined reference to `glGetError'
Error:(41) undefined reference to `__android_log_print'
...

build.gradle文件中添加命令来链接相关库,具体可见Mac下用Android Studio运行NDK samples。

无法进入Native代码

解决库链接问题后,程序能运行正确运行在设备上,可无法中断在Native代码上的断点处。

  • 看到一些文章,如《AndroidNDK开发在本地C/C++源代码中设置断点单步调试详细教程》说的是ADT上的调试;《Using Eclipse for Android C/C++ Debugging》(需翻墙)说的时间Linux系统上调试。这里我做了如下设置:

    • AndroidManifest.xml 中添加android:debuggable="true"
    • build.gradle中添加sourceSets.main {..}和task ndkBuild(type: Exec){..}
  • 以上还是没有解决问题,情况类似于stackoverflow上的这个问题。根据回答,我又查看了官网的Android NDK Preview

  • 按照官网的调试方法配置Android Native时,提示错误:Error: Build type isn't JNI debuggable。参考此处可通过修改build.gradle如下来解决:

buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'ndk {debuggable = true}}debug {debuggable = truejniDebuggable = true}}
  • 移除项目下的jniLibs文件夹

目测这个不移除,默认就会调用里面的代码,而不走新编译的Native库。

方法总结

  1. 修改build.gradle中的buildTypes,使app-native*可调试
  2. 移除项目中的jniLibs文件夹

采用实验版插件调试

更简单的方法是,按照Experimental Plugin User Guide介绍,在Android Studio中可以采用实验版插件进行调试。最快捷的方式是直接从Google的GitHub上check最新的代码即可。

Native引用STL库

gl_code.cpp中添加如下代码:

#include <string>
using  namespace std;

运行程序,报出错误string: No such file or directory。解决的方法是:修改build.gradle中的**defaultConfig{..}**如下:

P.S. build.gradle配置修改可参考

注意: 如果按照以上方法配置,将忽略项目中已存在的Android.mk文件而自动生成一个位于build文件夹下的Android.mk。Android Studio默认编译jni文件夹下东西,且项目中的Application.mk文件配置将失效。上图链接STL库设置编译选项Application.mk中相应的配置选如下:

APP_STL := gnustl_static
APP_CPPFLAGS := -std=c++11

示例代码

ndk-debugging

转载于:https://my.oschina.net/chicboi/blog/625414

用Android Sutdio调试NDK相关推荐

  1. 使用Android Studio 进行NDK开发和调试

    2019独角兽企业重金招聘Python工程师标准>>> 尽管Android Studio已经越来越流行了,但很多人还是习惯于Eclipse或源码环境下开发JNI应用.个人认为使用An ...

  2. lldb硬件断点android,Andorid Studio NDK开发-LLDB调试

    LLDB是一个高效的c/c++的调试器,是与LLVM编译器一起使用,提供了丰富的流程控制和数据检测,有效的帮忙我们调试程序.LLDB也已经取代GDB成为XCode的默认调试器,Android Stud ...

  3. Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/52088039 最近在移植一个 JNI 项目, 比较纠结, A ...

  4. Mac下Android studio 之NDK配置教程(二)

    Mac下Android studio 之NDK配置教程(二) (一)简述 从上一篇NDK配置教程(一) 中,我 简单的阐述了MAC下NDK的基本解压和环境配置步骤. 本节我讲详细描述android s ...

  5. Android远程调试的探索与实现

    作为移动开发者,最头疼的莫过于遇到产品上线以后出现了Bug,但是本地开发环境又无法复现的情况.常见的调查线上棘手问题方式大概如下: 方法 优点 缺点 联系用户安装已添加测试日志的APK 方便定位问题 ...

  6. android 设置功能,NDK 使用入门  |  Android NDK  |  Android Developers

    原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 Activity 和访问实体设备组件,例如传感器和触摸 ...

  7. android jni 机器码,NDK构建

    Android.mk Android.mk把你的源码组织成"模块"(静态库/动态库).默认情况会读取project/jni/Android.mk,并会读取project/jni/A ...

  8. 使用Android模拟器调试linux内核

    使用Android模拟器调试linux内核 为什么需要调试linux内核 如何在Android上调试内核 开发环境 创建模拟器 下载goldfish内核源码 编译goldfish内核 编译内核遇到的问 ...

  9. 小米开源框架mace android案例调试

    小米开源框架mace android案例调试 1. 准备工作 编译环境准备:请参照小米官方的文档: https://mace.readthedocs.io/en/latest/installation ...

最新文章

  1. 【VS实践】如何在vs中自动添加注释
  2. 专访 | 英特尔收购Nervana后的第一张王牌Lake Crest,号称比GPU速度快10倍,年底测试
  3. PaddleOCR,一款文本识别效果不输于商用的Python库!
  4. 数博前沿 | 企业数据应用:聚焦场景,打通“最后一公里”
  5. 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例
  6. [原创] 腾讯RTX二次开发相关的一些注意事项
  7. D:\我的文档\收藏夹
  8. android之常用知识点(一)
  9. java中的多线程的示例
  10. C++ 重载强制类型转换运算符
  11. Java 8 Optional 类 学习
  12. 相等变为1 编号_JavaScript 中的 4 个相等比较算法的介绍
  13. 蓝桥杯 ADV-162 算法提高 题目1 最大最小值
  14. SignalR---DOTNET客户端
  15. 微信小程序 - 文本框显示限制最大长度
  16. 游戏关卡设计理论普及
  17. Python面向对象基础(下)—Python Day9
  18. δ星 丨 读书笔记 notes-凭什么《只放一只羊》:干掉沃尔玛10个亿并将其逼出德国的“平民超市”品牌阿尔迪...
  19. Linux 基础知识总结
  20. 化工厂人员定位保障安全管理

热门文章

  1. nginx+tomcat7+memcached
  2. rfcv函数实现_OpenSSL AES_ctr128_encrypt()作为伪随机函数在RFC3711(SRTP)
  3. java程序员_Java和Python的区别 好程序员帮大家解读
  4. 微信php翻译和天气预报整合,微信公众平台天气预报功能开发
  5. 盐城工学院计算机基础试卷,大学计算机基础及实用软件/大学计算机基础
  6. angular div 滚动条事件_DOM事件
  7. zabbix的入门到精通之zabbix的触发器Trigger
  8. 互联网晚报 | 12月27日 星期一 | 蚂蚁消费金融增资220亿;小米MIUI13正式官宣;《蜘蛛侠3》登顶全球年度票房冠军...
  9. 你觉得你有那些特质让你比别人更适合做产品经理?
  10. LeetCode MySQL刷题——day3