React Native是否将JavaScript编译为Java for Android?

时间:2016-12-13 15:06:17

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

当我使用React Native开发混合应用程序时。当我从React Native代码创建Android-App时,我编写的JavaScript代码是否会转换为Dalvik / ART Runtime的Java-Code或Java-Bytecode?或者只是编译为本机UI组件的UI组件?或者像Fetch API这样的库是否将JavaScript代码编译为Java-Code或Java-Bytecode?

6 个答案:

答案 0 :(得分:55)

基本上,你写Javascript。 Javascript与本机组件通信(Android上的Java,iOS上的Objective C,Windows上的C#)。

通过所谓的“桥梁”进行通信。如果您认为此通信过于缓慢,则可以选择分别在Java,Objective C或C#中实现Javascript功能,以便纯粹运行本机。在这种情况下,您直接使用本机代码编写,因此本机编译没有Javascript。

这会牺牲性能的兼容性。通常情况下,这不是必需的。

答案 1 :(得分:18)

代码仍然是JavaScript本机代码,不会转换为任何其他格式。混合应用程序在本机容器应用程序内运行,该应用程序调用JavaScript运行时引擎,负责执行JavaScript代码。我希望这澄清了这个问题。

答案 2 :(得分:5)

我看到的最好的解释-

00:00-03:55

https://www.youtube.com/watch?v=6ZnfsJ6mM5c&t=1228s

“在编译后的本机应用程序中-所有UI(Buttons,Text ...) 将其编译为本地代码(Java或Objective C),而JavaScript部分将 保持JavaScript。”

完整说明-

08:06-14:10

https://www.youtube.com/watch?v=qSRrxpdMpVc

enter image description here

答案 3 :(得分:3)

基于"React Made Native Easy"本书:

  

本质上,React Native可以看作是一组React   组件,其中每个组件代表相应的本机   视图和组件。

React Native体系结构中也包含两个部分:

  
      
  1. 本地代码/模块:对于iOS,大多数本地代码是用Objective C或Swift编写的,而对于Android,则是   用Java编写。但是对于编写我们的React Native应用程序,我们几乎不会   曾经需要为iOS或Android编写本机代码。

  2.   
  3. JavaScript VM::运行我们所有JavaScript代码的JS虚拟机。在iOS / Android模拟器和设备上,React Native   使用JavaScriptCore,这是支持JavaScript的引擎   苹果浏览器。 JavaScriptCore最初是一个开源JavaScript引擎   为WebKit构建。如果是iOS,React Native使用JavaScriptCore   由iOS平台提供。它最初是在iOS 7中引入的   使用OS X Mavericks。

  4.   

对于这些部分之间的通信:

  

React Native Bridge :React Native Bridge是一个C ++ / Java桥,它是   负责本机和Javascript之间的通信   线。自定义协议用于消息传递。

答案 4 :(得分:3)

反应原生

反应-> JavaScriptCore->本机代码->“您所看到的”

混合应用

JavaScript->本机WebView包装器->“您所看到的”

答案 5 :(得分:0)

reat native用作包装器,例如,如果您想在布局中放置按钮,只需将button标记放在布局中,但是此按钮来自本地android按钮,而您仅使用UI模块中称为React-native的特定API。您可以创建自定义的本机模块,并轻松地在您的react本机项目中使用它。