java - 如何使用 Android Studio 调试原生 React 原生库?

标签 java android android-studio react-native

这个问题不是关于如何调试 React-Native 应用程序的 javascript-land。它是关于如何调试 node_modules-folder 中的 native libraries(在本例中是指 JAVA 代码)。

虽然我很容易使用 XCode 调试 RN 应用程序的原生 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
  • 已安装 Android SDK 和构建工具(包括 NDK),最高版本为 23

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

<强>1。创建新的 React Native 项目:

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 ):

If you want to use Android Studio to work on native code, from the Welcome screen of Android Studio choose "Import project" and select the android folder of your app.

<强>5。 Android Studio 要求将 gradle 版本从预配置的 1.3.2 更新到 2.2.2。我首先拒绝了整个工作流程,后来我尝试了(两者对我来说没有太大区别)

6. 由于 this issue,必须停用 Instant Run

7.点击Android Studio工具栏中的“运行”或“调试”

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

但这里有问题:

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

enter image description here

  1. 调试 onCreate-Method 并进一步深入到 Java-Stack,经常发生“源代码与字节代码不匹配”

enter image description here

调试器卡在源代码注释中的其他地方,但不在选择执行的那一行。

Android SDK:

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

enter image description here enter image description here

长话短说:

如何使用 Android Studio 调试存在于 node_modules-Folder 的原生库,因为它们在 AS 中不可见,因此无法传递断点?

更新

我终于找到了根本原因。对我来说它没有工作,因为我想调试的库没有在 Android Studio 中显示。但这是我自己的错误,因为库设置不正确,为什么 gradle 无法注意到它。

所以,这个问题可以像博客文章一样使用如何正确地做(如果第 3 方库使用“rnpm-link”或“react-native link”开箱即用就足够了)[哪个在我的示例中不是这种情况]

最佳答案

你做过 rnpm link 或者 react-native link 吗?一旦你这样做了,就会有额外的模块连同应用程序模块,就像这样。 enter image description here

您可以查看 native 模块中的所有 java 代码并放置断点、调试等。

关于java - 如何使用 Android Studio 调试原生 React 原生库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40885063/

相关文章:

java - 这是从 JSR305 使用 javax.annotation 的正确方法吗?

java - setOnClickListener 在 Android fragment 中不起作用

屏幕关闭时的 Android "slows down"

android-studio - 使用 Gradle 配置 Android Studio

java - 在 Java 中显式使用 toString() 方法打印对象的任何原因

java - 在 DB2 中调用 Java 存储过程时出现错误 -4304

android - 使 ImageView 适合 CardView 的宽度

java - 为什么DDMS不再开放?

java - 我在 Recycler View 上得到一个 Null Reference

java - 用于 Java 任务控制的基于命令行的守护进程?备择方案?