2017-03-21 2 views
0

Vor kurzem fand ich heraus, wie die jsBundle URL in AppDelegate.swift in iOS ändern, so kann ich meine eigene jsBundle herunterladen und diese verwenden, wenn die Anwendung startet:React-native jsbundle von benutzerdefinierter URL in Android

bundleLocation = URL(string: "http://www.example.com/myJsBundle.js")! 

let rootView = RCTRootView(bundleURL: bundleLocation, moduleName: "ReactApp", initialProperties: nil, launchOptions:launchOptions) 

self.bridge = rootView?.bridge 

self.window = UIWindow(frame: UIScreen.main.bounds) 
let rootViewController = UIViewController() 

rootViewController.view = rootView 

self.window!.rootViewController = rootViewController; 
self.window!.makeKeyAndVisible() 

return true 

wenn ich will jetzt das gleiche in einem Android-Projekt tun ich öffne die MainApplication.java Datei und sehen diesen Code: ist

public class MainApplication extends Application implements ReactApplication { 

    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { 
    @Override 
    public boolean getUseDeveloperSupport() { 
     return BuildConfig.DEBUG; 
    } 

    @Override 
    protected List<ReactPackage> getPackages() { 
     return Arrays.<ReactPackage>asList(
      new MainReactPackage() 
    ); 
    } 
    }; 

    @Override 
    public ReactNativeHost getReactNativeHost() { 
    return mReactNativeHost; 
    } 

    @Override 
    public void onCreate() { 
    super.onCreate(); 
    SoLoader.init(this, /* native exopackage */ false); 
    } 
} 

Meine Frage ist nun, wo und wie kann ich eine benutzerdefinierte URL für die jsBundle in Android definieren ?

Antwort

1

Es hängt davon ab, ob die beabsichtigte Verwendung für das Debuggen ist oder in der Produktion zu verwenden:

Debuggen

Siehe connecting-to-the-development-server wie url und port für Android wechseln.

Produktion

Soweit ich weiß Sie müssen das Bündel zuerst herunterladen und verwenden Sie dann die überschriebene Methode getJSBundleFile auf ReactNativeHost Instanz (erstellt gemäß dem bereitgestellten Code-Schnipsel in der Frage)

@Override 
protected String getJSBundleFile() { 
    return pathToBundleFileDownloaded; // change this 
} 

Wenn die beabsichtigte Verwendung für die Produktion ist, schlage ich vor, einige der Bibliotheken zu suchen, die diese Art von Funktionalität bieten. CodePush ist ein gutes Beispiel und ist kostenlos.

+0

Mein Testpaket befindet sich derzeit im Ordner "Assets". Also versuchte ich die URL: file: ///android_asset/index.android.bundle. Aber das erzeugt den Fehler: Keine solche Datei oder Verzeichnis. Irgendwelche Ideen, die der richtige Weg sein werden? – ManzMoody

+0

Wenn Sie Ihr Bundle zum Ordner "Assets" mit dem Namen "index.android.bundle" hinzufügen, ist dies der Standardspeicherort. Ich würde dann 'getJSBundleFile' nicht überschreiben und false in der Methode' getUseDeveloperSupport' oder Build 'release' zurückgeben. – Stewart

Verwandte Themen