Android Studio如何Debug对应so文件C/C++代码
在C/C++跨平台开发中,我们知道在Windows上可以通过VS,进行单步断点调试,这非常方便。但是我们如果编译好的动态库so,想要跟踪下其流程及各个阶段,如,怎么跟踪FFmpeg/VLC等库内部demux流程,或是Codec流程呢?今天通过一个小Demo进行Debug库文件C/C++代码。
一,下载 NDK 和构建工具 要编译和调试本地代码(native code),你需要下面的组件:
1、The Android Native Development Kit (NDK) : 让你能在 Android 上面使用 C 和 C++ 代码的工具集。
2、CMake 外部构建工具。如果你准备只使用 ndk-build 的话,可以不使用它。
3、LLDB : Android Studio 上面调试本地代码的工匠。
注意:要在 Android Studio 中 使用 CMake 或者 ndk-build,你需要使用 Android Studio 2.2 或更高的版本,同时需要 配合使用 Android Plugin for Gradle 2.2.0 及以上的版本。
安装上述组件:
如SDK Tools 不显示LLDB,CMake 和NDK,说明你配置了国内镜像站点!
要能上google官网才会显示,之前也是通过国内镜像,一直没显示出来!
Tools > Android > SDK Manager >点击 SDK Tools 选项卡。 勾选 LLDB,CMake 和 NDK 。
已单独下载了 android-ndk-r11b所这里不再下载NDK!(最好勾选下载最新NDK) 点击 Apply ,然后点击 OK 。
二,新建项目:
1、勾上 include C++ support
2、在最后一步时可选择不同的C++库
说明: 虽说是支持C/C++,但是不完全支持C/C++的全部特性,必须得按照 jni的约定来:具体可以参照 jni手册 C++ Standard: 选择C++库
Toolchain Default: 默认 CMake 设置
C++ 11:支持C++11特性!
Exceptions Support(-fexceptions):
如果你想使用有关 C++ 异常处理的支持,就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -fexcetions 标志。
Runtime Type Information Support(-frtti): 如果你想支持 RTTI,那么就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -frtti 标志。
说明:
native-lib.cpp: 自动生成的C++源文件
CMakeLists.txt: CMake 脚本根据构建脚本的指令去编译一个 C++ 源文件,也就是 native-lib.cpp ,并将编译后的产物扔进共享对象库中,并将其命名为 libnative-lib.so ,然后 Gradle 将其打包到 APK 中。
External Build Files 存放 CMake 或 ndk-build 构建脚本的地方。有点类似于 build.gradle 文件告诉 Gradle 如何编译你的 APP 一样,CMake 和 ndk-build 也需要一个脚本来告知如何编译你的 native library。
1、只需配置android标签节点下的buildTypes
buildTypes{ debug{jniDebuggable truejniDebuggable = true}
}
2、配置AndroidManifest属性:android:debuggable="true"
<application android:label="@string/app_name" android:debuggable="true"><activity android:name=".HelloJni" android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
</application>
3、配置Run/Debug configurations
a、选择run下拉item,选Edit Configurations,弹出配置窗体
b、点击➕新建 configuraionts,选android native条目
c、配置下native执行的名称如:hellojniNative.
d、选择真机或模拟器调试.
断点调试运行
图1
图2
图1,图2是两种进行运行app-native的方式,选择app-native后,debug->app-native; 接下来就可以在C/C++文件中进行单步调试了。
这里暂留一个问题,如果是已经编译好的带符号表的动态库.so文件,如何进行调试呢?有兴趣读者可以留言交流下。
Android Studio如何Debug对应so文件C/C++代码相关推荐
- Android studio 使用心得(六)---android studio 如何加载.so文件
2019独角兽企业重金招聘Python工程师标准>>> 之前一直没怎么注意,以为.so文件android为像eclipse一样直接加载,但是直到昨天我在android studio上 ...
- android studio 的debug证书在哪里,Android Studio debug.keystore位置介绍
如果你在网上搜debug.keystore的位置,大部分文章都会告诉你在 C:\Users\XXX\.android 目录下,但我电脑的该目录下确实没有这个文件,放入同事的debug.keystore ...
- Android Studio中打开R.java文件的方法
1 R.java文件简介 Android Studio中的R.java文件自动收录当前应用中所有的资源,并根据这些资源建立响应的ID,可以把R.java当成Android应用的资源字典.R.java文 ...
- android studio中把c/c++文件编译成.so库(一)
2019独角兽企业重金招聘Python工程师标准>>> 最近的项目涉及到JNI编程,经过一段时间的JNI编程之后,终于完美弄完了.所以,把在android studio中编译c/c+ ...
- android studio DDMS debug process 无法激活,小虫子灰色
android studio DDMS debug process 无法激活,小虫子灰色. 如下图,请问什么问题
- Android Studio 设置打开layout.xml文件的默认视图
Android Studio 设置打开layout.xml文件的默认视图 Android Studio 设置打开layout.xml文件的默认视图 androd studio 在使用的时候打开我们自己 ...
- Android Studio DeviceFileExplorer 看不到文件列表问题
Android Studio DeviceFileExplorer 看不到文件列表问题 问题:部分机器,有root权限,但在Android Studio 的 DeviceFileExplorer 内看 ...
- List.size() 问题 Android studio: Verbose,Debug,Info,Warn,Error
目录 List.size() 问题 Android studio: Verbose,Debug,Info,Warn,Error List.size() 问题 list下标从0开始 假设list.siz ...
- android创建布局文件,android学习——Android Studio下创建menu布局文件
一.问题: android studio项目中没有看到menu文件夹: 在android studio项目中想要添加menu布局文件,一开始我的做法是:直接在res文件夹右键选择xml文件来添加,如下 ...
- Android Studio 1.5+ 中调试Native和Java代码
Android Studio 1.5+ 中调试Native和Java代码 步骤如下 1.安装了1.5版+的Android Studio 2.安装LLDB:(LLDB是Low Level DeBugge ...
最新文章
- 利用CNN来检测伪造图像
- 一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc
- 启用CentOS6.5 64位安装时自带的MySQL数据库服务器
- linux 下开源常见监控软件
- SQL-SQLServer(926)
- 关于Android的一些设计【转】
- iOS GPUImage之滤镜功能说明
- java线程内存模型_深度解析Java多线程的内存模型
- uva 11134——Fabled Rooks
- 天津海运[600751]股票
- update两个表中的同一字段的数据_用Python实现多个工作簿中的数据按列合并到同一个工作表中...
- php过滤文件中的空行,如何从PHP文本中删除空行?
- jquery 自定义正方形图标_当你在玩 iOS14自定义图标时,有人用它赚了70万了!
- JavaScript的Date类的函数特殊处理导致的问题
- Atitit 在线机器人 自动化技术一览 目录 1. 俩个要点	1 1.1. 识别控件(对话框 按钮 列表等)	1 1.2. Dom控件操作	1 1.3. 鼠标键盘操作 api	1 2. 可以使用
- 天涯社区离线阅读器(实现只看楼主功能)
- vue中使用微信聊天表情
- Cookie和Session的作用,区别和各自的应用范围,cookie、Session工作原理
- 【Livepano】VR全景嵌入人物视频详细教程
- 几个适合车载的ITX/MATX服务器主板信息总结
热门文章
- Guava学习笔记(四):复写的Object常用方法
- FusionCharts Free做报表
- 何川L3管理课_模块3_追进展(执行)
- OpenCV_Corner Detect with FastFeatureDetector(基于FAST的角点检测) 及 SUSAN算子
- opencv图像分析与处理(5)- 取样和取样函数的傅立叶变换
- ios::ate和ios::app在C++文件中的区别
- Js/jQuery实时监听input输入框值变化
- linux 设置时间
- 做某一项目常见知识点链接
- 【Python】Python简介