如何使用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中设置一个断点,然后就可以进入这个方法。
但这里的问题:
- 的node_modules,文件夹是不是在Android的工作室目前,不能调试这种方式。如何实现这一目标?
- 调试的onCreate-方法,并进一步向下进入的Java的栈,非常见于Ger.Offen它发生的“源码不匹配的字节码“。
调试器挂在源代码注释别的地方,但不正是线,被选为执行。
的Android软件开发工具包:
我已经安装了所有的SDK和构建工具和NDK和其他一切,因为23版:
TL; DR:
如何调试存在于node_modules中的本机库 - 使用Android Studio的反应本机应用程序的文件夹,因为它们在AS中不可见,因此不能传递断点?
UPDATE
最后我找到了根本原因。对我而言,这并不奏效,因为我想调试的库在Android Studio中未显示。但是这是我自己的一个错误,因为图书馆设置不正确,为什么Gradle不能注意到它。
因此,这个问题可以像博客文章一样使用它(如果第三方库通过“rnpm-link”或“react-native link”开箱即可使用)这在我的例子中不是这种情况]
巴姆....我现在可以亲自回答我的第一个的两个问题。 Thx to @agent_hunt,让我走向正确的方向......
在这个示例应用程序中,绑定设置不正确。 “rnpm链接”和更新的“react-native link”是“react-native install”的一部分,在这里对于android部分没有正确工作,因为它没有在第三方库中实现现在,我已经用这个例子。
这就是为什么gradle没有注意到图书馆。正确设置后,文件夹react-native-sqlite-storage出现在Android Studio中,我能够传递一个断点并停止执行。尽管如此,调试这个库可以正常工作,但是当我不想进入Android SDK的更低/更深的方法时,它仍然有问题指向正确的代码行(“Sourcecode不匹配字节码“)
你是如何将RN项目导入到android studio的?像我一样吗? – itinance
我通常只是从Android Studio打开android文件夹而不是导入。但我想它是用于相同的目的。您是否尝试过从android studio或gradle sync构建项目,通常会在build.gradle中发生更改时提示。不应该是'npm install react-native-sqlite-storage --save'而不是'react-native install react-native-sqlite-storage'? –
后一个(react-native install ...)是“新的”命令,包括“npm install --save”(或纱线安装)和react-native链接,这是“rnpm链接”的现代形式。我也尝试手动渐变同步,文件夹仍然没有显示,但存在于文件系统 – itinance