Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import com.facebook.react.bridge.ReactMarkerConstants;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.react.v8executor.V8ExecutorFactory;
import com.facebook.react.jscexecutor.JSCExecutorFactory;
import com.facebook.react.views.text.ReactFontManager;


Expand Down Expand Up @@ -73,30 +72,6 @@ public List<ReactPackage> getPackages() {
new MainReactPackage()
);
}

@Override
public JavaScriptExecutorFactory getJavaScriptExecutorFactory() {
ReactMarker.addListener(new RNTesterReactMarker());
// We use the name of the device and the app for debugging & metrics
String appName = getPackageName();
String deviceName = getFriendlyDeviceName();

File jseDir = getApplicationContext().getDir("jse", Context.MODE_PRIVATE);
File jsDataStore = new File(jseDir, JSE_CACHING_DIRECTORY_NAME);
String jseCacheDirectoryPath = "";
if ((jsDataStore.exists() && jsDataStore.isDirectory()) || jsDataStore.mkdirs()) {
jseCacheDirectoryPath = jsDataStore.getAbsolutePath();
}
if(BuildConfig.JS_ENGINE_USED.equals("V8")){
return new V8ExecutorFactory(appName, deviceName, new V8ExecutorFactory.V8ConfigParams(jseCacheDirectoryPath, V8ExecutorFactory.V8ConfigParams.CacheType.CodeCache, false));
}
else if(BuildConfig.JS_ENGINE_USED.equals("JSC")){
return new JSCExecutorFactory(appName, deviceName);
}
else{
return null;
}
}
};

@Override
Expand Down
11 changes: 0 additions & 11 deletions ReactAndroid/ReactAndroid.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,6 @@
<file src="build\react-ndk\all\x86\libjsinspector.so" target="lib\droidx86"/>
<file src="build\react-ndk\all\arm64-v8a\libjsinspector.so" target="lib\droidarm64"/>

<file src="build\react-ndk\all\x86_64\libprivatedata.so" target="lib\droidx64"/>
<file src="build\react-ndk\all\armeabi-v7a\libprivatedata.so" target="lib\droidarm"/>
<file src="build\react-ndk\all\x86\libprivatedata.so" target="lib\droidx86"/>
<file src="build\react-ndk\all\arm64-v8a\libprivatedata.so" target="lib\droidarm64"/>

<file src="build\react-ndk\all\x86_64\libreactnativejni.so" target="lib\droidx64"/>
<file src="build\react-ndk\all\armeabi-v7a\libreactnativejni.so" target="lib\droidarm"/>
<file src="build\react-ndk\all\x86\libreactnativejni.so" target="lib\droidx86"/>
Expand Down Expand Up @@ -88,11 +83,6 @@
<file src="build\tmp\buildReactNdkLib\local\x86\libjsinspector.so" target="lib\droidx86\unstripped"/>
<file src="build\tmp\buildReactNdkLib\local\arm64-v8a\libjsinspector.so" target="lib\droidarm64\unstripped"/>

<file src="build\tmp\buildReactNdkLib\local\x86_64\libprivatedata.so" target="lib\droidx64\unstripped"/>
<file src="build\tmp\buildReactNdkLib\local\armeabi-v7a\libprivatedata.so" target="lib\droidarm\unstripped"/>
<file src="build\tmp\buildReactNdkLib\local\x86\libprivatedata.so" target="lib\droidx86\unstripped"/>
<file src="build\tmp\buildReactNdkLib\local\arm64-v8a\libprivatedata.so" target="lib\droidarm64\unstripped"/>

