如何调试安卓系统中的NFC实现?

6
这个问题可以分解成多个较小的问题。最终目标是能够使用像gdb这样的调试器在Galaxy Nexus(Android 4.1)设备的C/C++ NFC实现中设置断点以检查其内部状态。
1. 是否有可能用包含调试符号的库替换Galaxy Nexus设备上的库? 2. 是否有可能使用gdb调试Android设备的C/C++实现? 3. 是否有可能交叉编译Android的NFC实现? 4. 是否有任何人尝试过类似的事情,也许是使用另一个库?
更新:Rooting the devicecompiling Jellybean总体上都很顺利,只有一些小错误。实际上,在libnfc makefile中有一些非常好的标志,可以在通信时启用广泛的输出。
然而,仍存在一个调试问题。要调试libnfc(external/libnfc-nxp),我必须使用库连接到进程,最可能是Nfc Manager(packages/apps/Nfc)。要调试应用程序,我必须设置debuggable flag。如果我重新构建Nfc Manager,则签名与设备上已安装的签名不匹配,这意味着adb install -r <file>无法工作。adb uninstall com.android.nfc也无法工作。硬删除/system/app中的apk会创建错误INSTALL_FAILED_SHARED_USER_INCOMPATIBLE,当我尝试安装新的apk时。此时,Nfc完全不起作用了,我不得不重新刷写原始映像。

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


如果您已经构建了完整的Jelly Bean映像,为什么不使用adb reboot bootloader; fastboot flashall将其刷入设备呢?这样您就可以完全控制设备了。 - NFC guy
是的,那将是一个选择。虽然如果有一种不太侵入性的方法,可以让大部分设备保持原样交付给最终用户,我更喜欢那种方法。毕竟,我只想密切监视而不是修改。 - mibollma
这在“理论上”是正确的。让我怀疑的第一件事是xda帖子中的句子:“这不会使ROM完全功能”。此外,经验告诉我,在像那样的大型项目中可能会有相当大的差异,从专有的谷歌应用程序不是AOP的一部分开始,到我不知道什么结束。因此,我仍在寻找不涉及100%替换的解决方案,因为对1%的兴趣。 - mibollma
坦白地说,我不明白你的问题。构建AOSP映像通常会导致完全功能的ROM。我曾在负责Android中NFC集成和NFC API实现的团队工作,我们就是这样做的。如果你真的需要Google应用程序,可以从CyanogenMod下载包含它们的zip文件。 - NFC guy
显示剩余2条评论
1个回答

10
总体而言,答案是肯定的。完整的Android NFC实现是Android开源项目的一部分。对于您问题的具体部分的回答:
  1. 是的,您需要解锁引导程序并对设备进行root以能够以读/写模式挂载系统分区,以便替换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. 是的,请参见例如 如何在Android上使用GDBSERVER调试应用程序?https://www.google.com/search?q=remote+gdb+android。(这个问题也可能与此相关:使用Android模拟器进行远程调试

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接