6

这个问题可以分解成多个较小的问题。最终结果将是能够使用 gdb 等调试器在 Galaxy Nexus (Android 4.1) 设备的 C/C++ NFC 实现中设置断点,以检查其内部状态。

  1. 是否可以将 Galaxy Nexus 设备上的库替换为包含调试符号的库?
  2. 是否可以使用 gdb 来调试 Android 设备的 C/C++ 实现?
  3. 是否可以交叉编译 Android 的 NFC 实现?
  4. 有没有人在另一个图书馆尝试类似的东西的例子?

更新: 植根设备编译 Jellybean总体上进展顺利,但有一些小错误。事实上,在 libnfc makefile 中有一些非常好的标志,可以在通信时启用广泛的输出。

但是仍然存在调试问题。要调试 libnfc(外部/libnfc-nxp),我必须使用最有可能是 Nfc 管理器(包/应用程序/Nfc)的库将自己附加到进程。要调试应用程序,我必须设置可调试标志。如果我重建 Nfc 管理器,则签名与设备上已安装的签名不匹配,这意味着adb install -r <file>无法正常工作。adb uninstall com.android.nfc也不行。当我尝试安装新的apk时,使用简单地删除apk的硬方法/system/app会产生错误。INSTALL_FAILED_SHARED_USER_INCOMPATIBLE此时 Nfc 根本不起作用,我不得不重新刷新库存图像。

还有其他想法如何调试 libnfc 库吗?

4

1 回答 1

10

一般来说,答案是肯定的。完整的 Android NFC 实现是Android 开源项目的一部分。回答您问题的特定部分:

  1. 是的,您需要解锁引导加载程序并根您的设备才能以读/写模式挂载系统分区,这样您就可以更换 NFC 库。
  2. 是的,您应该能够使用 gdb 进行远程调试。不过,我实际上从未这样做过。
  3. 是的,只需下载 Android 源代码并编译 NFC 堆栈的相关部分。相关部分位于packages/apps/Nfc(NFC 管理器)、external/libnfc-nxp(C 库)、frameworks/base/core/java/android/nfc(Java NFC API)和vendor/nxp(NFC 芯片固件)中。
  4. 是的,请参阅如何使用 GDBSERVER 在 Android 上调试应用程序?https://www.google.com/search?q=remote+gdb+android。(这个问题也可能是相关的:Remote debugging with Android emulator
于 2012-08-26T19:58:11.297 回答