浅谈Android Studio如何Debug对应so文件C/C++代码

所属分类: 软件编程 / Android 阅读数: 62
收藏 0 赞 0 分享

在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 及以上的版本。

安装上述组件:

  1. 如SDK Tools 不显示LLDB,CMake 和NDK,说明你配置了国内镜像站点!
  2. 要能上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++库

  1. Toolchain Default: 默认 CMake 设置
  2. C++ 11:支持C++11特性!
  3. Exceptions Support(-fexceptions):

如果你想使用有关 C++ 异常处理的支持,就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -fexcetions 标志。

Runtime Type Information Support(-frtti): 如果你想支持 RTTI,那么就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -frtti 标志。

说明:

  1. native-lib.cpp: 自动生成的C++源文件
  2. CMakeLists.txt: CMake 脚本根据构建脚本的指令去编译一个 C++ 源文件,也就是 native-lib.cpp ,并将编译后的产物扔进共享对象库中,并将其命名为 libnative-lib.so ,然后 Gradle 将其打包到 APK 中。
  3. External Build Files 存放 CMake 或 ndk-build 构建脚本的地方。有点类似于 build.gradle 文件告诉 Gradle 如何编译你的 APP 一样,CMake 和 ndk-build 也需要一个脚本来告知如何编译你的 native library。

1、只需配置android标签节点下的buildTypes

buildTypes{  
  debug{
    jniDebuggable true
    jniDebuggable = 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是两种进行运行app-native的方式,选择app-native后,debug->app-native; 接下来就可以在C/C++文件中进行单步调试了。

这里暂留一个问题,如果是已经编译好的带符号表的动态库.so文件,如何进行调试呢?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多