Skip to content

Commit

Permalink
Packing RN dependencies, hermes and ignoring javadoc failure, (#852)
Browse files Browse the repository at this point in the history
* Ignore javadoc failure

* Bringing few more changes from 0.63-stable

* Fixing a patch in engine selection

* Fixing a patch in nuget spec

* Fixing the output directory of nuget pack

* Packaging dependencies in the nuget
  • Loading branch information
mganandraj authored Oct 13, 2021
1 parent c8ecfc8 commit 0cf2b3d
Show file tree
Hide file tree
Showing 8 changed files with 718 additions and 316 deletions.
17 changes: 15 additions & 2 deletions .ado/android-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,18 @@ jobs:

- template: templates\prep-android-nuget.yml

# Verify depenendencies can be enumerated and downloaded ..
- task: CmdLine@2
displayName: 'Verify Dependencies can be enumerated'
inputs:
script: sudo apt-get install python3-pip && sudo apt-get install python3-setuptools && pip3 install BeautifulSoup4 && pip3 install wheel && pip3 install wget && python3 android-patches/scripts/downloadDependencies.py $(Build.SourcesDirectory) && tree $(Build.SourcesDirectory)/android


# Very similar to the default pack task .. but appends 'ndk21' to the nuget pack version
- task: CmdLine@2
displayName: 'Verify NuGet can be packed'
inputs:
script: NDK=ndk`cat ${ANDROID_SDK_ROOT}/ndk-bundle/source.properties 2>&1 | grep Pkg.Revision | awk '{ print $3}' | awk -F. '{ print $1 }'`; mono $(System.DefaultWorkingDirectory)/nuget-bin/nuget.exe pack $(System.DefaultWorkingDirectory)/ReactAndroid/ReactAndroid.nuspec -OutputDirectory $(System.DefaultWorkingDirectory) -Properties buildNumber=$(buildNumber)-$NDK;commitId=$(Build.SourceVersion)
script: NDK=ndk`cat ${ANDROID_SDK_ROOT}/ndk-bundle/source.properties 2>&1 | grep Pkg.Revision | awk '{ print $3}' | awk -F. '{ print $1 }'`; mono $(System.DefaultWorkingDirectory)/nuget-bin/nuget.exe pack $(System.DefaultWorkingDirectory)/ReactAndroid/ReactAndroid.nuspec -OutputDirectory $(Build.StagingDirectory)/final -Properties buildNumber=$(buildNumber)-$NDK;commitId=$(Build.SourceVersion)

# Android CI doesn't create a nuget now, but this check is failing builds. Quickest fix to unblock builds is to disable the check... but we need to find the root cause and fix it and enable this again.
# - script: '[ -f $(System.DefaultWorkingDirectory)/*.nupkg ]'
Expand All @@ -70,4 +77,10 @@ jobs:
- task: CmdLine@2
displayName: gradlew clean
inputs:
script: ./gradlew clean
script: ./gradlew clean

- task: PublishBuildArtifacts@1
displayName: 'Publish final artifacts'
inputs:
PathtoPublish: '$(Build.StagingDirectory)/final'
ArtifactName: 'ReactNative-Final'
7 changes: 7 additions & 0 deletions .ado/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,13 @@ jobs:

- template: templates\prep-android-nuget.yml

# Enumerate and download all dependencies ..
- task: CmdLine@2
displayName: 'Verify Dependencies can be enumerated'
inputs:
script: sudo apt-get install python3-pip && sudo apt-get install python3-setuptools && pip3 install BeautifulSoup4 && pip3 install wheel && pip3 install wget && python3 android-patches/scripts/downloadDependencies.py $(Build.SourcesDirectory) && tree $(Build.SourcesDirectory)/android


# Very similar to the default pack task .. but appends 'ndk21b' to the nuget pack version
- task: CmdLine@2
displayName: 'NuGet pack'
Expand Down
76 changes: 73 additions & 3 deletions android-patches/patches/Build/ReactAndroid/ReactAndroid.nuspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
--- "E:\\github\\rnm-63-fresh\\ReactAndroid\\ReactAndroid.nuspec" 1969-12-31 16:00:00.000000000 -0800
+++ "E:\\github\\rnm-63\\ReactAndroid\\ReactAndroid.nuspec" 2020-10-27 20:20:54.071789900 -0700
@@ -0,0 +1,130 @@
--- "E:\\gh\\react-native-macos2\\ReactAndroid\\ReactAndroid.nuspec" 1969-12-31 16:00:00.000000000 -0800
+++ "E:\\gh\\react-native-macos\\ReactAndroid\\ReactAndroid.nuspec" 2021-10-12 19:48:38.934480100 -0700
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="utf-8"?>
+<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
+ <metadata>
Expand Down Expand Up @@ -64,6 +64,41 @@
+ <file src="build\react-ndk\all\armeabi-v7a\libyoga.so" target="lib\droidarm"/>
+ <file src="build\react-ndk\all\x86\libyoga.so" target="lib\droidx86"/>
+ <file src="build\react-ndk\all\arm64-v8a\libyoga.so" target="lib\droidarm64"/>
+
+ <file src="build\react-ndk\all\x86_64\libhermes-executor-common-debug.so" target="lib\droidx64"/>
+ <file src="build\react-ndk\all\armeabi-v7a\libhermes-executor-common-debug.so" target="lib\droidarm"/>
+ <file src="build\react-ndk\all\x86\libhermes-executor-common-debug.so" target="lib\droidx86"/>
+ <file src="build\react-ndk\all\arm64-v8a\libhermes-executor-common-debug.so" target="lib\droidarm64"/>
+
+ <file src="build\react-ndk\all\x86_64\libhermes-executor-common-release.so" target="lib\droidx64"/>
+ <file src="build\react-ndk\all\armeabi-v7a\libhermes-executor-common-release.so" target="lib\droidarm"/>
+ <file src="build\react-ndk\all\x86\libhermes-executor-common-release.so" target="lib\droidx86"/>
+ <file src="build\react-ndk\all\arm64-v8a\libhermes-executor-common-release.so" target="lib\droidarm64"/>
+
+ <file src="build\react-ndk\all\x86_64\libhermes-executor-debug.so" target="lib\droidx64"/>
+ <file src="build\react-ndk\all\armeabi-v7a\libhermes-executor-debug.so" target="lib\droidarm"/>
+ <file src="build\react-ndk\all\x86\libhermes-executor-debug.so" target="lib\droidx86"/>
+ <file src="build\react-ndk\all\arm64-v8a\libhermes-executor-debug.so" target="lib\droidarm64"/>
+
+ <file src="build\react-ndk\all\x86_64\libhermes-executor-release.so" target="lib\droidx64"/>
+ <file src="build\react-ndk\all\armeabi-v7a\libhermes-executor-release.so" target="lib\droidarm"/>
+ <file src="build\react-ndk\all\x86\libhermes-executor-release.so" target="lib\droidx86"/>
+ <file src="build\react-ndk\all\arm64-v8a\libhermes-executor-release.so" target="lib\droidarm64"/>
+
+ <file src="build\react-ndk\all\x86_64\libhermes-inspector.so" target="lib\droidx64"/>
+ <file src="build\react-ndk\all\armeabi-v7a\libhermes-inspector.so" target="lib\droidarm"/>
+ <file src="build\react-ndk\all\x86\libhermes-inspector.so" target="lib\droidx86"/>
+ <file src="build\react-ndk\all\arm64-v8a\libhermes-inspector.so" target="lib\droidarm64"/>
+
+ <file src="build\react-ndk\all\x86_64\libjsijniprofiler.so" target="lib\droidx64"/>
+ <file src="build\react-ndk\all\armeabi-v7a\libjsijniprofiler.so" target="lib\droidarm"/>
+ <file src="build\react-ndk\all\x86\libjsijniprofiler.so" target="lib\droidx86"/>
+ <file src="build\react-ndk\all\arm64-v8a\libjsijniprofiler.so" target="lib\droidarm64"/>
+
+ <file src="build\react-ndk\all\x86_64\libfolly_futures.so" target="lib\droidx64"/>
+ <file src="build\react-ndk\all\armeabi-v7a\libfolly_futures.so" target="lib\droidarm"/>
+ <file src="build\react-ndk\all\x86\libfolly_futures.so" target="lib\droidx86"/>
+ <file src="build\react-ndk\all\arm64-v8a\libfolly_futures.so" target="lib\droidarm64"/>
+
+ <!-- Unstripped binaries -->
+ <file src="build\tmp\buildReactNdkLib\local\x86_64\libfb.so" target="lib\droidx64\unstripped"/>
Expand Down Expand Up @@ -116,6 +151,40 @@
+ <file src="build\tmp\buildReactNdkLib\local\x86\libyoga.so" target="lib\droidx86\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\arm64-v8a\libyoga.so" target="lib\droidarm64\unstripped"/>
+
+ <file src="build\tmp\buildReactNdkLib\local\x86_64\libhermes-executor-common-debug.so" target="lib\droidx64\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\armeabi-v7a\libhermes-executor-common-debug.so" target="lib\droidarm\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\x86\libhermes-executor-common-debug.so" target="lib\droidx86\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\arm64-v8a\libhermes-executor-common-debug.so" target="lib\droidarm64\unstripped"/>
+
+ <file src="build\tmp\buildReactNdkLib\local\x86_64\libhermes-executor-common-release.so" target="lib\droidx64\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\armeabi-v7a\libhermes-executor-common-release.so" target="lib\droidarm\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\x86\libhermes-executor-common-release.so" target="lib\droidx86\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\arm64-v8a\libhermes-executor-common-release.so" target="lib\droidarm64\unstripped"/>
+
+ <file src="build\tmp\buildReactNdkLib\local\x86_64\libhermes-executor-debug.so" target="lib\droidx64\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\armeabi-v7a\libhermes-executor-debug.so" target="lib\droidarm\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\x86\libhermes-executor-debug.so" target="lib\droidx86\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\arm64-v8a\libhermes-executor-debug.so" target="lib\droidarm64\unstripped"/>
+
+ <file src="build\tmp\buildReactNdkLib\local\x86_64\libhermes-executor-release.so" target="lib\droidx64\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\armeabi-v7a\libhermes-executor-release.so" target="lib\droidarm\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\x86\libhermes-executor-release.so" target="lib\droidx86\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\arm64-v8a\libhermes-executor-release.so" target="lib\droidarm64\unstripped"/>
+
+ <file src="build\tmp\buildReactNdkLib\local\x86_64\libhermes-inspector.so" target="lib\droidx64\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\armeabi-v7a\libhermes-inspector.so" target="lib\droidarm\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\x86\libhermes-inspector.so" target="lib\droidx86\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\arm64-v8a\libhermes-inspector.so" target="lib\droidarm64\unstripped"/>
+
+ <file src="build\tmp\buildReactNdkLib\local\x86_64\libjsijniprofiler.so" target="lib\droidx64\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\armeabi-v7a\libjsijniprofiler.so" target="lib\droidarm\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\x86\libjsijniprofiler.so" target="lib\droidx86\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\arm64-v8a\libjsijniprofiler.so" target="lib\droidarm64\unstripped"/>
+
+ <file src="build\tmp\buildReactNdkLib\local\x86_64\libfolly_futures.so" target="lib\droidx64\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\armeabi-v7a\libfolly_futures.so" target="lib\droidarm\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\x86\libfolly_futures.so" target="lib\droidx86\unstripped"/>
+ <file src="build\tmp\buildReactNdkLib\local\arm64-v8a\libfolly_futures.so" target="lib\droidarm64\unstripped"/>
+ <!-- AAR and POM -->
+ <file src="..\android\com\facebook\react\react-native\*\react-native-*.aar" target="lib"/>
+ <file src="..\android\com\facebook\react\react-native\*\react-native-*.pom" target="lib"/>
Expand All @@ -128,6 +197,7 @@
+ <file src="..\ReactCommon\cxxreact\**\*.h" target="inc\cxxreact"/>
+ <file src="..\ReactCommon\jsi\**\*.h" target="inc\jsi"/>
+ <file src="..\ReactCommon\yoga\yoga\**\*.h" target="inc\Yoga"/>
+ <file src="..\android\dependencies\**\*.*" target="dependencies"/>
+ </files>
+</package>
+
10 changes: 10 additions & 0 deletions android-patches/patches/Build/ReactAndroid/release.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
--- /home/mganandraj/github/rnm-64-vanilla/ReactAndroid/release.gradle 2021-10-11 17:51:44.286455263 -0700
+++ /home/mganandraj/github/rnm-64/ReactAndroid/release.gradle 2021-10-07 16:35:28.636536900 -0700
@@ -74,6 +74,7 @@
afterEvaluate { project ->

task androidJavadoc(type: Javadoc) {
+ failOnError false
source = android.sourceSets.main.java.srcDirs
classpath += files(android.bootClasspath)
classpath += files(project.getConfigurations().getByName("compile").asList())
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
--- "E:\\github\\rnm-63-fresh\\ReactAndroid\\src\\main\\java\\com\\facebook\\react\\bridge\\ReactBridge.java" 2020-10-27 20:26:16.762190600 -0700
+++ "E:\\github\\rnm-63\\ReactAndroid\\src\\main\\java\\com\\facebook\\react\\bridge\\ReactBridge.java" 2020-10-13 21:38:04.995797000 -0700
@@ -31,6 +31,14 @@
--- "E:\\gh\\react-native-macos2\\ReactAndroid\\src\\main\\java\\com\\facebook\\react\\bridge\\ReactBridge.java" 2021-10-12 13:35:49.124099000 -0700
+++ "E:\\gh\\react-native-macos\\ReactAndroid\\src\\main\\java\\com\\facebook\\react\\bridge\\ReactBridge.java" 2021-10-12 13:22:46.508704400 -0700
@@ -31,6 +31,24 @@
Systrace.beginSection(
TRACE_TAG_REACT_JAVA_BRIDGE, "ReactBridge.staticInit::load:reactnativejni");
ReactMarker.logMarker(ReactMarkerConstants.LOAD_REACT_NATIVE_SO_FILE_START);
+
+ SoLoader.loadLibrary("v8jsi");
+ // JS Engine is configurable .. And we expect only one packaged.
+ // Hence ignore failure.
+
+ try {
+ SoLoader.loadLibrary("hermes");
+ } catch (UnsatisfiedLinkError jscE) {}
+
+ try {
+ SoLoader.loadLibrary("v8jsi");
+ } catch (UnsatisfiedLinkError jscE) {}
+
+ SoLoader.loadLibrary("glog_init");
+ SoLoader.loadLibrary("fb");
+ SoLoader.loadLibrary("fbjni");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
--- "E:\\github\\rnm-63-fresh\\ReactAndroid\\src\\main\\java\\com\\facebook\\react\\ReactInstanceManagerBuilder.java" 2020-10-27 20:26:16.728167300 -0700
+++ "E:\\github\\rnm-63\\ReactAndroid\\src\\main\\java\\com\\facebook\\react\\ReactInstanceManagerBuilder.java" 2020-10-13 21:27:45.535631600 -0700
--- "E:\\gh\\react-native-macos2\\ReactAndroid\\src\\main\\java\\com\\facebook\\react\\ReactInstanceManagerBuilder.java" 2021-10-12 13:33:12.881732000 -0700
+++ "E:\\gh\\react-native-macos\\ReactAndroid\\src\\main\\java\\com\\facebook\\react\\ReactInstanceManagerBuilder.java" 2021-10-12 13:26:43.722189600 -0700
@@ -26,6 +26,7 @@
import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener;
import com.facebook.react.devsupport.interfaces.DevSupportManager;
Expand All @@ -8,21 +8,69 @@
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
import com.facebook.react.packagerconnection.RequestHandler;
import com.facebook.react.uimanager.UIImplementationProvider;
@@ -291,7 +292,8 @@
@@ -59,8 +60,21 @@
private @Nullable JSIModulePackage mJSIModulesPackage;
private @Nullable Map<String, RequestHandler> mCustomPackagerCommandHandlers;

+ public enum JSEngine {
+ Hermes,
+ V8
+ }
+
+ private JSEngine mJSEngine = JSEngine.V8;
+
/* package protected */ ReactInstanceManagerBuilder() {}

+ public ReactInstanceManagerBuilder setJSEngine(
+ JSEngine jsEngine) {
+ mJSEngine = jsEngine;
+ return this;
+ }
+
/** Sets a provider of {@link UIImplementation}. Uses default provider if null is passed. */
public ReactInstanceManagerBuilder setUIImplementationProvider(
@Nullable UIImplementationProvider uiImplementationProvider) {
@@ -291,40 +305,10 @@

private JavaScriptExecutorFactory getDefaultJSExecutorFactory(
String appName, String deviceName, Context applicationContext) {
- try {
- // If JSC is included, use it as normal
- initializeSoLoaderIfNecessary(applicationContext);
- SoLoader.loadLibrary("jscexecutor");
- return new JSCExecutorFactory(appName, deviceName);
- } catch (UnsatisfiedLinkError jscE) {
- // https://github.com/facebook/hermes/issues/78 shows that
- // people who aren't trying to use Hermes are having issues.
- // https://github.com/facebook/react-native/issues/25923#issuecomment-554295179
- // includes the actual JSC error in at least one case.
- //
- // So, if "__cxa_bad_typeid" shows up in the jscE exception
- // message, then we will assume that's the failure and just
- // throw now.
-
- if (jscE.getMessage().contains("__cxa_bad_typeid")) {
- throw jscE;
- }
-
- // Otherwise use Hermes
- try {
+ if(mJSEngine == JSEngine.V8) {
+ return new V8ExecutorFactory(appName, deviceName);
+/* try {
// If JSC is included, use it as normal
initializeSoLoaderIfNecessary(applicationContext);
SoLoader.loadLibrary("jscexecutor");
@@ -325,6 +327,6 @@
hermesE.printStackTrace();
throw jscE;
+ } else {
return new HermesExecutorFactory();
- } catch (UnsatisfiedLinkError hermesE) {
- // If we get here, either this is a JSC build, and of course
- // Hermes failed (since it's not in the APK), or it's a Hermes
- // build, and Hermes had a problem.
-
- // We suspect this is a JSC issue (it's the default), so we
- // will throw that exception, but we will print hermesE first,
- // since it could be a Hermes issue and we don't want to
- // swallow that.
- hermesE.printStackTrace();
- throw jscE;
}
- }
+ } */
}
}
Loading

0 comments on commit 0cf2b3d

Please sign in to comment.