【发布时间】:2014-05-27 11:10:31
【问题描述】:
我已经为此苦苦挣扎了 3 天,但我无法完成。
我有一个 android 项目,它在 eclipse 上链接到一个包含本机代码的 android 库。
我看到了this question,它和我的架构相同,但是那里提出的步骤不起作用。
我这里重写了步骤,分别是:
- 转到“运行”菜单->“调试配置”
- 在左侧窗格的“Android 原生应用程序”下,选择您的应用程序
- 在“调试器”选项卡下,单击“共享库”部分中的“添加...”。
- 浏览到您的 android 库项目目录并添加其子目录 obj/local/armeabi。
- 应用和调试。
第一个问题是,如果应用程序未设置为原生应用程序(仅链接到原生应用程序),我无法为原生应用程序设置调试配置,因此我无法选择任何要调试的项目。
我尝试使用虚拟 jni/Android.mk 将 android 应用程序项目设置为具有 c/c++ 特性,因为在构建时没有显示任何错误。 (不过,我怀疑这是正确的方法)
然后应用程序运行并正确链接,我可以按照这些步骤--1 到 5 进行操作。但是当我调试它时,控制台会显示(BasicCharacterWithLib 是应用程序的名称):
[2014-05-27 12:18:09 - BasicCharacterWithLib] Error while obtaining file from device
[2014-05-27 12:18:09 - BasicCharacterWithLib] com.android.ddmlib.SyncException: Writing local file failed!
而且它永远不会在任何断点处停止(原生或非原生)
我也知道this other question,在不同的配置(直接执行应用程序)上具有相同的症状,但仍未得到答复。
我已经成功调试了同一设备中的另一个应用程序,一个测试应用程序,其中包含本机代码,所以我猜这个问题不可能是由于设备配置造成的。
你知道怎么解决吗?
更多细节:
- 我使用来自 adt bundle 的 eclipse(版本 v22.6.2,可用的 sdk 最高 api 级别为 19,ndk 版本为 r9)
- 应用程序在多个线程上运行(通过 AsyncTask 从 java 执行),但此时仅启动主线程。
- 如果我将其作为 android 应用程序进行调试,即使在多线程中,调试过程也只能在 java 端工作。
- 我在 Application.mk 中将 APP_PLATFORM 设置为 android-14,与 manifest 中的 minSdkVersion="14" 相同。
- 我也试过重启 eclipse,重启设备,然后拔掉再插入 USB。
【问题讨论】:
-
我发现“共享库”下的“添加”按钮没有添加所需的斜杠。您可以深入研究 Eclipse 设置文件并编辑该值,但确保您设置了一个调用
set solib-search-path的 gdb 命令文件会更容易一些。我的经验是,不设置搜索路径不应该导致您看到的错误输出。
标签: android debugging android-ndk android-library