153

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

 6 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzI2OTQxMTM4OQ%3D%3D&mid=2247485454&idx=1&sn=584c28f5123a4c62d32d3c19d08d1d0b&chksm=eae1fd5cdd96744aea8bce2622739ccc9842dcaccb082b8d8f0e137a04cac16077226ae8e96c%23rd
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

Original 逆流的鱼yuiop 码农突围 2017-12-06 00:01 Posted on

在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



  1. buildTypes{    

  2.   debug{

  3.        jniDebuggable true

  4.        jniDebuggable = true

  5.    }

  6. }

2、配置AndroidManifest属性:android:debuggable="true"



  1. <application android:label="@string/app_name"            

  2.             android:debuggable="true">

  3.   <activity android:name=".HelloJni"              

  4.             android:label="@string/app_name">

  5.    <intent-filter>

  6.    <action android:name="android.intent.action.MAIN" />            

  7.    <category android:name="android.intent.category.LAUNCHER" />

  8.    </intent-filter>

  9.    </activity>

  10. </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文件,如何进行调试呢?有兴趣读者可以留言交流下。

Image

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK