diff --git a/.github/workflows/publish-each-pr.yml b/.github/workflows/publish-each-pr.yml
index 56b2b16b7f..48e564327f 100644
--- a/.github/workflows/publish-each-pr.yml
+++ b/.github/workflows/publish-each-pr.yml
@@ -8,12 +8,12 @@ jobs:
if: github.event.pull_request.head.repo.full_name == 'callstack/react-native-paper'
steps:
- name: Checkout
- uses: actions/checkout@v1
+ uses: actions/checkout@v4
- name: Setup Node.js
- uses: actions/setup-node@v1
+ uses: actions/setup-node@v4
with:
- node-version: 16.x
+ node-version: 18.x
- name: Setup Expo
uses: expo/expo-github-action@v7
@@ -21,20 +21,29 @@ jobs:
eas-version: latest
token: ${{ secrets.EXPO_TOKEN }}
- - name: Get yarn cache
+ - name: Restore dependencies
id: yarn-cache
- run: echo "::set-output name=dir::$(yarn cache dir)"
-
- - name: Check yarn cache
- uses: actions/cache@v1
+ uses: actions/cache/restore@v4
with:
- path: ${{ steps.yarn-cache.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
+ path: '**/node_modules'
+ key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}-${{ hashFiles('**/package.json', '!node_modules/**') }}
restore-keys: |
+ ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
${{ runner.os }}-yarn-
- name: Install dependencies
- run: yarn
+ if: steps.yarn-cache.outputs.cache-hit != 'true'
+ run: |
+ sudo corepack enable
+ yarn --cwd example --immutable
+ yarn --immutable
+
+ - name: Cache dependencies
+ if: steps.yarn-cache.outputs.cache-hit != 'true'
+ uses: actions/cache/save@v4
+ with:
+ path: '**/node_modules'
+ key: ${{ steps.yarn-cache.outputs.cache-primary-key }}
- name: Publish Expo app
working-directory: ./example
diff --git a/.github/workflows/updates.yml b/.github/workflows/updates.yml
index f190d5a243..084e00b664 100644
--- a/.github/workflows/updates.yml
+++ b/.github/workflows/updates.yml
@@ -15,7 +15,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
- node-version: 16.x
+ node-version: 18.x
- name: Setup Expo
uses: expo/expo-github-action@v7
@@ -24,18 +24,29 @@ jobs:
eas-version: latest
token: ${{ secrets.EXPO_TOKEN }}
- - name: Get yarn cache
- id: yarn-cache-path
- run: echo "::set-output name=dir::$(yarn cache dir)"
-
- - uses: actions/cache@v4
+ - name: Restore dependencies
+ id: yarn-cache
+ uses: actions/cache/restore@v4
with:
- path: ${{ steps.yarn-cache-path.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
- restore-keys: ${{ runner.os }}-yarn-
+ path: '**/node_modules'
+ key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}-${{ hashFiles('**/package.json', '!node_modules/**') }}
+ restore-keys: |
+ ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
+ ${{ runner.os }}-yarn-
- name: Install dependencies
- run: yarn
+ if: steps.yarn-cache.outputs.cache-hit != 'true'
+ run: |
+ sudo corepack enable
+ yarn --cwd example --immutable
+ yarn --immutable
+
+ - name: Cache dependencies
+ if: steps.yarn-cache.outputs.cache-hit != 'true'
+ uses: actions/cache/save@v4
+ with:
+ path: '**/node_modules'
+ key: ${{ steps.yarn-cache.outputs.cache-primary-key }}
- name: Publish Expo app update
working-directory: ./example
diff --git a/example/android/.gitignore b/example/android/.gitignore
index 877b87e9a5..8a6be07718 100644
--- a/example/android/.gitignore
+++ b/example/android/.gitignore
@@ -10,6 +10,7 @@ build/
local.properties
*.iml
*.hprof
+.cxx/
# Bundle artifacts
*.jsbundle
diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle
index dd8a5d7890..2267974459 100644
--- a/example/android/app/build.gradle
+++ b/example/android/app/build.gradle
@@ -2,17 +2,7 @@ apply plugin: "com.android.application"
apply plugin: "org.jetbrains.kotlin.android"
apply plugin: "com.facebook.react"
-import com.android.build.OutputFile
-
def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()
-def expoDebuggableVariants = ['debug']
-// Override `debuggableVariants` for expo-updates debugging
-if (System.getenv('EX_UPDATES_NATIVE_DEBUG') == "1") {
- react {
- expoDebuggableVariants = []
- }
-}
-
/**
* This is the configuration block to customize your React Native Android app.
@@ -22,17 +12,20 @@ react {
entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim())
reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()
hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc"
- debuggableVariants = expoDebuggableVariants
+ codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()
+
+ // Use Expo CLI to bundle the app, this ensures the Metro config
+ // works correctly with Expo projects.
+ cliFile = new File(["node", "--print", "require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })"].execute(null, rootDir).text.trim())
+ bundleCommand = "export:embed"
/* Folders */
- // The root of your project, i.e. where "package.json" lives. Default is '..'
- // root = file("../")
- // The folder where the react-native NPM package is. Default is ../node_modules/react-native
- // reactNativeDir = file("../node_modules/react-native")
- // The folder where the react-native Codegen package is. Default is ../node_modules/react-native-codegen
- // codegenDir = file("../node_modules/react-native-codegen")
- // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
- // cliFile = file("../node_modules/react-native/cli.js")
+ // The root of your project, i.e. where "package.json" lives. Default is '../..'
+ // root = file("../../")
+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native
+ // reactNativeDir = file("../../node_modules/react-native")
+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen
+ // codegenDir = file("../../node_modules/@react-native/codegen")
/* Variants */
// The list of variants to that are debuggable. For those we're going to
@@ -43,9 +36,7 @@ react {
/* Bundling */
// A list containing the node command and its flags. Default is just 'node'.
// nodeExecutableAndArgs = ["node"]
- //
- // The command to run when bundling. By default is 'bundle'
- // bundleCommand = "ram-bundle"
+
//
// The path to the CLI configuration file. Default is empty.
// bundleConfig = file(../rn-cli.config.js)
@@ -67,22 +58,10 @@ react {
// The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
// hermesFlags = ["-O", "-output-source-map"]
+ /* Autolinking */
autolinkLibrariesWithApp()
}
-// Override `hermesEnabled` by `expo.jsEngine`
-ext {
- hermesEnabled = (findProperty('expo.jsEngine') ?: "hermes") == "hermes"
-}
-
-/**
- * Set this to true to create four separate APKs instead of one,
- * one for each native architecture. This is useful if you don't
- * use App Bundles (https://developer.android.com/guide/app-bundle/)
- * and want to have separate APKs to upload to the Play Store.
- */
-def enableSeparateBuildPerCPUArchitecture = false
-
/**
* Set this to true to Run Proguard on Release builds to minify the Java bytecode.
*/
@@ -101,21 +80,11 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea
*/
def jscFlavor = 'org.webkit:android-jsc:+'
-/**
- * Private function to get the list of Native Architectures you want to build.
- * This reads the value from reactNativeArchitectures in your gradle.properties
- * file and works together with the --active-arch-only flag of react-native run-android.
- */
-def reactNativeArchitectures() {
- def value = project.getProperties().get("reactNativeArchitectures")
- return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
-}
-
android {
ndkVersion rootProject.ext.ndkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
- compileSdkVersion rootProject.ext.compileSdkVersion
+ compileSdk rootProject.ext.compileSdkVersion
namespace 'com.callstack.reactnativepaperexample'
defaultConfig {
@@ -125,15 +94,6 @@ android {
versionCode 28
versionName "3.14.0"
}
-
- splits {
- abi {
- reset()
- enable enableSeparateBuildPerCPUArchitecture
- universalApk false // If true, also generate a universal APK
- include (*reactNativeArchitectures())
- }
- }
signingConfigs {
debug {
storeFile file('debug.keystore')
@@ -153,24 +113,17 @@ android {
shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
+ crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)
}
}
-
- // applicationVariants are e.g. debug, release
- applicationVariants.all { variant ->
- variant.outputs.each { output ->
- // For each separate APK per architecture, set a unique version code as described here:
- // https://developer.android.com/studio/build/configure-apk-splits.html
- // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
- def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
- def abi = output.getFilter(OutputFile.ABI)
- if (abi != null) { // null for the universal-debug, universal-release variants
- output.versionCodeOverride =
- defaultConfig.versionCode * 1000 + versionCodes.get(abi)
- }
-
+ packagingOptions {
+ jniLibs {
+ useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)
}
}
+ androidResources {
+ ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'
+ }
}
// Apply static values from `gradle.properties` to the `android.packagingOptions`
@@ -200,35 +153,24 @@ dependencies {
def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true";
def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true";
def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true";
- def frescoVersion = rootProject.ext.frescoVersion
-
- // If your app supports Android versions before Ice Cream Sandwich (API level 14)
- if (isGifEnabled || isWebpEnabled) {
- implementation("com.facebook.fresco:fresco:${frescoVersion}")
- implementation("com.facebook.fresco:imagepipeline-okhttp3:${frescoVersion}")
- }
if (isGifEnabled) {
// For animated gif support
- implementation("com.facebook.fresco:animated-gif:${frescoVersion}")
+ implementation("com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}")
}
if (isWebpEnabled) {
// For webp support
- implementation("com.facebook.fresco:webpsupport:${frescoVersion}")
+ implementation("com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}")
if (isWebpAnimatedEnabled) {
// Animated webp support
- implementation("com.facebook.fresco:animated-webp:${frescoVersion}")
+ implementation("com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}")
}
}
- implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0")
-
if (hermesEnabled.toBoolean()) {
implementation("com.facebook.react:hermes-android")
} else {
implementation jscFlavor
}
}
-
-applyNativeModulesAppBuildGradle(project)
diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml
index 99e38fc5f8..3ec2507bab 100644
--- a/example/android/app/src/debug/AndroidManifest.xml
+++ b/example/android/app/src/debug/AndroidManifest.xml
@@ -3,5 +3,5 @@
-
+
diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml
index 25d43f9344..2e9f1dfc02 100644
--- a/example/android/app/src/main/AndroidManifest.xml
+++ b/example/android/app/src/main/AndroidManifest.xml
@@ -1,9 +1,9 @@
-
+
+
-
@@ -11,39 +11,17 @@
-
-
-
+
-
+
-
-
-
+
-
@@ -51,7 +29,6 @@
-
\ No newline at end of file
diff --git a/example/android/app/src/main/java/com/callstack/reactnativepaperexample/MainActivity.java b/example/android/app/src/main/java/com/callstack/reactnativepaperexample/MainActivity.java
deleted file mode 100644
index f8dd51b978..0000000000
--- a/example/android/app/src/main/java/com/callstack/reactnativepaperexample/MainActivity.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.callstack.reactnativepaperexample;
-
-import android.os.Build;
-import android.os.Bundle;
-
-import com.facebook.react.ReactActivity;
-import com.facebook.react.ReactActivityDelegate;
-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
-import com.facebook.react.defaults.DefaultReactActivityDelegate;
-
-import expo.modules.ReactActivityDelegateWrapper;
-
-public class MainActivity extends ReactActivity {
- /**
- * Align the back button behavior with Android S
- * where moving root activities to background instead of finishing activities.
- * @see onBackPressed
- */
- @Override
- public void invokeDefaultOnBackPressed() {
- if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) {
- if (!moveTaskToBack(false)) {
- // For non-root activities, use the default implementation to finish them.
- super.invokeDefaultOnBackPressed();
- }
- return;
- }
-
- // Use the default back button implementation on Android S
- // because it's doing more than {@link Activity#moveTaskToBack} in fact.
- super.invokeDefaultOnBackPressed();
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // Set the theme to AppTheme BEFORE onCreate to support
- // coloring the background, status bar, and navigation bar.
- // This is required for expo-splash-screen.
- setTheme(R.style.AppTheme);
- super.onCreate(null);
- }
-
- /**
- * Returns the name of the main component registered from JavaScript.
- * This is used to schedule rendering of the component.
- */
- @Override
- protected String getMainComponentName() {
- return "main";
- }
-
- /**
- * Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link
- * DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React
- * (aka React 18) with two boolean flags.
- */
- @Override
- protected ReactActivityDelegate createReactActivityDelegate() {
- return new ReactActivityDelegateWrapper(this, BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, new DefaultReactActivityDelegate(
- this,
- getMainComponentName(),
- // If you opted-in for the New Architecture, we enable the Fabric Renderer.
- DefaultNewArchitectureEntryPoint.getFabricEnabled()
- ));
- }
-}
diff --git a/example/android/app/src/main/java/com/callstack/reactnativepaperexample/MainActivity.kt b/example/android/app/src/main/java/com/callstack/reactnativepaperexample/MainActivity.kt
new file mode 100644
index 0000000000..9c5d6f5f65
--- /dev/null
+++ b/example/android/app/src/main/java/com/callstack/reactnativepaperexample/MainActivity.kt
@@ -0,0 +1,65 @@
+package com.callstack.reactnativepaperexample
+import expo.modules.splashscreen.SplashScreenManager
+
+import android.os.Build
+import android.os.Bundle
+
+import com.facebook.react.ReactActivity
+import com.facebook.react.ReactActivityDelegate
+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
+import com.facebook.react.defaults.DefaultReactActivityDelegate
+
+import expo.modules.ReactActivityDelegateWrapper
+
+class MainActivity : ReactActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ // Set the theme to AppTheme BEFORE onCreate to support
+ // coloring the background, status bar, and navigation bar.
+ // This is required for expo-splash-screen.
+ // setTheme(R.style.AppTheme);
+ // @generated begin expo-splashscreen - expo prebuild (DO NOT MODIFY) sync-f3ff59a738c56c9a6119210cb55f0b613eb8b6af
+ SplashScreenManager.registerOnActivity(this)
+ // @generated end expo-splashscreen
+ super.onCreate(null)
+ }
+
+ /**
+ * Returns the name of the main component registered from JavaScript. This is used to schedule
+ * rendering of the component.
+ */
+ override fun getMainComponentName(): String = "main"
+
+ /**
+ * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
+ * which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
+ */
+ override fun createReactActivityDelegate(): ReactActivityDelegate {
+ return ReactActivityDelegateWrapper(
+ this,
+ BuildConfig.IS_NEW_ARCHITECTURE_ENABLED,
+ object : DefaultReactActivityDelegate(
+ this,
+ mainComponentName,
+ fabricEnabled
+ ){})
+ }
+
+ /**
+ * Align the back button behavior with Android S
+ * where moving root activities to background instead of finishing activities.
+ * @see onBackPressed
+ */
+ override fun invokeDefaultOnBackPressed() {
+ if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) {
+ if (!moveTaskToBack(false)) {
+ // For non-root activities, use the default implementation to finish them.
+ super.invokeDefaultOnBackPressed()
+ }
+ return
+ }
+
+ // Use the default back button implementation on Android S
+ // because it's doing more than [Activity.moveTaskToBack] in fact.
+ super.invokeDefaultOnBackPressed()
+ }
+}
diff --git a/example/android/app/src/main/java/com/callstack/reactnativepaperexample/MainApplication.java b/example/android/app/src/main/java/com/callstack/reactnativepaperexample/MainApplication.java
deleted file mode 100644
index 52d98615ac..0000000000
--- a/example/android/app/src/main/java/com/callstack/reactnativepaperexample/MainApplication.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.callstack.reactnativepaperexample;
-
-import android.app.Application;
-import android.content.res.Configuration;
-import androidx.annotation.NonNull;
-
-import com.facebook.react.PackageList;
-import com.facebook.react.ReactApplication;
-import com.facebook.react.ReactNativeHost;
-import com.facebook.react.ReactPackage;
-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
-import com.facebook.react.defaults.DefaultReactNativeHost;
-import com.facebook.react.soloader.OpenSourceMergedSoMapping;
-import com.facebook.soloader.SoLoader;
-
-import expo.modules.ApplicationLifecycleDispatcher;
-import expo.modules.ReactNativeHostWrapper;
-
-import java.util.List;
-
-public class MainApplication extends Application implements ReactApplication {
-
- private final ReactNativeHost mReactNativeHost =
- new ReactNativeHostWrapper(this, new DefaultReactNativeHost(this) {
- @Override
- public boolean getUseDeveloperSupport() {
- return BuildConfig.DEBUG;
- }
-
- @Override
- protected List getPackages() {
- @SuppressWarnings("UnnecessaryLocalVariable")
- List packages = new PackageList(this).getPackages();
- // Packages that cannot be autolinked yet can be added manually here, for example:
- // packages.add(new MyReactNativePackage());
- return packages;
- }
-
- @Override
- protected String getJSMainModuleName() {
- return "index";
- }
-
- @Override
- protected boolean isNewArchEnabled() {
- return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
- }
-
- @Override
- protected Boolean isHermesEnabled() {
- return BuildConfig.IS_HERMES_ENABLED;
- }
- });
-
- @Override
- public ReactNativeHost getReactNativeHost() {
- return mReactNativeHost;
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- SoLoader.init(this, OpenSourceMergedSoMapping)
- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
- // If you opted-in for the New Architecture, we load the native entry point for this app.
- DefaultNewArchitectureEntryPoint.load();
- }
- ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
- ApplicationLifecycleDispatcher.onApplicationCreate(this);
- }
-
- @Override
- public void onConfigurationChanged(@NonNull Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig);
- }
-}
diff --git a/example/android/app/src/main/java/com/callstack/reactnativepaperexample/MainApplication.kt b/example/android/app/src/main/java/com/callstack/reactnativepaperexample/MainApplication.kt
new file mode 100644
index 0000000000..b6cd6d88a9
--- /dev/null
+++ b/example/android/app/src/main/java/com/callstack/reactnativepaperexample/MainApplication.kt
@@ -0,0 +1,57 @@
+package com.callstack.reactnativepaperexample
+
+import android.app.Application
+import android.content.res.Configuration
+
+import com.facebook.react.PackageList
+import com.facebook.react.ReactApplication
+import com.facebook.react.ReactNativeHost
+import com.facebook.react.ReactPackage
+import com.facebook.react.ReactHost
+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load
+import com.facebook.react.defaults.DefaultReactNativeHost
+import com.facebook.react.soloader.OpenSourceMergedSoMapping
+import com.facebook.soloader.SoLoader
+
+import expo.modules.ApplicationLifecycleDispatcher
+import expo.modules.ReactNativeHostWrapper
+
+class MainApplication : Application(), ReactApplication {
+
+ override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(
+ this,
+ object : DefaultReactNativeHost(this) {
+ override fun getPackages(): List {
+ val packages = PackageList(this).packages
+ // Packages that cannot be autolinked yet can be added manually here, for example:
+ // packages.add(new MyReactNativePackage());
+ return packages
+ }
+
+ override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry"
+
+ override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
+
+ override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
+ override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
+ }
+ )
+
+ override val reactHost: ReactHost
+ get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)
+
+ override fun onCreate() {
+ super.onCreate()
+ SoLoader.init(this, OpenSourceMergedSoMapping)
+ if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
+ // If you opted-in for the New Architecture, we load the native entry point for this app.
+ load()
+ }
+ ApplicationLifecycleDispatcher.onApplicationCreate(this)
+ }
+
+ override fun onConfigurationChanged(newConfig: Configuration) {
+ super.onConfigurationChanged(newConfig)
+ ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig)
+ }
+}
diff --git a/example/android/app/src/main/res/drawable-hdpi/splashscreen_image.png b/example/android/app/src/main/res/drawable-hdpi/splashscreen_image.png
deleted file mode 100644
index 39e72b656f..0000000000
Binary files a/example/android/app/src/main/res/drawable-hdpi/splashscreen_image.png and /dev/null differ
diff --git a/example/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/example/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png
new file mode 100644
index 0000000000..d2e4ebb523
Binary files /dev/null and b/example/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ
diff --git a/example/android/app/src/main/res/drawable-mdpi/splashscreen_image.png b/example/android/app/src/main/res/drawable-mdpi/splashscreen_image.png
deleted file mode 100644
index 39e72b656f..0000000000
Binary files a/example/android/app/src/main/res/drawable-mdpi/splashscreen_image.png and /dev/null differ
diff --git a/example/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/example/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png
new file mode 100644
index 0000000000..d2905ac97e
Binary files /dev/null and b/example/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ
diff --git a/example/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png b/example/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png
deleted file mode 100644
index 39e72b656f..0000000000
Binary files a/example/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png and /dev/null differ
diff --git a/example/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/example/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png
new file mode 100644
index 0000000000..c2d00af737
Binary files /dev/null and b/example/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ
diff --git a/example/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png b/example/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png
deleted file mode 100644
index 39e72b656f..0000000000
Binary files a/example/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png and /dev/null differ
diff --git a/example/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/example/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png
new file mode 100644
index 0000000000..7979a98391
Binary files /dev/null and b/example/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ
diff --git a/example/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png b/example/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png
deleted file mode 100644
index 39e72b656f..0000000000
Binary files a/example/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png and /dev/null differ
diff --git a/example/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/example/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png
new file mode 100644
index 0000000000..e8d6a6af53
Binary files /dev/null and b/example/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ
diff --git a/example/android/app/src/main/res/drawable/splashscreen.xml b/example/android/app/src/main/res/drawable/ic_launcher_background.xml
similarity index 59%
rename from example/android/app/src/main/res/drawable/splashscreen.xml
rename to example/android/app/src/main/res/drawable/ic_launcher_background.xml
index c8568e1622..883b2a080f 100644
--- a/example/android/app/src/main/res/drawable/splashscreen.xml
+++ b/example/android/app/src/main/res/drawable/ic_launcher_background.xml
@@ -1,3 +1,6 @@
+ -
+
+
\ No newline at end of file
diff --git a/example/android/app/src/main/res/drawable/rn_edit_text_material.xml b/example/android/app/src/main/res/drawable/rn_edit_text_material.xml
index f35d996202..5c25e728ea 100644
--- a/example/android/app/src/main/res/drawable/rn_edit_text_material.xml
+++ b/example/android/app/src/main/res/drawable/rn_edit_text_material.xml
@@ -17,10 +17,11 @@
android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
android:insetTop="@dimen/abc_edit_text_inset_top_material"
- android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
+ android:insetBottom="@dimen/abc_edit_text_inset_bottom_material"
+ >
-