如何使用Android Studio调试原生反应本机库?

时间:2016-11-30 09:49:47

标签: java android android-studio react-native react-native-android

这个问题关于如何调试React-Native应用的javascript-land 。它是关于如何在node_modules文件夹中调试本机库(在这种情况下意味着:JAVA-Code)。

虽然我很容易使用XCode调试RN-Applications的原生iOS部分,但我偶然发现了Android Studio的各种问题...... 主要的是,在将项目导入Studio后,node_modules-Folder不存在,为什么不能设置断点来进行调试。

版本:

  • Android Studio 2.2.2(目前最新版本)
  • react-native 0.38.0(最新版本)
  • gradle 1.3.1(从react-native init预先配置)
  • 也尝试升级到gradle 2.2.2
  • 安装了最高版本23的Android SDK和-Build工具,包括NDK

我是怎么做的/重现的步骤

1。创建新的反应原生项目:

react-native init debugTest

2。使用您要本机调试的本机代码安装第三方库

cd debugTest && 
react-native install react-native-sqlite-storage

第3。确保一切都能在android端运行:

  • 启动GenyMotion
  • 推出AVD
  • 在终端中使用此命令运行应用程序:

      

    react-native run-android

(这将打开打包器以及传输js-bundle所需的所有其他内容)。 如果想省略此步骤,则需要手动启动打包程序:

node node_modules/react-native/local-cli/cli.js start

4。启动Android Studio

  • 使用即将出现的启动对话框,选择"导入项目"
  • 选择目录" android"你的项目并点击" import" (这些步骤取自official RN-documentation):
  

如果您想使用Android Studio处理本机代码,请使用   Android Studio的欢迎屏幕选择"导入项目"并选择   你的应用程序的android文件夹。

5。 Android Studio要求将gradle版本从预先配置的1.3.2更新为2.2.2。我首先在整个工作流程中拒绝了它,后来我试了一下(两者对我没有太大差别)

6。由于this issue

,必须停用即时运行

7。点击"运行"或者"在Android Studio的工具栏中调试"

到目前为止一切正常。我能够在MainApplication.java::onCreate中设置一个断点,然后可以进入这个方法。

但问题如下:

  1. Android Studio中的 node_modules-Folder不存在,无法通过这种方式进行调试。如何实现?
  2. enter image description here

    1. 调试onCreate-Method并进一步向下进入Java-Stack,非常发生"源代码与字节代码" 不匹配。
    2. enter image description here

      调试器挂在源代码注释中的其他位置,但没有挂在那条被选中执行的行上。

      Android SDK:

      我已经安装了所有SDK,构建工具和NDK以及版本23之后的所有其他内容:

      enter image description here enter image description here

      TL; DR:

      如何调试node_modules中存在的本机库 - 使用Android Studio的react本机应用程序的文件夹,因为它们在AS中不可见,因此无法传递断点?

      更新

      最后,我找到了根本原因。对我而言,由于我想调试的库在Android Studio中没有显示,因此它无法正常工作。但这本身就是一个错误,因为图书馆没有正确设置,为什么gradle没有注意到它。

      所以,这个问题可以像博客文章一样正确地使用(如果第三方图书馆开箱即用,并且#34; rnpm-link"或者#34;本地链接反应")[在我的例子中并非如此]

2 个答案:

答案 0 :(得分:2)

您完成了rnpm link还是react-native link?一旦你这样做,将会有额外的模块和app模块,就像这样。 enter image description here

您可以查看本机模块中的所有Java代码,并输入breakdpoints,debug等。

答案 1 :(得分:0)

巴姆....我现在可以自己回答我的第一个问题。感谢@agent_hunt,他让我走向正确的方向......

在此示例应用程序中,绑定未正确设置。 " rnpm link"和更新的" react-native链接",它是" react-native install"的一部分,在这里没有为android-part正确工作,因为它没有实现现在在第三方库中,我已经用过这个例子。

这就是为什么gradle没有注意到图书馆的原因。正确设置后,文件夹react-native-sqlite-storage出现在Android Studio中,我能够传递一个断点并停止执行。

然而,调试这个库工作正常,但是当我不想进入更低/更深层次的" Android SDK的方法,它仍有问题指向正确的代码行("源代码与字节代码不匹配")