<file src="build\tmp\buildReactNdkLib\local\x86_64\libreactnativejni.so" target="lib\droidx64\unstripped"/>
<file src="build\tmp\buildReactNdkLib\local\armeabi-v7a\libreactnativejni.so" target="lib\droidarm\unstripped"/>
<file src="build\tmp\buildReactNdkLib\local\x86\libreactnativejni.so" target="lib\droidx86\unstripped"/>
Expand Down Expand Up @@ -124,7 +114,6 @@
<file src="..\ReactCommon\yoga\yoga\**\*.h" target="inc\Yoga"/>
<file src="..\folly\**\*.*" target="inc" />
<file src="..\glog\src\glog\*.h" target="inc\glog" />
<file src="..\ReactCommon\privatedata\PrivateDataBase.h" target="inc\privatedata" />
<file src="..\jsc\jsc-headers\*.h" target="inc\jsc"/>
</files>
</package>
Expand Down
63 changes: 26 additions & 37 deletions ReactAndroid/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,8 @@ def boostPath = dependenciesPath ?: System.getenv("REACT_NATIVE_BOOST_PATH") ?:
def DoubleConversionPath = '../double-conversion'
def FollyPath = '..'
def GlogPath = '..'
def JSCPath = '../jsc'
def V8Path = 'packages/ReactNative.V8.Android.7.0.276.32-v1'


// Set the value of JSEngineUsed as 'V8' or 'JSC' to enable the respective engine
def JSEngineUsed = 'V8'

