如何使用index.android.bundle在xamarin android中运行React原生代码?

dbf7pr2w  于 2023-03-31  发布在  React
关注(0)|答案(1)|浏览(141)

bounty将在3天后过期。回答此问题可获得+50声望奖励。Judson Abraham希望引起更多人对此问题的关注:我需要与上述项目的帮助或至少周围的工作。

我想在xamarin android中运行react native项目,我经历了以下步骤,他们使用React native bridge连接React native和Xamarin。
https://github.com/voydz/xamarin-react-native
以下是我的package.json代码

{
  "name": "xamarin-react-native",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "bundle-android": "npx bundle-sample-android && npx bundle-sample-forms-android",
    "bundle-sample-android": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output ../samples/SampleApp.Droid/Assets/index.android.bundle --assets-dest ../samples/SampleApp.Droid/Resources/",
    "bundle-sample-forms-android": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output ../samples/SampleApp.Forms.Droid/Assets/index.android.bundle --assets-dest ../samples/SampleApp.Forms.Droid/Resources/",
    "bundle-ios": "yarn bundle-sample-ios && yarn bundle-sample-forms-ios",
    "bundle-sample-ios": "react-native bundle --platform ios --dev false --entry-file index.js --bundle-output ../samples/SampleApp.iOS/Resources/main.jsbundle --assets-dest ../samples/SampleApp.iOS/Resources/",
    "bundle-sample-forms-ios": "react-native bundle --platform ios --dev false --entry-file index.js --bundle-output ../samples/SampleApp.Forms.iOS/Resources/main.jsbundle --assets-dest ../samples/SampleApp.Forms.iOS/Resources/"
  },
  "dependencies": {
    "react": "18.2.0",
    "react-native": "^0.71.4"
  }
}

当我运行以下命令时

npm install
npm start
npm bundle-sample-android

我的index.android.bundle文件在Sample项目中更新了,这正是我想要的。但只有一个小问题,有一个文件名react-native-0.55.3.aar已经存在于Jars文件夹中,我需要将其替换为react-native-0.71.4.aar。这个react-native-0.55.3.aar文件给了我错误

Error occured while reading the file '..\node_modules\react-native\android\com\facebook\react\react-native\0.55.3\react-native-0.55.3.aar'.

我不知道怎么解决这个问题。有什么建议吗?

aurhwmvo

aurhwmvo1#

Xamarin构建文件直接查找该文件。更新如下:

<LibraryProjectZip Include="..\node_modules\react-native\android\com\facebook\react\react-native\0.55.3\react-native-0.55.3.aar">

binding/ReactNative.Droid/ReactNative.Droid.csproj文件中。
也就是说,这很可能会爆炸。该项目捆绑了RN本身使用的非常过时的阿尔斯,因此您将通过更改核心版本来获得一堆额外的构建冲突,除非Xamarin足够聪明,能够放弃那些支持最新RN所需的较新版本的AAR。您需要检查RN android存储库中的依赖项,并基于此更新所有内容。
现在,你想这样做是为了运行WASM... react-native并不运行WASM。事实上,react-native并不运行你想扔给它的所有JS代码。它运行的是嵌入式js引擎支持的JS代码,在最新版本中,爱马仕,而Hermes不支持WASM:
https://github.com/facebook/hermes/issues/429
你必须通过JSI链接不同的JS引擎(这有点难。我希望现在有文档,但当我几年前尝试时,整个互联网上除了一个中国博客外,没有任何文档),或者通过webview运行。所以你在每个平台上都有大量的额外工作,而且速度更慢。
最重要的是,苹果不喜欢这种事情。记住。
在Android方面,你最好的选择是使用

https://developer.android.com/develop/ui/views/layout/webapps/jsengine

或者链接到能够执行WASM的可嵌入JS引擎(可能是Zipline)

相关问题