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

安装上述组件:

  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文件,如何进行调试呢?

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

您可能感兴趣的文章:

  • SQLiteStudio优雅调试Android手机数据库Sqlite(推荐)
  • 详解Android Studio正式签名进行调试的实现步骤
  • 简单实用的Android studio 调试技巧
(0)

相关推荐

  • 简单实用的Android studio 调试技巧

    说到android studio的调试,很多人可能会说,这有什么可讲的不就是一个断点调试么,刚开始我也是这么认为的,直到我了解之后,才发现,调试原来可以玩的这么牛.下面我分别一一做介绍. 条件断点(Conditional Breakpoints) 这个调试模式是我最喜欢的,简直不能再方便了,以前遇到在循环里面打断点,需要看某个条件下的值,我只能一遍遍点击,直到满足条件. 那么这个条件断点改怎么用呢,在你的断点上点击右键,就会弹出一个选择对话框,在里面的condition框里面填写上你所需要中断的

  • 详解Android Studio正式签名进行调试的实现步骤

    详解Android Studio正式签名进行调试的实现步骤 在Android Studio中,可以使用Gradle进行打包时自动签名.其实Android Studio默认会给调试应用加上Debug签名,但有时候调一些第三方SDK时,需要正式签名才能调起来,所以接下来分享一下使用Gradle自动签名的方法. 一.创建签名文件 打开AS,选择Build->Generate Signed APK,选择要打包的项目,点击Next,再点击Create new...创建签名文件 填写签名文件响应信息,如下所

  • SQLiteStudio优雅调试Android手机数据库Sqlite(推荐)

    前言 调试Android中的数据库有多种方式,目前比较流行的是:借助电脑端浏览器来调试,可以使用如下两个玩意: 1.Stetho 2.Android-Debug-Database 博主在调试sqlite的时候,发现了个更加简单和强大的工具来调试sqlite数据库. 这个工具叫 SQLiteStudio SQLiteStudio 它是个电脑端的软件,一个可视化sqlite的工具,利用SQLiteStudio,我们可以从各种角度,各种姿势去管理sqlite数据库. 对于Android开发者来说,它可

  • 浅谈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) : 让你能在 Andr

  • 浅谈Android Studio JNI生成so库

    1.新建Android studio工程 2.新建class:AppKey.java.主要为了保存密钥 代码块 package com...adminapp.lib.utils.jni; /** * Created by seven on 16/9/8. */ public class AppKey { static { System.loadLibrary("AppKey"); } public static native String WechatId(); public stat

  • 浅谈Android Studio 的四种打包方式

    虽然这个博客的内容很简单,但是作为新手的我还是百度了好久才掌握了Android Studio的打包方式,希望对后来人有所帮助.打包的第一种方式 (1)在Android Studio 中选中app这么module,选择菜单栏""Build--Generate signed APK"" (2)弹出窗口 (3)创建密钥库及密钥,创建后会自动选择刚创建的密钥库和密钥(已拥有密钥库跳过) 点击"Create new..."按钮创建密钥库 Key store

  • 浅谈Android Studio 3.0 工具新特性的使用 Android Profiler 、Device File Explorer

    前言: 其实 studio3.0的工具大家也已经使用过一段时间了,自己呢,就是从bate版开始使用的,我觉得比较好用的几个地方.就几个,可能还没用到其他的精髓. 但我觉的这个两个功能对我是比较实用的.好那么下面就给大家介绍一下吧. 正文: 话不多说咱们直接上图吧.(个人比较喜欢看图说话) 第一个(Android Profiler)我要介绍的就是这个了.(先看一下效果"震撼一下") (图-1) (图-2) (图-3) (厉害不厉害,牛逼不牛逼)那么我们怎么来操作这个工具呢,来咱们接着看图

  • 浅谈Android studio 生成apk文件时的 key store path 的问题

    使用Android studio生成apk文件时,Key store path 是密钥库文件地址的意思,新手菜鸟会想,我怎么知道他在哪里,其实他的地址是你来决定的. 如下图,你选择一个文件夹后,填写file name,然后点击ok就生成了. 大佬们见怪了~ 补充知识:AndroidStudio每次打开项目不自动打开上一次打开的文件.每次打包都需要重新输入key store path 最近在运行AS时,发现每次打开都要重新的打开目录及打开相关的文件,打包必须重新添加签名文件,我也是醉了. 问题原因

  • 浅谈Android Studio导出javadoc文档操作及问题的解决

    1.在Android studio中进行打开一个项目的文件之后,然后进行点击Android stuio中菜单中的"tools"的选项.在弹出了下拉菜单中,进行选中下拉菜单中的"Generate JavaDoc"的选项. 2.在弹出界面中 Output directory是你即将生产的javadoc文件的存储位置,图中1指示的位置:正常点击ok即可: 但是如果有异常情况 比如空指针异常或者文档乱码 java.lang.NullPointerException 或者 j

  • 浅谈Android Studio 4.1 更新内容

    概览 Android Studio 4.1 目前已经发布,该版本共修复了2370 个 bug 以及 275 个 issue,主要包含如下新增功能: 设计 Material Design 组件库的更新 开发 Database Inspector 功能 直接在 Android Studio 中运行模拟器 Dagger 导航支持 使用 TensorFlow Lite 模型 构建与测试 Android 模拟器支持折叠屏 Apply Changes 更新 从 AAR 中导出 C/C++ 中的依赖 Nati

  • 浅谈Android Studio 3.0 的一些小变化

    前言 一大早还在北京拥挤的地铁里,我的CTO闫哥在微信里给我发了一条信息:Android Studio 3.0发布了. 为什么会这么关注Android Studio 3.0 的版本发布呢?主要是因为公司即将开发的新app准备使用Kotlin语言,而Android Studio 3.0 已经把Kotlin的语言支持内置进去了,这样就省去了很多的麻烦,如果你还没接触过Kotlin语言,可以去百度一下 他们的官网,如果你现在使用的Java语言,那么你真是太幸运了,因为Kotlin对于你来说,将会非常简

  • 浅谈Android Studio 解析XML的三种方法

    一丶概述 文件解析要求,json解析和xml解析,前面文章说过Json转实体类,这里就说说解析XML 内容: Android Studio 解析XML常见的三种方式:DOM PULL SAX (实现XML转实体类并打印输出) 效果演示: 二丶正文 SAX(Simple API for XML) 使用流式处理的方式,它并不记录所读内容的相关信息.它是一种以事件为驱动的XML API,解析速度快,占用内存少.使用回调函数来实现. 缺点是不能倒退. DOM(Document Object Model)

  • 浅谈android性能优化之启动过程(冷启动和热启动)

    本文介绍了浅谈android性能优化之启动过程(冷启动和热启动) ,分享给大家,具体如下: 一.应用的启动方式 通常来说,启动方式分为两种:冷启动和热启动. 1.冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动. 2.热启动:当启动应用时,后台已有该应用的进程(例:按back键.home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热

随机推荐