diff --git a/ReactAndroid/src/main/jni/xreact/jni/CatalystInstanceImpl.cpp b/ReactAndroid/src/main/jni/xreact/jni/CatalystInstanceImpl.cpp index 2a95a01b7..8ba8f98f3 100644 --- a/ReactAndroid/src/main/jni/xreact/jni/CatalystInstanceImpl.cpp +++ b/ReactAndroid/src/main/jni/xreact/jni/CatalystInstanceImpl.cpp @@ -14,6 +14,8 @@ #include #include +#include +#include #include #include @@ -174,10 +176,32 @@ void CatalystInstanceImpl::loadScriptFromAssets(jobject assetManager, } } +bool CatalystInstanceImpl::isIndexedRAMBundle(const char *sourcePath) { + std::ifstream bundle_stream(sourcePath, std::ios_base::in); + if (!bundle_stream) { + return false; + } + BundleHeader header; + bundle_stream.read(reinterpret_cast(&header), sizeof(header)); + bundle_stream.close(); + return parseTypeFromHeader(header) == ScriptTag::RAMBundle; +} + void CatalystInstanceImpl::loadScriptFromFile(jni::alias_ref fileName, const std::string& sourceURL) { - return instance_->loadScriptFromFile(fileName ? fileName->toStdString() : "", - sourceURL); + + std::string file = fileName ? fileName->toStdString() : ""; + + if (isIndexedRAMBundle(file.c_str())) { + auto bundle = folly::make_unique(file.c_str()); + auto startupScript = bundle->getStartupCode(); + instance_->loadUnbundle( + std::move(bundle), + std::move(startupScript), + sourceURL); + } else { + instance_->loadScriptFromFile(file, sourceURL); + } } void CatalystInstanceImpl::loadScriptFromOptimizedBundle(const std::string& bundlePath, diff --git a/ReactAndroid/src/main/jni/xreact/jni/CatalystInstanceImpl.h b/ReactAndroid/src/main/jni/xreact/jni/CatalystInstanceImpl.h index 0de2cec31..674ca8766 100644 --- a/ReactAndroid/src/main/jni/xreact/jni/CatalystInstanceImpl.h +++ b/ReactAndroid/src/main/jni/xreact/jni/CatalystInstanceImpl.h @@ -40,6 +40,8 @@ class CatalystInstanceImpl : public jni::HybridClass { CatalystInstanceImpl(); + static bool isIndexedRAMBundle(const char *sourcePath); + void initializeBridge( jni::alias_ref callback, // This executor is actually a factory holder. diff --git a/ReactCommon/cxxreact/Android.mk b/ReactCommon/cxxreact/Android.mk index 17e4dcef9..05ac4e14b 100644 --- a/ReactCommon/cxxreact/Android.mk +++ b/ReactCommon/cxxreact/Android.mk @@ -9,6 +9,7 @@ LOCAL_SRC_FILES := \ Executor.cpp \ Instance.cpp \ JSCExecutor.cpp \ + JSBundleType.cpp \ JSCLegacyProfiler.cpp \ JSCLegacyTracing.cpp \ JSCMemory.cpp \ @@ -16,6 +17,7 @@ LOCAL_SRC_FILES := \ JSCPerfStats.cpp \ JSCTracing.cpp \ JSCWebWorker.cpp \ + JSIndexedRAMBundle.cpp \ MethodCall.cpp \ ModuleRegistry.cpp \ NativeToJsBridge.cpp \