web-dev-qa-db-ja.com

AndroidのエントリファイルパスとiOSネイティブプロジェクトのiOSを変更する

react-native init awesomeProjectを使用して新しいプロジェクトを開始した後、index.ios.jsindex.Android.iossrcという名前の共通フォルダー内.

react-native run-Androidを実行すると、次のエラーが発生します。

Error on Android device

正しいパスにあるエントリファイルの反応ネイティブ検索に変更する必要があるのはどこですか?

12

反応ネイティブ0.35で次の手順を使用しました

開発のためには、ファイルを開く必要があります

MyProject/Android/app/src/main/Java/com/MyProject/MainApplication.Java

ReactNativeHostと呼ばれるgetJSMainModuleNameのメソッドをオーバーライドします。

package com.MyProject;

// ...

public class MainApplication extends Application implements ReactApplication {

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {

    // ...

    // ADD THE LINES BELOW

    @Override
    protected String getJSMainModuleName() {
      return "src/index.Android";
    }

    // ADD THE LINES ABOVE

  };

  // ...
}

このようにして、アプリはパッケージャサーバーからモジュールをフェッチする場所を認識します。

本番環境では、cd Android && ./gradlew assembleReleaseを使用してAPKをビルドするときに、ファイルを変更する必要があります

MyProject/Android/app/build.gradle

カスタムビルドオプションを追加する場合は、apply from: "../../node_modules/react-native/react.gradle"行の前に配置してください。

apply plugin: "com.Android.application"

import com.Android.build.OutputFile

// ...

// ADD THE LINES BELOW

project.ext.react = [
    // the entry file for bundle generation
    entryFile: "src/index.Android.js",
]

// ADD THE LINES ABOVE

// ...

apply from: "../../node_modules/react-native/react.gradle"

残念ながら、現在iOSの設定を行っていません。それについてはまだサポートできません。

24

マイケルの情報をありがとう!私はiOSでケースを作成し、AndroidとiOSの両方で回答を完成させました。

Androidと同じように、開発と生産の答えは異なります。

  1. 開発用(デバッグモード)

    AppDelegate.mに移動

    パラメータjsBundleURLForBundleRootをエントリファイルのパスとして設定し、moduleNameをRN jsに登録したコンポーネントとして設定します。たとえば、エントリjsファイルをjs/screen/LoginScreen.jsに、コンポーネントをLoginScreenに変更したい場合は、次のようにします。

    jsCodeLocation = [[RCTBundleURLProvider sharedSettings] 
        jsBundleURLForBundleRoot:@"js/screen/LoginScreen"
        fallbackResource:nil];
    rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation                                                
        moduleName:@"LoginScreen"
        initialProperties:nil                                            
        launchOptions:launchOptions];
    
  2. プロダクション(リリースモード)

プロダクションモードの場合、Xcodeはビルド中にjsbundleファイルを生成します。デバッグモードで行ったことに加えて、jscodeのエントリファイルをXcodeに通知する必要があります。

現在のターゲットの「Build Phases」タブに移動します。 「バンドルReactネイティブコードとイメージ」フェーズで、シェルの最後にエントリファイルを追加します

enter image description here

IOSで開発/生成モードを実行する方法についての情報 here

15
gonglong