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

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

问题描述:

这个问题是不是关于如何调试React-Native应用程序的javascript-land。它是关于如何在node_modules文件夹中调试本机库(在本例中是指:JAVA代码)。如何使用Android Studio调试原生反应原生库?

尽管使用XCode对RN应用程序的本机iOS部分进行调试非常容易,但我偶然发现了Android Studio的各种问题...... 最主要的是,node_modules-Folder不存在后将项目导入到Studio中,为什么无法设置断点来进行调试。

版本:

  • 的Android 2.2.2工作室(最新版本目前)
  • 反应本土0.38.0(最新版本还)
  • gradle这个1.3.1(从反应本地预配置INIT)
  • 也升级试图摇篮2.2.2
  • 的Android SDK和-build工具多达23版本包括装NDK

我怎么做的/重现步骤

1.创建新的本地反应项目:

react-native init debugTest 

2.安装与要本地调试

本机代码的第三方库
cd debugTest && 
react-native install react-native-sqlite-storage 

3.确保所有东西都能在android端工作:

  • 发射GenyMotion
  • 发射的AVD
  • 运行在终端用这个命令应用:

    反应天然运行机器人

(这将打开包装者和其他一切事物帽子需要转移js束)。 如果想省略此步骤中,有必要手动启动打包器:

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

4。推出Android工作室

  • 与即将启动的对话框中,选择“导入项目”
  • 选择的目录项目的“机器人”,然后单击“导入” (从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. node_modules,文件夹是不是在Android的工作室目前,不能调试这种方式。如何实现这一目标?

enter image description here

  1. 调试的onCreate-方法,并进一步向下进入的Java的栈,非常见于Ger.Offen它发生的“源码不匹配的字节码“
  2. enter image description here

    调试器挂在源代码注释别的地方,但不正是线,被选为执行。

    的Android软件开发工具包:

    我已经安装了所有的SDK和构建工具和NDK和其他一切,因为23版:

    enter image description here enter image description here

    TL; DR:

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

    UPDATE

    最后我找到了根本原因。对我而言,这并不奏效,因为我想调试的库在Android Studio中未显示。但是这是我自己的一个错误,因为图书馆设置不正确,为什么Gradle不能注意到它。

    因此,这个问题可以像博客文章一样使用它(如果第三方库通过“rnpm-link”或“react-native link”开箱即可使用)这在我的例子中不是这种情况]

开始=“2”>

你做了rnpm linkreact-native link?一旦你这样做了,应用模块就会有更多的模块,就像这样。 enter image description here

你可以看一下本机模块中的所有Java代码,并把breakdpoints,调试等

+0

你是如何将RN项目导入到android studio的?像我一样吗? – itinance

+0

我通常只是从Android Studio打开android文件夹而不是导入。但我想它是用于相同的目的。您是否尝试过从android studio或gradle sync构建项目,通常会在build.gradle中发生更改时提示。不应该是'npm install react-native-sqlite-storage --save'而不是'react-native install react-native-sqlite-storage'? –

+0

后一个(react-native install ...)是“新的”命令,包括“npm install --save”(或纱线安装)和react-native链接,这是“rnpm链接”的现代形式。我也尝试手动渐变同步,文件夹仍然没有显示,但存在于文件系统 – itinance

巴姆....我现在可以亲自回答我的第一个的两个问题。 Thx to @agent_hunt,让我走向正确的方向......

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

这就是为什么gradle没有注意到图书馆。正确设置后,文件夹react-native-sqlite-storage出现在Android Studio中,我能够传递一个断点并停止执行。尽管如此,调试这个库可以正常工作,但是当我不想进入Android SDK的更低/更深的方法时,它仍然有问题指向正确的代码行(“Sourcecode不匹配字节码“)