task createNativeDepsDirectories {
downloadsDir.mkdirs()
thirdPartyNdkDir.mkdirs()
Expand Down Expand Up @@ -130,34 +125,30 @@ task prepareGlog(dependsOn: createNativeDepsDirectories, type: Copy) {

// Create Android.mk library module based on jsc from npm
task prepareJSC {
if (JSEngineUsed=='JSC'){
doLast {
def jscPackageRoot = file("$projectDir/../node_modules/jsc-android/dist")
if (!jscPackageRoot.exists()) {
// For an app to build from RN source, the jsc-android is located at /path/to/app/node_modules
// and $projectDir may located at /path/to/app/node_modules/react-native/ReactAndroid
jscPackageRoot = file("$projectDir/../../jsc-android/dist")
}
def jscAAR = fileTree(jscPackageRoot).matching({ it.include "**/android-jsc/**/*.aar" }).singleFile
def soFiles = zipTree(jscAAR).matching({ it.include "**/*.so" })

def headerFiles = fileTree(jscPackageRoot).matching({ it.include "**/include/*.h" })

copy {
from(soFiles)
from(headerFiles)
from("src/main/jni/third-party/jsc/Android.mk")

filesMatching("**/*.h", { it.path = "JavaScriptCore/${it.name}" })

includeEmptyDirs(false)
into("$thirdPartyNdkDir/jsc")

}
}
}
}
doLast {
def jscPackageRoot = file("$projectDir/../node_modules/jsc-android/dist")
if (!jscPackageRoot.exists()) {
// For an app to build from RN source, the jsc-android is located at /path/to/app/node_modules
// and $projectDir may located at /path/to/app/node_modules/react-native/ReactAndroid
jscPackageRoot = file("$projectDir/../../jsc-android/dist")
}
def jscAAR = fileTree(jscPackageRoot).matching({ it.include "**/android-jsc/**/*.aar" }).singleFile
def soFiles = zipTree(jscAAR).matching({ it.include "**/*.so" })

def headerFiles = fileTree(jscPackageRoot).matching({ it.include "**/include/*.h" })

copy {
from(soFiles)
from(headerFiles)
from("src/main/jni/third-party/jsc/Android.mk")

filesMatching("**/*.h", { it.path = "JavaScriptCore/${it.name}" })

includeEmptyDirs(false)
into("$thirdPartyNdkDir/jsc")
}
}
}
task downloadNdkBuildDependencies {
if (!boostPath) {
dependsOn(downloadBoost)
Expand Down Expand Up @@ -225,7 +216,7 @@ def getNdkBuildFullPath() {
return ndkBuildFullPath
}

task buildReactNdkLib(dependsOn: [prepareJSC, prepareBoost, prepareDoubleConversion, prepareFolly, prepareGlog], type: Exec) {
task buildReactNdkLib(dependsOn: [prepareBoost, prepareDoubleConversion, prepareFolly, prepareGlog], type: Exec) {
inputs.dir("$projectDir/../ReactCommon")
inputs.dir("src/main/jni")
outputs.dir("$buildDir/react-ndk/all")
Expand All @@ -239,9 +230,8 @@ task buildReactNdkLib(dependsOn: [prepareJSC, prepareBoost, prepareDoubleConvers
"V8_NUGET_DIR=$projectDir/$V8Path",
"REACT_COMMON_DIR=$projectDir/../ReactCommon",
"REACT_SRC_DIR=$projectDir/src/main/java/com/facebook/react",
"JS_ENGINE=$JSEngineUsed",
'-C', file("src/main/jni/react/jni").absolutePath,
'--jobs', project.findProperty("jobs") ?: Runtime.runtime.availableProcessors()
"-C", file("src/main/jni/react/jni").absolutePath,
"--jobs", project.findProperty("jobs") ?: Runtime.runtime.availableProcessors()
)
}

Expand Down Expand Up @@ -302,7 +292,6 @@ android {
}

buildConfigField("boolean", "IS_INTERNAL_BUILD", "false")
buildConfigField("String", "JS_ENGINE_USED", "\"$JSEngineUsed\"")
buildConfigField("int", "EXOPACKAGE_FLAGS", "0")

resValue "integer", "react_native_dev_server_port", reactNativeDevServerPort()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import android.app.Application;
import com.facebook.infer.annotation.Assertions;
import com.facebook.react.bridge.JSBundleLoader;
import com.facebook.react.bridge.JSCJavaScriptExecutorFactory;
import com.facebook.react.bridge.JSIModulePackage;
import com.facebook.react.bridge.JavaScriptExecutorFactory;
import com.facebook.react.bridge.NativeModuleCallExceptionHandler;
Expand All @@ -22,6 +21,7 @@
import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener;
import com.facebook.react.devsupport.interfaces.DevSupportManager;
import com.facebook.react.jscexecutor.JSCExecutorFactory;
import com.facebook.react.v8executor.V8ExecutorFactory;
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
import com.facebook.react.packagerconnection.RequestHandler;
import com.facebook.react.uimanager.UIImplementationProvider;
Expand Down Expand Up @@ -276,7 +276,7 @@ public ReactInstanceManager build() {
mCurrentActivity,
mDefaultHardwareBackBtnHandler,
mJavaScriptExecutorFactory == null
? new JSCJavaScriptExecutorFactory(appName, deviceName)
? new V8ExecutorFactory(appName, deviceName)
: mJavaScriptExecutorFactory,
(mJSBundleLoader == null && mJSBundleAssetUrl != null)
? JSBundleLoader.createAssetLoader(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,45 +13,26 @@
import com.facebook.soloader.SoLoader;
import com.facebook.systrace.Systrace;

import com.facebook.react.BuildConfig;

public class ReactBridge {
private static volatile long sLoadStartTime = 0;
private static volatile long sLoadEndTime = 0;

private static boolean sDidInit = false;

// Office implementation of RN can work with two JS Engines: V8 and JSC.
// There is a compile time flag to decide which one will be used and V8 is the default one.
// We are exposing an API from ReactBridge so that consumer can choose JSC if required.
private static boolean sUseJSC = false;

public static void staticInit() {
public synchronized static void staticInit() {
if (sDidInit) {
return;
}
sDidInit = true;

if(BuildConfig.JS_ENGINE_USED.equals("JSC")){
sUseJSC = true;
}

sLoadStartTime = SystemClock.uptimeMillis();
Systrace.beginSection(TRACE_TAG_REACT_JAVA_BRIDGE, "ReactBridge.staticInit::load:reactnativejni");
ReactMarker.logMarker(ReactMarkerConstants.LOAD_REACT_NATIVE_SO_FILE_START);

if (sUseJSC) {
SoLoader.loadLibrary("icu_common");
SoLoader.loadLibrary("jsc");
}
else {
SoLoader.loadLibrary("v8_libbase.cr");
SoLoader.loadLibrary("v8_libplatform.cr");
SoLoader.loadLibrary("v8.cr");
}
SoLoader.loadLibrary("v8_libbase.cr");
SoLoader.loadLibrary("v8_libplatform.cr");
SoLoader.loadLibrary("v8.cr");

SoLoader.loadLibrary("glog_init");
SoLoader.loadLibrary("privatedata");
SoLoader.loadLibrary("fb");
SoLoader.loadLibrary("yoga");
SoLoader.loadLibrary("reactnativejni");
Expand Down
57 changes: 7 additions & 50 deletions ReactAndroid/src/main/jni/react/jni/Android.mk
Original file line number Diff line number Diff line change
Expand Up @@ -17,57 +17,24 @@ LOCAL_C_INCLUDES := $(LOCAL_PATH)
# ./../ == react
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../..


LOCAL_CFLAGS += -fexceptions -frtti -Wno-unused-lambda-capture

LOCAL_LDLIBS += -landroid

# The dynamic libraries (.so files) that this module depends on.

LOCAL_SHARED_LIBRARIES := libfolly_json libfb libglog_init libyoga libprivatedata
LOCAL_SHARED_LIBRARIES := libfolly_json libfb libglog_init libyoga

# The static libraries (.a files) that this module depends on.
LOCAL_STATIC_LIBRARIES := libreactnative jsi libjscallinvokerholder
LOCAL_STATIC_LIBRARIES := libreactnative libjscallinvokerholder

# Name of this module.
#
# Other modules can depend on this one by adding libreactnativejni to their
# LOCAL_SHARED_LIBRARIES variable.
LOCAL_MODULE := reactnativejni

LOCAL_SRC_FILES := \
CatalystInstanceImpl.cpp \
CxxModuleWrapper.cpp \
JavaModuleWrapper.cpp \
JReactMarker.cpp \
JSLogging.cpp \
JMessageQueueThread.cpp \
JSLoader.cpp \
JniJSModulesUnbundle.cpp \
MethodInvoker.cpp \
ModuleRegistryBuilder.cpp \
NativeArray.cpp \
NativeCommon.cpp \
NativeDeltaClient.cpp \
NativeMap.cpp \
OnLoad.cpp \
ProxyExecutor.cpp \
ReadableNativeArray.cpp \
ReadableNativeMap.cpp \
WritableNativeArray.cpp \
WritableNativeMap.cpp \

LOCAL_V8_FILES := \
InstanceManager.cpp \
AndroidV8Factory.cpp

ifeq ($(JS_ENGINE), V8)
LOCAL_SRC_FILES += $(LOCAL_V8_FILES)
LOCAL_STATIC_LIBRARIES += v8runtime
else ifeq ($(JS_ENGINE), JSC)
LOCAL_SHARED_LIBRARIES += libjsc
LOCAL_STATIC_LIBRARIES += jscruntime
endif
# Compile all local c++ files.
LOCAL_SRC_FILES := $(wildcard *.cpp)

# Build the files in this directory as a shared library
include $(BUILD_SHARED_LIBRARY)
Expand All @@ -84,16 +51,11 @@ include $(BUILD_SHARED_LIBRARY)
# Whenever you encounter an include <dir>/<module-dir>/Android.mk, you
# tell andorid-ndk to compile the module in <dir>/<module-dir> according
# to the specification inside <dir>/<module-dir>/Android.mk.

$(call import-module,cxxreact)
$(call import-module,privatedata)
$(call import-module,folly)
$(call import-module,fb)
$(call import-module,fbgloginit)
$(call import-module,folly)
ifeq ($(JS_ENGINE), JSC)
$(call import-module,jsc)
endif
$(call import-module,yogajni)
$(call import-module,cxxreact)
$(call import-module,jsi)
$(call import-module,jsiexecutor)
$(call import-module,jscallinvoker)
Expand All @@ -103,9 +65,4 @@ include $(REACT_SRC_DIR)/turbomodule/core/jni/Android.mk
# TODO(ramanpreet):
# Why doesn't this import-module call generate a jscexecutor.so file?
# $(call import-module,jscexecutor)

ifeq ($(JS_ENGINE), JSC)
include $(REACT_SRC_DIR)/jscexecutor/Android.mk
else ifeq ($(JS_ENGINE), V8)
include $(REACT_SRC_DIR)/v8executor/Android.mk
endif
include $(REACT_SRC_DIR)/v8executor/Android.mk
Loading