gpt4 book ai didi

android - windows下调试Android NDK

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:53:06 24 4
gpt4 key购买 nike

我正在将一个复杂的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com