用Android Sutdio调试NDK
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库。
方法总结
- 修改
build.gradle
中的buildTypes,使app-native*可调试 - 移除项目中的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相关推荐
- 使用Android Studio 进行NDK开发和调试
2019独角兽企业重金招聘Python工程师标准>>> 尽管Android Studio已经越来越流行了,但很多人还是习惯于Eclipse或源码环境下开发JNI应用.个人认为使用An ...
- lldb硬件断点android,Andorid Studio NDK开发-LLDB调试
LLDB是一个高效的c/c++的调试器,是与LLVM编译器一起使用,提供了丰富的流程控制和数据检测,有效的帮忙我们调试程序.LLDB也已经取代GDB成为XCode的默认调试器,Android Stud ...
- Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)
作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/52088039 最近在移植一个 JNI 项目, 比较纠结, A ...
- Mac下Android studio 之NDK配置教程(二)
Mac下Android studio 之NDK配置教程(二) (一)简述 从上一篇NDK配置教程(一) 中,我 简单的阐述了MAC下NDK的基本解压和环境配置步骤. 本节我讲详细描述android s ...
- Android远程调试的探索与实现
作为移动开发者,最头疼的莫过于遇到产品上线以后出现了Bug,但是本地开发环境又无法复现的情况.常见的调查线上棘手问题方式大概如下: 方法 优点 缺点 联系用户安装已添加测试日志的APK 方便定位问题 ...
- android 设置功能,NDK 使用入门 | Android NDK | Android Developers
原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 Activity 和访问实体设备组件,例如传感器和触摸 ...
- android jni 机器码,NDK构建
Android.mk Android.mk把你的源码组织成"模块"(静态库/动态库).默认情况会读取project/jni/Android.mk,并会读取project/jni/A ...
- 使用Android模拟器调试linux内核
使用Android模拟器调试linux内核 为什么需要调试linux内核 如何在Android上调试内核 开发环境 创建模拟器 下载goldfish内核源码 编译goldfish内核 编译内核遇到的问 ...
- 小米开源框架mace android案例调试
小米开源框架mace android案例调试 1. 准备工作 编译环境准备:请参照小米官方的文档: https://mace.readthedocs.io/en/latest/installation ...
最新文章
- 【VS实践】如何在vs中自动添加注释
- 专访 | 英特尔收购Nervana后的第一张王牌Lake Crest,号称比GPU速度快10倍,年底测试
- PaddleOCR,一款文本识别效果不输于商用的Python库!
- 数博前沿 | 企业数据应用:聚焦场景,打通“最后一公里”
- 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例
- [原创] 腾讯RTX二次开发相关的一些注意事项
- D:\我的文档\收藏夹
- android之常用知识点(一)
- java中的多线程的示例
- C++ 重载强制类型转换运算符
- Java 8 Optional 类 学习
- 相等变为1 编号_JavaScript 中的 4 个相等比较算法的介绍
- 蓝桥杯 ADV-162 算法提高 题目1 最大最小值
- SignalR---DOTNET客户端
- 微信小程序 - 文本框显示限制最大长度
- 游戏关卡设计理论普及
- Python面向对象基础(下)—Python Day9
- δ星 丨 读书笔记 notes-凭什么《只放一只羊》:干掉沃尔玛10个亿并将其逼出德国的“平民超市”品牌阿尔迪...
- Linux 基础知识总结
- 化工厂人员定位保障安全管理
热门文章
- nginx+tomcat7+memcached
- rfcv函数实现_OpenSSL AES_ctr128_encrypt()作为伪随机函数在RFC3711(SRTP)
- java程序员_Java和Python的区别 好程序员帮大家解读
- 微信php翻译和天气预报整合,微信公众平台天气预报功能开发
- 盐城工学院计算机基础试卷,大学计算机基础及实用软件/大学计算机基础
- angular div 滚动条事件_DOM事件
- zabbix的入门到精通之zabbix的触发器Trigger
- 互联网晚报 | 12月27日 星期一 | 蚂蚁消费金融增资220亿;小米MIUI13正式官宣;《蜘蛛侠3》登顶全球年度票房冠军...
- 你觉得你有那些特质让你比别人更适合做产品经理?
- LeetCode MySQL刷题——day3