android - windows下调试Android NDK

标签 android android-ndk

我正在将一个复杂的 C 应用程序移植到 Android,作为一个 SO 库,包裹着薄薄的 java 层。 经过几个小时的麻烦,我在 Android 下编译了代码,但是当然,应用程序崩溃了:(

环顾四周后,我了解到在 Android 下调试 C 应用程序的唯一方法是通过 gdb。由于我对 gdb 的经验不多,所以有人可以分享一些见解吗?

谁有 Windows 下 gdb 的教程:)?

谢谢

最佳答案

对于较新版本的 NDK(我使用的是 r7c),您可以通过以下方式构建调试版本

  1. 添加android:debuggable="true"标记为 <Application>AndroidManifest.xml 中标记
  2. 调用ndk-buildNDK_DEBUG=1 (如果使用 unix shell 运行 ndk-build,则不需要 NDK_DEBUG 标志)

在 Windows 上,事情变得有点棘手,因为要使用 ndk-gdb ,从 NDK r7c 开始,您仍然需要 bash(或 cygwin),但是 ndk-build如果您使用任何预构建的静态库,在 cygwin bash 中运行将遇到权限问题

我在windows机器上的解决方案是

  1. 添加android:debuggable="true"标记为 <applicationAndroidManifest.xml 中标记(同上)
  2. 在 cmd(Windows 命令提示符)中:调用 ndk-buildNDK_DEBUG=1
  3. 在 cygwin bash 中:运行 ndk-gdb

为了快速初探原生so库,创建一个简单的activity一键触发库入口函数和loadLibrary在这样的 Activity 中:

class MyActivity extends Activity {
    static {
       System.loadLibrary("mylibrary");
    }

    /* other functions like onCreate, etc... */

    public native void libfunc();

    public void onClick(View v){
       libfunc();
    }
}

所以当gdb启动时,有问题的库实际上已加载,但您仍然有时间在程序崩溃之前设置断点等;当您完成调试器的设置后,在 (gdb)提示符,输入 continue (或只是“c”),然后点击按钮启动崩溃程序并愉快地调试...

关于android - windows下调试Android NDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3238408/

相关文章:

java - 尝试在 android 中实现滑动 View 时出错

android - onAdClosed() 没有在应用程序中被调用

Android TextView 在 Android 2.3 中不会显示正确的行数

android.mk 包含执行命令

android - 指南 : How to compile a c program for Android

android - 两个 native 库具有不同的 cpu 架构集

java - 用 Java 填充 map 的最有效方法

Android - 没有名为 android 的项目

安卓系统。无法获取对 JVM 的引用

android-studio - 使用 Android Studio 进行 Oculus 开发的最佳示例应用程序?