Code Monkey home page Code Monkey logo

react-native-bootsplash's Introduction

🚀 react-native-bootsplash

Show a splash screen during app startup. Hide it when you are ready.
For migration from the v4, check the MIGRATION.md guide.

mit licence npm version npm downloads
platform - android platform - ios

Demo Demo

Support

This library follows the React Native releases support policy.
It is supporting the latest version, and the two previous minor series.

Installation

$ npm install --save react-native-bootsplash
# --- or ---
$ yarn add react-native-bootsplash

⚠️  Don't forget going into the ios directory to execute a pod install.

🆘 Manual linking

Because this package targets recent React Native versions, you probably don't need to link it manually. But if you have a special case, follow these additional instructions:

👀 See manual linking instructions

iOS

Add this line to your ios/Podfile file, then run pod install.

target 'YourAwesomeProject' do
  #
  pod 'RNBootSplash', :path => '../node_modules/react-native-bootsplash'
end

Android

  1. Add the following lines to android/settings.gradle:
include ':react-native-bootsplash'
project(':react-native-bootsplash').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-bootsplash/android')
  1. Add the implementation line to the dependencies in android/app/build.gradle:
dependencies {
  // ...
  implementation project(':react-native-bootsplash')
}
  1. Add the import and link the package in MainApplication.java:
import com.zoontek.rnbootsplash.RNBootSplashPackage; // ⬅️ add the RNBootSplashPackage import

public class MainApplication extends Application implements ReactApplication {

  // …

  @Override
  protected List<ReactPackage> getPackages() {
    @SuppressWarnings("UnnecessaryLocalVariable")
    List<ReactPackage> packages = new PackageList(this).getPackages();
    // …
    packages.add(new RNBootSplashPackage());
    return packages;
  }

  // …
}

Setup

Assets generation

In order to speed up the setup, we provide a CLI to generate assets, create the Android Drawable XML file and the iOS Storyboard file automatically ✨.

$ npx react-native generate-bootsplash --help
# --- or ---
$ yarn react-native generate-bootsplash --help

The command can take multiple arguments:

Usage: react-native generate-bootsplash [options] <logo>

Generate a launch screen using a logo file path (PNG or SVG)

Options:
  --platforms <list>          Platforms to generate for, separated by a comma (default: "android,ios,web")
  --background <string>       Background color (in hexadecimal format) (default: "#fff")
  --logo-width <number>       Logo width at @1x (in dp - we recommend approximately ~100) (default: 100)
  --assets-output <string>    Assets output directory path
  --flavor <string>           Android flavor build variant (where your resource directory is) (default: "main")
  --html <string>             HTML template file path (your web app entry point) (default: "index.html")
  --license-key <string>      License key to enable brand and dark mode assets generation
  --brand <string>            Brand file path (PNG or SVG)
  --brand-width <number>      Brand width at @1x (in dp - we recommend approximately ~80) (default: 80)
  --dark-background <string>  [dark mode] Background color (in hexadecimal format)
  --dark-logo <string>        [dark mode] Logo file path (PNG or SVG)
  --dark-brand <string>       [dark mode] Brand file path (PNG or SVG)
  -h, --help                  display help for command

💪 Unlock the CLI full potential

In order to use the --brand, --brand-width and --dark-* options, you must specify a --license-key.

With it, the generator is able to output over 50 files (logo and brand images generated in all pixel densities, dark mode versions, etc.), saving you (and your company!) a massive amount of time not only at creation, but also at each adjustment ⏱️

📍 This license key grants unlimited and unrestricted usage of the generator for the buyer's purposes (meaning you can execute the assets generation as much as you want).

Gumroad button

Full command usage example

# Without license key
yarn react-native generate-bootsplash svgs/light_logo.svg \
  --platforms=android,ios,web \
  --background=F5FCFF \
  --logo-width=100 \
  --assets-output=assets \
  --flavor=main \
  --html=index.html

# With license key 🔑
yarn react-native generate-bootsplash svgs/light_logo.svg \
  --platforms=android,ios,web \
  --background=F5FCFF \
  --logo-width=100 \
  --assets-output=assets \
  --flavor=main \
  --html=index.html \
  --license-key=xxxxx \
  --brand=svgs/light_brand.svg \
  --brand-width=80 \
  --dark-background=00090A \
  --dark-logo=svgs/dark_logo.svg \
  --dark-brand=svgs/dark_brand.svg

This tool relies on the naming conventions that are used in the /example project and will therefore create the following files:

# Without license key
android/app/src/main/res/values/colors.xml
android/app/src/main/res/drawable-hdpi/bootsplash_logo.png
android/app/src/main/res/drawable-mdpi/bootsplash_logo.png
android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png
android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png
android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png

ios/RNBootSplashExample/BootSplash.storyboard
ios/RNBootSplashExample.xcodeproj/project.pbxproj
ios/RNBootSplashExample/Info.plist
ios/RNBootSplashExample/Images.xcassets/BootSplashLogo.imageset/Contents.json
ios/RNBootSplashExample/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo-<hash>.png
ios/RNBootSplashExample/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo-<hash>@2x.png
ios/RNBootSplashExample/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo-<hash>@3x.png

index.html

# Only if --assets-output was specified
assets/bootsplash_manifest.json
assets/bootsplash_logo.png
assets/bootsplash_logo@1,5x.png
assets/[email protected]
assets/[email protected]
assets/[email protected]

# + Over 40 files with license key 🔑 (brand images, dark mode versions…)

iOS

ℹ️ For react-native < 0.71 setup, follow the v4.4.0 README.md.


Edit the ios/YourProjectName/AppDelegate.mm file:

#import "AppDelegate.h"
#import "RNBootSplash.h" // ⬅️ add the header import

//

@implementation AppDelegate

//

// ⬇️ Add this before file @end (for react-native 0.74+)
- (void)customizeRootView:(RCTRootView *)rootView {
  [RNBootSplash initWithStoryboard:@"BootSplash" rootView:rootView]; // ⬅️ initialize the splash screen
}

// OR

// ⬇️ Add this before file @end (for react-native < 0.74)
- (UIView *)createRootViewWithBridge:(RCTBridge *)bridge
                          moduleName:(NSString *)moduleName
                           initProps:(NSDictionary *)initProps {
  UIView *rootView = [super createRootViewWithBridge:bridge moduleName:moduleName initProps:initProps];
  [RNBootSplash initWithStoryboard:@"BootSplash" rootView:rootView]; // ⬅️ initialize the splash screen
  return rootView;
}

@end

Android

  1. Edit your android/app/src/main/res/values/styles.xml file:
<resources>

  <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
      <!-- Your base theme customization -->
  </style>

  <!-- BootTheme should inherit from Theme.BootSplash or Theme.BootSplash.EdgeToEdge -->
  <style name="BootTheme" parent="Theme.BootSplash">
    <item name="bootSplashBackground">@color/bootsplash_background</item>
    <item name="bootSplashLogo">@drawable/bootsplash_logo</item>
    <item name="bootSplashBrand">@drawable/bootsplash_brand</item> <!-- Only if you have a brand image -->
    <item name="postBootSplashTheme">@style/AppTheme</item>
  </style>

</resources>
  1. Edit your android/app/src/main/AndroidManifest.xml file:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

  <!---->

  <application
    android:name=".MainApplication"
    android:label="@string/app_name"
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:allowBackup="false"
    android:theme="@style/AppTheme"> <!-- Apply @style/AppTheme on .MainApplication -->
    <activity
      android:name=".MainActivity"
      android:label="@string/app_name"
      android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
      android:launchMode="singleTask"
      android:windowSoftInputMode="adjustResize"
      android:exported="true"
      android:theme="@style/BootTheme"> <!-- Apply @style/BootTheme on .MainActivity -->
      <!---->
    </activity>
  </application>
</manifest>
  1. Finally edit your android/app/src/main/java/com/yourprojectname/MainActivity.{java,kt} file:
// Java (react-native < 0.73)
// …

// add these required imports:
import android.os.Bundle;
import com.zoontek.rnbootsplash.RNBootSplash;

public class MainActivity extends ReactActivity {

  // …

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    RNBootSplash.init(this, R.style.BootTheme); // ⬅️ initialize the splash screen
    super.onCreate(savedInstanceState); // super.onCreate(null) with react-native-screens
  }
}
// Kotlin (react-native >= 0.73)
//

// add these required imports:
import android.os.Bundle
import com.zoontek.rnbootsplash.RNBootSplash

class MainActivity : ReactActivity() {

  //

  override fun onCreate(savedInstanceState: Bundle?) {
    RNBootSplash.init(this, R.style.BootTheme) // ⬅️ initialize the splash screen
    super.onCreate(savedInstanceState) // super.onCreate(null) with react-native-screens
  }
}

API

hide()

Hide the splash screen (immediately, or with a fade out).

Method type

type hide = (config?: { fade?: boolean }) => Promise<void>;

Usage

import { useEffect } from "react";
import { Text } from "react-native";
import BootSplash from "react-native-bootsplash";

const App = () => {
  useEffect(() => {
    const init = async () => {
      // …do multiple sync or async tasks
    };

    init().finally(async () => {
      await BootSplash.hide({ fade: true });
      console.log("BootSplash has been hidden successfully");
    });
  }, []);

  return <Text>My awesome app</Text>;
};

isVisible()

Return the current visibility status of the native splash screen.

Method type

type isVisible = () => Promise<boolean>;

Usage

import BootSplash from "react-native-bootsplash";

BootSplash.isVisible().then((value) => console.log(value));

useHideAnimation()

A hook to easily creation a hide custom hide animation, by animating all splash screen elements using Animated, react-native-reanimated or else (similar as the video on top of this documentation).
To use it, don't forget to set the --assets-output option of the generator as it requires the manifest and assets images files.

Method type

type useHideAnimation = (config: {
  manifest: Manifest; // the manifest file is generated when --assets-output is specified

  // the required generated assets
  logo?: ImageRequireSource;
  darkLogo?: ImageRequireSource;
  brand?: ImageRequireSource;
  darkBrand?: ImageRequireSource;

  // specify if you are using translucent status / navigation bars
  // in order to avoid a shift between the native and JS splash screen
  statusBarTranslucent?: boolean;
  navigationBarTranslucent?: boolean;

  animate: () => void;
}) => {
  container: ViewProps;
  logo: ImageProps;
  brand: ImageProps;
};

Usage

import { useState } from "react";
import { Animated, Image } from "react-native";
import BootSplash from "react-native-bootsplash";

type Props = {
  onAnimationEnd: () => void;
};

const AnimatedBootSplash = ({ onAnimationEnd }: Props) => {
  const [opacity] = useState(() => new Animated.Value(1));

  const { container, logo /*, brand */ } = BootSplash.useHideAnimation({
    manifest: require("../assets/bootsplash_manifest.json"),

    logo: require("../assets/bootsplash_logo.png"),
    // darkLogo: require("../assets/bootsplash_dark_logo.png"),
    // brand: require("../assets/bootsplash_brand.png"),
    // darkBrand: require("../assets/bootsplash_dark_brand.png"),

    statusBarTranslucent: true,
    navigationBarTranslucent: false,

    animate: () => {
      // Perform animations and call onAnimationEnd
      Animated.timing(opacity, {
        useNativeDriver: true,
        toValue: 0,
        duration: 500,
      }).start(() => {
        onAnimationEnd();
      });
    },
  });

  return (
    <Animated.View {...container} style={[container.style, { opacity }]}>
      <Image {...logo} />
      {/* <Image {...brand} /> */}
    </Animated.View>
  );
};

const App = () => {
  const [visible, setVisible] = useState(true);

  return (
    <View style={{ flex: 1 }}>
      {/* content */}

      {visible && (
        <AnimatedBootSplash
          onAnimationEnd={() => {
            setVisible(false);
          }}
        />
      )}
    </View>
  );
};

This example is simple for documentation purpose (we only animate the container).
🤙 A more complex example is available in the /example folder.

FAQ

How should I use it with React Navigation?

If you are using React Navigation, you can hide the splash screen once the navigation container and all children have finished mounting by using the onReady function.

import { NavigationContainer } from "@react-navigation/native";
import BootSplash from "react-native-bootsplash";

const App = () => (
  <NavigationContainer
    onReady={() => {
      BootSplash.hide();
    }}
  >
    {/* content */}
  </NavigationContainer>
);

How can I mock the module in my tests?

Testing code which uses this library requires some setup since we need to mock the native methods.

To add the mocks, create a file jest/setup.js (or any other file name) containing the following code:

jest.mock("react-native-bootsplash", () => {
  return {
    hide: jest.fn().mockResolvedValue(),
    isVisible: jest.fn().mockResolvedValue(false),
    useHideAnimation: jest.fn().mockReturnValue({
      container: {},
      logo: { source: 0 },
      brand: { source: 0 },
    }),
  };
});

After that, we need to add the setup file in the jest config. You can add it under setupFiles option in your jest config file:

{
  "setupFiles": ["<rootDir>/jest/setup.js"]
}

Why are both light and dark assets inlined in my index.html?

For the sake of simplicity. Since the light and dark versions of your assets are likely identical (except for the colors), if your index.html file is compressed with gzip, the size difference will be negligible.

How can I make my splash screen status bar transparent?

Edit your values/styles.xml to set android:statusBarColor and android:windowLightStatusBar values:

- <resources>
+ <resources xmlns:tools="http://schemas.android.com/tools">

  <style name="BootTheme" parent="Theme.BootSplash">
    <!-- … -->

+   <!-- Apply color + style to the status bar (true = dark-content, false = light-content) -->
+   <item name="android:statusBarColor" tools:targetApi="m">@color/bootsplash_background</item>
+   <item name="android:windowLightStatusBar" tools:targetApi="m">true</item>
  </style>

How can I apply edge-to-edge layout to my splash screen?

Edit your values/styles.xml file to use Theme.BootSplash.EdgeToEdge instead of Theme.BootSplash:

- <style name="BootTheme" parent="Theme.BootSplash">
+ <style name="BootTheme" parent="Theme.BootSplash.EdgeToEdge">

Sponsors

This module is provided as is, I work on it in my free time.

If you or your company uses it in a production app, consider sponsoring this project 💰. You also can contact me for premium enterprise support: help with issues, prioritize bugfixes, feature requests, etc.

Sponsors list

react-native-bootsplash's People

Contributors

738 avatar aaronwitter avatar ajaykumar97 avatar andresesfm avatar arnaudambro avatar azimat avatar bardiamist avatar bloodyowl avatar cabelin avatar cawfree avatar ddikodroid avatar dependabot[bot] avatar dimatretyak avatar elliotdickison avatar fan avatar isair avatar jdmathew avatar mikehardy avatar mokhajavi75 avatar moox avatar naturalclar avatar nidelson avatar protino avatar rhdeck avatar sharplet avatar slavikdenis avatar spencercarli avatar srmagura avatar vikrantnegi avatar zoontek avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

react-native-bootsplash's Issues

How to stretch pictures to full screen according to screen size

💻 My environment

  • react-native-bootsplash version:1.2.1
  • react-native version:0.61.5
  • Platform: ios / android / both android
  • OS version: 8.0
  • Device: brand + model
  • Simulator: yes
  • Android Studio version: 3.5.3
  • Android buildToolsVersion: ?
  • Xcode version: ?

🕵️‍♂️ Reproducing the issue

I want to spread a large picture over the whole screen, but the picture is beyond the scope of the screen, without width and height scaling.

Splash screen from @drawable/launch_screen

💻 My environment

  • react-native-bootsplash version: 0.1.1
  • react-native version: 0.60.5

In the example of the boot screen, you've used the icon from @mipmap/ic_launcher. But often icon and splash are different. What is the proper way to setup splash screen with images from @drawable/launch_screen?
Is that correct?

    <item android:gravity="center">
        <bitmap android:src="@drawable/launch_screen" />
    </item>

The images from @drawable/launch_screen are in the folders drawable-hdpi, drawable-mdpi, drawable-mdpi etc.
image

This works for the first app launch, but when I click "Reload" in the emulator, a white screen appears without an image.

android.content.res.Resources$NotFoundException: Drawable org.package:drawable/bootsplash

💻 My environment

  • react-native-bootsplash version: 0.1.1
  • react-native version: 0.60.4
  • Platform: android
  • OS version: 10
  • Simulator: yes

🕵️‍♂️ Reproducing the issue

Trying to set up the module I obtain this error (found through logcat, the app won't even startup, it crash at the opening)
image
But I do have the bootsplash.xml placed in the correct folder... what could it be?

And commenting this line in MainActivity.java:
RNBootSplash.show(R.drawable.bootsplash, MainActivity.this);

The app starts up but there is a white screen as splash.

PS: on ios it's working great

Crash on android 10

💻 My environment

  • react-native-bootsplash version: 1.0.3
  • react-native version: 0.61.5
  • Platform: android
  • OS version: 10
  • Device: emulator
  • Simulator: yes
  • Android buildToolsVersion: 28

🕵️‍♂️ Reproducing the issue

Crashed on startup

java.lang.RuntimeException: Unable to start activity ComponentInfo{co.inskate/com.zoontek.rnbootsplash.RNBootSplashActivity}: android.content.res.Resources$NotFoundException: Drawable co.inskate:drawable/bootsplash with resource ID #0x7f07005e

Due to

Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #6: tag requires a 'drawable' attribute or child tag defining a drawable

🤞Solution

In you readme we created


<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
  <!-- the background color. it can be a system color or a custom one defined in colors.xml -->
  <item android:drawable="@android:color/white" />

  <item>
    <!-- the app logo, centered horizontally and vertically -->
    <bitmap
      android:src="@mipmap/ic_launcher"
      android:gravity="center" />
  </item>
</layer-list>

but must be something like

  <item  android:drawable="@android:color/white">
    <!-- the app logo, centered horizontally and vertically -->
    <bitmap
      android:src="@mipmap/ic_launcher"
      android:gravity="center" />
  </item>

Thank you for your work.

Error: cannot find symbol RNBootSplash.show(R.drawable.bootsplash, MainActivity.this);

💻 My environment

  • react-native-bootsplash version: 1.0.3
  • react-native version: 0.61.5
  • Platform: android

🕵️‍♂️ Reproducing the issue

I install react-native-bootsplash using automatic linking of RN 0.61.5.

MainActivity.java

package com.xxx.xxx;

import android.os.Bundle;
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactRootView;
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
import com.zoontek.rnbootsplash.RNBootSplash;

public class MainActivity extends ReactActivity {

    /**
     * Returns the name of the main component registered from JavaScript. This is
     * used to schedule rendering of the component.
     */
    @Override
    protected String getMainComponentName() {
        return "AvailproMobile";
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        RNBootSplash.show(R.drawable.bootsplash, MainActivity.this);
    }

    @Override
    protected ReactActivityDelegate createReactActivityDelegate() {
        return new ReactActivityDelegate(this, getMainComponentName()) {
            @Override
            protected ReactRootView createRootView() {
                return new RNGestureHandlerEnabledRootView(MainActivity.this);
            }
        };
    }
}

The build failed with the following exception:

> Task :app:compileDebugJavaWithJavac FAILED
/Users/nicolas/Development/Git/availpro.mobile/android/app/src/main/java/com/dedge/CentralInventory/MainActivity.java:24: error: cannot find symbol
        RNBootSplash.show(R.drawable.bootsplash, MainActivity.this);
                                    ^
  symbol:   variable bootsplash
  location: class drawable
1 error

FAILURE: Build failed with an exception.

I tried to link the package with react-native link react-native-bootsplash, the command succeed but the exception doesn't disappear.

Any suggestion of the cause?

Thank you!

Question about RNBootSplashActivity

💻 My environment

  • react-native-bootsplash version: 1.2.1
  • react-native version: 0.61.5
  • Platform: android
  • OS version: Catalina
  • Device: S10+
  • Simulator: no
  • Android Studio version: -
  • Android buildToolsVersion: -
  • Xcode version: -

🕵️‍♂️ Question

I’m wondering what’s the purpose of RNBootSplashActivity? I tried without it, and the splash screen still appeared immediately.

Android staging build splash screen did not disappear

💻 My environment

  • react-native-bootsplash version: 0.1.1
  • react-native version: 0.60.4
  • Platform: android
  • OS version: 9
  • Device: Pixel 1
  • Simulator: Simulator work
  • Android Studio version: 3.4.1
  • Android buildToolsVersion: 28.0.3
  • Xcode version: iOS work

🕵️‍♂️ Reproducing the issue

app/android/build.gradle

android {
    compileSdkVersion rootProject.ext.compileSdkVersion

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultConfig {
        applicationId "MY_APPLICATION_ID"
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 182
        versionName "2.0.0"
        multiDexEnabled true
        ndk {
            abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
        }
        vectorDrawables.useSupportLibrary = true
    }
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
        }
    }
    signingConfigs {
        debug {
            storeFile file('debug.keystore')
            storePassword '123123123'
            keyAlias 'debug'
            keyPassword '123123123'
        }
        release {
            if (project.hasProperty('APP_RELEASE_STORE_FILE')) {
                storeFile file(APP_RELEASE_STORE_FILE)
                storePassword APP_RELEASE_STORE_PASSWORD
                keyAlias APP_RELEASE_KEY_ALIAS
                keyPassword APP_RELEASE_KEY_PASSWORD
            }
        }
    }
     buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }
       // Add Build type staging
        staging { 
            applicationIdSuffix ".staging"
            matchingFallbacks = ['release']
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            signingConfig signingConfigs.release
        }
        release {
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            signingConfig signingConfigs.release
        }
    }
    // 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.htmlhttp://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
            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 =
                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            }
        }
    }

    packagingOptions {
        pickFirst '**/armeabi-v7a/libc++_shared.so'
        pickFirst '**/x86/libc++_shared.so'
        pickFirst '**/arm64-v8a/libc++_shared.so'
        pickFirst '**/x86_64/libc++_shared.so'
        pickFirst '**/x86/libjsc.so'
        pickFirst '**/armeabi-v7a/libjsc.so'
    }
}

Then build the staging build using Android Studio. After that, install the api in real device.

Expected behaviour:

Boot splash screen disappear and show my app main screen.

Actually happens:

The boot splash did not disappear after long waiting time.

Here are the log from Logcat:

2019-08-13 17:10:10.967 878-913/? W/BroadcastQueue: Background execution not allowed: receiving Intent { act=com.google.android.systemui.OPA_ENABLED flg=0x10000010 (has extras) } to com.google.android.apps.nexuslauncher/.qsb.OPAStatusReceiver
2019-08-13 17:10:23.650 32658-32658/? E/mberapp.stagin: Not starting debugger since process cannot load the jdwp agent.
2019-08-13 17:10:23.767 32658-32658/? W/com.facebook.UserSettingsManager: Please set a value for AutoLogAppEventsEnabled. Set the flag to TRUE if you want to collect app install, app launch and in-app purchase events automatically. To request user consent before collecting data, set the flag value to FALSE, then change to TRUE once user consent is received. Learn more: https://developers.facebook.com/docs/app-events/getting-started-app-events-android#disable-auto-events.
2019-08-13 17:10:23.767 32658-32658/? W/com.facebook.UserSettingsManager: You haven't set a value for AdvertiserIDCollectionEnabled. Set the flag to TRUE if you want to collect Advertiser ID for better advertising and analytics results. To request user consent before collecting data, set the flag value to FALSE, then change to TRUE once user consent is received. Learn more: https://developers.facebook.com/docs/app-events/getting-started-app-events-android#disable-auto-events.
2019-08-13 17:10:23.865 32658-32658/? W/System.err: java.lang.ClassNotFoundException: MY_APPLICATION_ID.staging.MainActivity
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at java.lang.Class.classForName(Native Method)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at java.lang.Class.forName(Class.java:453)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at java.lang.Class.forName(Class.java:378)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at com.zoontek.rnbootsplash.RNBootSplashActivity.onCreate(RNBootSplashActivity.java:15)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at android.app.Activity.performCreate(Activity.java:7144)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at android.app.Activity.performCreate(Activity.java:7135)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2931)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:106)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at android.os.Looper.loop(Looper.java:193)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6718)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
2019-08-13 17:10:23.865 32658-32658/? W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
2019-08-13 17:10:23.866 32658-32658/? W/System.err: Caused by: java.lang.ClassNotFoundException: Didn't find class "MY_APPLICATION_ID.staging.MainActivity" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/MY_APPLICATION_ID.staging-gadIS1fm0tvapmwDqwGyiA==/base.apk"],nativeLibraryDirectories=[/data/app/MY_APPLICATION_ID.staging-gadIS1fm0tvapmwDqwGyiA==/lib/arm64, /data/app/MY_APPLICATION_ID.staging-gadIS1fm0tvapmwDqwGyiA==/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
2019-08-13 17:10:23.866 32658-32658/? W/System.err:     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
2019-08-13 17:10:23.866 32658-32658/? W/System.err:     at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
2019-08-13 17:10:23.866 32658-32658/? W/System.err:     at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
2019-08-13 17:10:23.866 32658-32658/? W/System.err: 	... 19 more
2019-08-13 17:10:24.169 491-595/? W/SurfaceFlinger: Attempting to set client state on removed layer: Splash Screen MY_APPLICATION_ID.staging#0
2019-08-13 17:10:24.170 491-595/? W/SurfaceFlinger: Attempting to destroy on removed layer: Splash Screen MY_APPLICATION_ID.staging#0
2019-08-13 17:10:24.378 32507-32567/? W/SearchServiceCore: Abort, client detached.

I noted that this line will return MY_APPLICATION_ID.staging.MainActivity, which is not existed in the source code. The source code only have MY_APPLICATION_ID.MainActivity.java file.

So my concern is this is expected behaviour? This lib does not support multiple build type? If it is expected behaviour, any workaround to make it work?

Last time I use react-native-splash-screen lib, it works well for both staging and release builds.

Thank you.

A method to show the splash screen again

💻 My environment

  • react-native-bootsplash version: 1.2.1
  • react-native version: 0.61.5
  • Platform: both
  • OS version: ? mac 10.14
  • Device: Macbook pro 13
  • Simulator: yes

Thanks for the library.

Currently, there seems to be no method to show the splash screen again. For example, react-native-splash screen has the .show() method.

Is there any plans to implement such method?

No known class method for selector 'show:'

💻 My environment

  • react-native-bootsplash version: 1.2.1
  • react-native version: 0.61.2
  • Platform: ios
  • OS version: 13
  • Device: brand + model: NA
  • Simulator: yes
  • Android Studio version: NA
  • Android buildToolsVersion: NA
  • Xcode version: 11.3

🕵️‍♂️ Reproducing the issue

Build fails. Followed installation instructions and got the error No known class method for selector 'show:' on the line where I call RNBootSplash in Xcode, any clues on how to resolve?

LinearGradient support

Does this package support the ability to set a background with LinearGradient in both Android and iOS? If so, how?

Issue with React Native Firebase.

💻 My environment

"dependencies": {
    "react": "16.8.6",
    "react-native": "0.60.5",
    "react-native-bootsplash": "^1.0.0",
    "react-native-firebase": "^5.5.6",
    "react-native-gesture-handler": "^1.4.1",
    "react-native-reanimated": "^1.2.0",
    "react-navigation": "^3.12.0"
  },
  • Platform: android
  • OS version: 8.1
  • Device: All
  • Simulator: no
  • Android buildToolsVersion: 3.4.1

🕵️‍♂️ Reproducing the issue

I have used React native firebase for push notifications. When I have opened the app and if I am getting a push notification, I can get the _body & title details in the .onNotification() callback of firebase.

But, in this callback function .onNotificationOpened(), _body & title are null, please check below screenshot.

image

🤞Solution

I think its because of the bootsplash, I am getting that error. So please give me a solution.

`view.setBackgroundResource(drawableResId)` cause oom on android with large image

i have a 132KB png image as splash screen, and app crash on launch with the following error message:

   java.lang.OutOfMemoryError: Failed to allocate a 144072012 byte allocation with 2234122 free bytes and 92MB until OOM
        at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
        at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
        at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
        at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:467)
        at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:497)
        at android.graphics.drawable.BitmapDrawable.updateStateFromTypedArray(BitmapDrawable.java:762)
        at android.graphics.drawable.BitmapDrawable.inflate(BitmapDrawable.java:724)
        at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1215)
        at android.graphics.drawable.LayerDrawable.inflateLayers(LayerDrawable.java:254)
        at android.graphics.drawable.LayerDrawable.inflate(LayerDrawable.java:164)
        at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1215)
        at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1124)
        at android.content.res.Resources.loadDrawableForCookie(Resources.java:2630)
        at android.content.res.Resources.loadDrawable(Resources.java:2540)
        at android.content.res.Resources.getDrawable(Resources.java:806)
        at android.content.Context.getDrawable(Context.java:458)
        at android.view.View.setBackgroundResource(View.java:17202)
        at com.zoontek.rnbootsplash.RNBootSplash$1.run(RNBootSplash.java:25)
        at android.app.Activity.runOnUiThread(Activity.java:5511)
        at com.zoontek.rnbootsplash.RNBootSplash.show(RNBootSplash.java:17)
        at com.kjkdoctor.MainActivity.onCreate(MainActivity.java:49)
        at android.app.Activity.performCreate(Activity.java:6237)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

source code error line:

💻 My environment

System:
    OS: macOS Mojave 10.14.6
    CPU: (12) x64 Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
    Memory: 22.91 MB / 16.00 GB
    Shell: 5.3 - /bin/zsh
  Binaries:
    Node: 11.15.0 - /usr/local/bin/node
    Yarn: 1.19.1 - ~/.yarn/bin/yarn
    npm: 6.7.0 - /usr/local/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  SDKs:
    iOS SDK:
      Platforms: iOS 13.2, DriverKit 19.0, macOS 10.15, tvOS 13.2, watchOS 6.1
    Android SDK:
      API Levels: 21, 23, 26, 27, 28
      Build Tools: 23.0.1, 26.0.1, 28.0.3, 29.0.2
  IDEs:
    Android Studio: 3.5 AI-191.8026.42.35.6010548
    Xcode: 11.3/11C29 - /usr/bin/xcodebuild
  npmPackages:
    react: 16.9.0 => 16.9.0
    react-native: 0.61.5 => 0.61.5
  • react-native-bootsplash version: 1.0.3
  • OS version: android 6.0
  • Simulator: yes

🕵️‍♂️ Reproducing the issue

Explain what you did, what you expected to happen, and what actually happens.
Provide some code or screenshots if needed.

🤞Solution

temporary solution:
https://stackoverflow.com/questions/14096061/android-setbackgroundresource-cause-out-of-memory-excepiton

Execution failed for task ':app:transformClassesWithMultidexlistForDebug'

💻 My environment

react-native info

System:
    OS: macOS 10.14.6
    CPU: (4) x64 Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
    Memory: 476.77 MB / 16.00 GB
    Shell: 5.3 - /bin/zsh
  Binaries:
    Node: 10.16.1 - /usr/local/bin/node
    npm: 6.13.4 - ~/.npm-global/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  SDKs:
    iOS SDK:
      Platforms: iOS 12.4, macOS 10.14, tvOS 12.4, watchOS 5.3
  IDEs:
    Android Studio: 3.5 AI-191.8026.42.35.6010548
    Xcode: 10.3/10G8 - /usr/bin/xcodebuild
  npmPackages:
    @react-native-community/cli: ^3.0.4 => 3.0.4
    react: 16.8.6 => 16.8.6
    react-native: 0.60.4 => 0.60.4

react-native-bootsplash

"react-native-bootsplash": "^1.2.1"

🕵️‍♂️ Reproducing the issue

I have installed react-native-bootsplash and followed exactly all the information in the README!
However, I have a problem, when I try to compile my project, since I installed the package I get an error: Error while merging dex archives

This is my error:

> Task :app:transformClassesWithMultidexlistForDebug FAILED

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.4.1/userguide/command_line_interface.html#sec:command_line_warnings
345 actionable tasks: 4 executed, 341 up-to-date
D8: Program type already present: io.sentry.ArrayUtil$1

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithMultidexlistForDebug'.
> com.android.build.api.transform.TransformException: Error while generating the main dex list:
  Error while merging dex archives:
  Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
  Program type already present: io.sentry.ArrayUtil$1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 13s

error Failed to install the app. Make sure you have the Android development environment set up: https://facebook.github.io/react-native/docs/getting-started.html#android-development-environment. Run CLI with --verbose flag for more details.
Error: Command failed: ./gradlew app:installDebug -PreactNativeDevServerPort=8081
D8: Program type already present: io.sentry.ArrayUtil$1

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithMultidexlistForDebug'.
> com.android.build.api.transform.TransformException: Error while generating the main dex list:
  Error while merging dex archives:
  Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
  Program type already present: io.sentry.ArrayUtil$1

I tried to use a command I could see on the internet to get the stacktrace and try to find the error but after reading it many times, I can't see where the error comes from, maybe I missed something?

the command is: ./gradlew installDebug --stacktrace
and this is the result: (sorry it's very verbose)

* What went wrong:
Execution failed for task ':app:transformClassesWithMultidexlistForDebug'.
> com.android.build.api.transform.TransformException: Error while generating the main dex list:
  Error while merging dex archives:
  Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
  Program type already present: io.sentry.ArrayUtil$1

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithMultidexlistForDebug'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:151)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:148)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:191)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:141)
        at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionStateTaskExecuter.execute(ResolveBeforeExecutionStateTaskExecuter.java:75)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:108)
        at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionOutputsTaskExecuter.execute(ResolveBeforeExecutionOutputsTaskExecuter.java:67)
        at org.gradle.api.internal.tasks.execution.ResolveAfterPreviousExecutionStateTaskExecuter.execute(ResolveAfterPreviousExecutionStateTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:94)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:49)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:49)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
        at org.gradle.execution.plan.DefaultPlanExecutor.process(DefaultPlanExecutor.java:74)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.executeWithServices(DefaultTaskExecutionGraph.java:178)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.execute(DefaultTaskExecutionGraph.java:154)
        at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:41)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:40)
        at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:24)
        at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:46)
        at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:49)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:40)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:33)
        at org.gradle.initialization.DefaultGradleLauncher$ExecuteTasks.run(DefaultGradleLauncher.java:383)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.initialization.DefaultGradleLauncher.runTasks(DefaultGradleLauncher.java:247)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:159)
        at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:134)
        at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:58)
        at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:55)
        at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:82)
        at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:75)
        at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:183)
        at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
        at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:75)
        at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:55)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:58)
        at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
        at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:51)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:45)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:49)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:46)
        at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:78)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:46)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
        at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42)
        at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28)
        at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
        at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:52)
        at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:59)
        at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:36)
        at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68)
        at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38)
        at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37)
        at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26)
        at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
        at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
        at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60)
        at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32)
        at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
        at org.gradle.util.Swapper.swap(Swapper.java:38)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:81)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
        at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:295)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.RuntimeException: com.android.build.api.transform.TransformException: Error while generating the main dex list:
Error while merging dex archives:
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: io.sentry.ArrayUtil$1
        at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55)
        at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104)
        at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:103)
        at org.gradle.api.internal.project.taskfactory.IncrementalTaskInputsTaskAction.doExecute(IncrementalTaskInputsTaskAction.java:46)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:41)
        at org.gradle.api.internal.project.taskfactory.AbstractIncrementalTaskAction.execute(AbstractIncrementalTaskAction.java:25)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$5.run(ExecuteActionsTaskExecuter.java:404)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:393)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:376)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:80)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:213)
        at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$0(ExecuteStep.java:32)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:32)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
        at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:58)
        at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:35)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:33)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:39)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
        at org.gradle.internal.execution.steps.CatchExceptionStep.execute(CatchExceptionStep.java:35)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
        at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:45)
        at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:31)
        at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:201)
        at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:70)
        at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:45)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:49)
        at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:43)
        at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:32)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:96)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:89)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:54)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:77)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:90)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:48)
        at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:120)
        ... 126 more
Caused by: com.android.build.api.transform.TransformException: Error while generating the main dex list:
Error while merging dex archives:
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: io.sentry.ArrayUtil$1
        at com.android.build.gradle.internal.transforms.D8MainDexListTransform.transform(D8MainDexListTransform.kt:147)
        at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
        at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
        at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
        ... 181 more
Caused by: com.android.builder.multidex.D8MainDexList$MainDexListException: Error while merging dex archives:
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: io.sentry.ArrayUtil$1
        at com.android.builder.multidex.D8MainDexList.getExceptionToRethrow(D8MainDexList.java:107)
        at com.android.builder.multidex.D8MainDexList.generate(D8MainDexList.java:95)
        at com.android.build.gradle.internal.transforms.D8MainDexListTransform.transform(D8MainDexListTransform.kt:131)
        ... 184 more
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
        at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:81)
        at com.android.tools.r8.utils.ExceptionUtils.withMainDexListHandler(ExceptionUtils.java:55)
        at com.android.tools.r8.GenerateMainDexList.run(GenerateMainDexList.java:139)
        at com.android.builder.multidex.D8MainDexList.generate(D8MainDexList.java:93)
        ... 185 more
Caused by: com.android.tools.r8.utils.AbortException: Error: Program type already present: io.sentry.ArrayUtil$1
        at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:101)
        at com.android.tools.r8.utils.Reporter.fatalError(Reporter.java:72)
        at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:66)
        ... 188 more

What can I do to fix this error?

Thanks,

vjovanov

timeout on launch

Hey i'm having an issue that the app will not launch and was wondering if this was the issue...

2019-12-06 08:39:30.999 2051-2072/? W/ActivityTaskManager: Activity top resumed state loss timeout for ActivityRecord{7203840 u0 com.[MYAPP]/com.zoontek.rnbootsplash.RNBootSplashActivity t16}

any idea?

💻 My environment

  • react-native-bootsplash version: newest
  • react-native version: newest
  • Platform: android
  • OS version: newest
  • Simulator: yes / no
  • Android Studio version: newest
  • Android buildToolsVersion: newest

🕵️‍♂️ Reproducing the issue

startup

Feature request: the scripts should accept args, so it can be run in a CLI

Hi!

I'm really liking this package, and I have a suggestion:

It would be nice, if the generate-bootsplash-assets script acccepted args after it, like:

npx generate-bootsplash-assets . brands/default icon.png 300

Or have an exported member, so it can be called in a script like:

import {generate_bootsplash_assets} from 'react-native-bootsplash'


generate_bootsplash_assets({
       projectPath: ".",
       assetsPath: "assets",
       etc...
      })

This way, it could be run in a none interactive environment like a CLI.

how to edit LaunchScreen.xib to set a full screen image in iOS?

💻 My environment

  • react-native-bootsplash version: 0.1.1
    OS: macOS 10.14.6
    CPU: (12) x64 Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
    Memory: 1.25 GB / 16.00 GB
    Shell: 5.3 - /bin/zsh
  Binaries:
    Node: 12.3.1 - /usr/local/bin/node
    Yarn: 1.16.0 - /usr/local/bin/yarn
    npm: 6.10.3 - /usr/local/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  SDKs:
    iOS SDK:
      Platforms: iOS 12.4, macOS 10.14, tvOS 12.4, watchOS 5.3
    Android SDK:
      API Levels: 21, 23, 26, 27, 28
      Build Tools: 23.0.1, 26.0.1, 28.0.3
  IDEs:
    Android Studio: 3.5 AI-191.8026.42.35.5791312
    Xcode: 10.3/10G8 - /usr/bin/xcodebuild
  npmPackages:
    react: 16.8.6 => 16.8.6
    react-native: 0.60.5 => 0.60.5
  npmGlobalPackages:
    react-native-cli: 2.0.1

🕵️‍♂️ Reproducing the issue

i am an Android developer,not familiar with iOS, could you please give a brief guide on how to set the LauchScreen.xib to display a full screen image?

Custom animation

Hello, how can I change the animation after hiding SplashScreen (not sliding from the top to the bottom)?

By default I wanna get animations like in react-native-splash-screen.

Splash screen not hiding iOS; handleJavaScriptDidFailToLoad

👋 Hello!

First of all thanks for making this product. Seems there was need for a new splash screen package next to react-native-splash-screen. I've installed it yesterday and it seems to work on Android, but on iOS I'm getting the following error in xcode:

2019-09-04 09:55:44.408609+0200 Jobner[6735:2992237] +[RNBootSplash handleJavaScriptDidFailToLoad:]: unrecognized selector sent to class 0x104997c80
2019-09-04 09:55:44.409344+0200 Jobner[6735:2992237] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[RNBootSplash handleJavaScriptDidFailToLoad:]: unrecognized selector sent to class 0x104997c80'
*** First throw call stack:

The app is opening and the splash screen is show. But - as the error suggests with handleJavaScriptDidFailToLoad - it never disappears and the app doesn't continue to load.

Any idea?

💻 My environment

  • react-native-bootsplash version: 1.0.0
  • react-native version: 0.60.5
  • Platform: iOS
  • OS version: 12.1.4
  • Device: iPhone X
  • Simulator: No
  • Xcode version: Version 10.3 (10G8)

🕵️‍♂️ Reproducing the issue

I've installed it following the README. Just after I've updated my project from 0.59.9 to 0.60.5, since react-native-splash-screen gave a lot of error and didn't seem to be supported anymore. So I tried this one.

Then I'd run the project via xcode with an iPhone X connected. The project builds without issues (message build succeeded is shown), but the issue appears when opening the app.

Screenshot 2019-09-04 at 10 34 18

What is the license of this project?

Fantastic work! I'm currently using react-native-splash-screen but I'm considering switching to react-native-bootsplash based on this comparison.

One clear advantage of react-native-splash-screen is the MIT license, so I was wondering which license this project will have.

react-native run-android two applications appear?

💻 My environment

  • react-native-bootsplash version:1.0.0
  • react-native version:0.60.5
  • Platform: android
  • OS version: 7.1

🕵️‍♂️ Reproducing the issue

react-native run-android two applications appear?
image

"react": "16.8.6",
"react-native": "0.60.5",
"react-native-bootsplash": "^1.0.0",

AndroidManifest.xml

<application
  android:name=".MainApplication"
  android:label="@string/app_name"
  android:icon="@mipmap/ic_launcher"
  android:roundIcon="@mipmap/ic_launcher_round"
  android:allowBackup="false"
  android:theme="@style/AppTheme">
  <activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
    android:windowSoftInputMode="adjustResize"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>
  <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
  <!-- add the following lines -->
  <activity
    android:name="com.zoontek.rnbootsplash.RNBootSplashActivity"
    android:theme="@style/BootTheme"> <!-- apply the theme you created at step 3. -->
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>
</application>

MainActivity.java

public class MainActivity extends ReactActivity {

    /**
     * Returns the name of the main component registered from JavaScript.
     * This is used to schedule rendering of the component.
     */
    @Override
    protected String getMainComponentName() {
        return "wywdrgapp";
    }

    @Override
    protected ReactActivityDelegate createReactActivityDelegate() {
        return new ReactActivityDelegate(this, getMainComponentName()) {
            @Override
            protected ReactRootView createRootView() {
                return new RNGestureHandlerEnabledRootView(MainActivity.this);
            }
        };
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        RNBootSplash.show(R.drawable.bootsplash, MainActivity.this); // <- display the "bootsplash" xml view over our MainActivity
    }
}
`

how to solve this. thanks 

[Suggestion] Implementing gifs for splash screen

💻 My environment

  • react-native-bootsplash version: 1.2.1
  • react-native version: 0.61.5
  • Platform: both
  • OS version: OS X 10.14
  • Device: Apple + iPhone 11
  • Simulator: yes

🕵️‍♂️ Reproducing the issue

Explain what you did, what you expected to happen, and what actually happens.
Provide some code or screenshots if needed.

This is more of a suggestion, so I am not sure if this the right way to address it, but I am trying to create a splash screen gif animation. I've gone through the documentation and its pretty clear that on iOS we can't really have a controller assigned to a xib or launch screen storyboard. What I was thinking, and do correct me if I am wrong, is there a way to maybe take the user to a different UIView to load the gif animation and that acts as the default splash screen.

The reason why I don't want to move this to the native side is that I am not sure about the time it'll take for the JS bundle to load and grabbing the first frame of the gif to act as a splash screen and only show the gif on the JS side might be really tricky from a usability standpoint.

🤞Solution

For iOS, here is an implementation article I found. https://www.amerhukic.com/animating-launch-screen-using-gif

For android, maybe we could use like a gif view drawable to handle that, something like this. https://github.com/koral--/android-gif-drawable

I have no clue about the implementation details of this, so I am just looking at some ideas around how we can tackle this issue.

P.S Thank you for building this lib, it has really helped out making RN apps on par with the native ones.

react native 0.61.4 ?

💻 My environment

  • react-native-bootsplash version:
  • react-native version:
  • Platform: ios / android / both
  • OS version: ?
  • Device: brand + model
  • Simulator: yes / no
  • Android Studio version: ?
  • Android buildToolsVersion: ?
  • Xcode version: ?

🕵️‍♂️ Reproducing the issue

Explain what you did, what you expected to happen, and what actually happens.
Provide some code or screenshots if needed.

🤞Solution

Do you know what needs to be done to address this issue?
Ideally, provide a pull request with a fix.

Deep Linking

💻 My environment

  • react-native-bootsplash version: 1.0.3
  • react-native version: 0.61.5
  • Platform: android
  • OS version: Win 8.1
  • Device: Samsung galaxy 7 edge
  • Simulator: no
  • Android Studio version: -
  • Android buildToolsVersion: 28.0.3
  • Xcode version: -

🕵️‍♂️ Reproducing the issue

I want to set up deep linking with react-navigation as described here. I finally made it but the problem is when i open the app using the deep link, I get my props as undefined but if i reload the app, i see it!
It's somehow weird!

AndroidManifest.xml

<application
  android:name=".MainApplication"
  android:label="@string/app_name"
  android:icon="@mipmap/ic_launcher"
  android:roundIcon="@mipmap/ic_launcher_round"
  android:allowBackup="false"
  android:theme="@style/AppTheme">

  <activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan"
    android:exported="true"
    android:launchMode="singleTask">

    <!-- Deep Linking -->
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="aramesh" />
    </intent-filter>
  </activity>

  <!-- Splash Screen -->
  <activity
    android:name="com.zoontek.rnbootsplash.RNBootSplashActivity"
    android:theme="@style/BootTheme">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
  </activity>

  <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>

Router.js

_Landing: {
  screen: Landing,
  path: 'agent/:personID'
},

Code

componentDidMount() {
  alert(this.props.navigation.getParam('personID'));
}

🤞Solution

I guess it's somehow related to #24 which has been solved via #11. But i can't understand why i get this as undefined for the first time 😐

Does this support react-native-navigation's way ?

💻 My environment

  • react-native-bootsplash version: 0.1.1
  • react-native version: 0.60.4
  • Platform: both
  • OS version: Mojave
  • Device: iphone 8 simulator
  • Simulator: yes
  • Android Studio version: 3.4.x
  • Xcode version: 10.3
  • React-native-navigation: v3 Alpha 11

🕵️‍♂️ Issue is splash screen fluctuates once when JS screen gets mounted

I followed all the steps you have mentioned but i'm not be able to achieve the smooth splash experience. I'm using react-native-navigation is this creating the problem? Whats happening right now is whenever i do load my app native splash shows on the screen but fluctuates once when javascript screen mounted. Please guide me further.

I'm guessing this is something to do with react native navigation. If yes then how can i achieve same results. Looking forward for your response. Thanks!

Splash screen jump

The splash screens are misaligned and cause jump similar to the react-native-splash-screen.

Tested on Pixel 3 XL emulator and real device 19:8 aspect ratio.

Installed the latest version and followed the instructions on https://www.npmjs.com/package/react-native-bootsplash almost the same

The differences are
Styles.xml

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:textColor">#000000</item>
        <item name="android:statusBarColor">@color/statusbar</item>
        <item name="android:windowLightStatusBar">true</item>

        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    </style>

    <style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:background">@drawable/background_splash</item>
        <item name="android:statusBarColor">@color/splash</item>
        <item name="android:windowLightStatusBar">true</item>
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    </style>
</resources>

background_splash

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
  <item android:drawable="@color/splash" />

  <item
        android:width="222dp"
        android:height="222dp"
        android:drawable="@mipmap/icon"
        android:gravity="center" />
</layer-list>

Why is this happening?

React Native 0.61.2

Hi, is this still working in 0.61.2 ?

I can't hide programmatically the splash screen, it hides automatically as normal behavior

java.lang.NoSuchMethodException MainActivity.onCreate

💻 My environment

  • react-native-bootsplash version: "^1.0.3"
  • react-native version: "0.61.5"
  • Platform: android
  • OS version: 7.1 and 9
  • Device: Samsung Galaxy Tab S3 (gts3lwifi), Android 9 and ZTE K92 (primrose), Android 7.1
  • Simulator: no
  • Android Studio version: nil
  • Android buildToolsVersion: "28.0.3"
  • Xcode version: nil

🕵️‍♂️ Reproducing the issue

I am not getting the error in my devices, but play store is reporting this issue. Please review this error log to investigate the possible cause. Thanks.

java.lang.RuntimeException: 
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2697)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2758)
  at android.app.ActivityThread.-wrap12 (ActivityThread.java)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1509)
  at android.os.Handler.dispatchMessage (Handler.java:102)
  at android.os.Looper.loop (Looper.java:163)
  at android.app.ActivityThread.main (ActivityThread.java:6228)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:886)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)
Caused by: androidx.fragment.app.Fragment$InstantiationException: 
  at androidx.fragment.app.Fragment.dump (Fragment.java)
  at androidx.fragment.app.Fragment.findFragmentByWho (Fragment.java)
  at androidx.fragment.app.Fragment.getLayoutInflater (Fragment.java)
  at androidx.fragment.app.Fragment.getLifecycle (Fragment.java)
  at androidx.fragment.app.Fragment.instantiate (Fragment.java)
  at androidx.fragment.app.Fragment.onActivityResult (Fragment.java)
  at androidx.fragment.app.Fragment.onAttach (Fragment.java)
  at androidx.fragment.app.Fragment.onAttach (Fragment.java)
  at androidx.fragment.app.Fragment.onAttachFragment (Fragment.java)
  at androidx.fragment.app.Fragment.onContextItemSelected (Fragment.java)
  at androidx.fragment.app.Fragment.onCreateAnimation (Fragment.java)
  at androidx.fragment.app.Fragment.onCreateOptionsMenu (Fragment.java)
  at androidx.fragment.app.Fragment.onCreateView (Fragment.java)
  at androidx.fragment.app.Fragment.onHiddenChanged (Fragment.java)
  at androidx.fragment.app.Fragment.onInflate (Fragment.java)
  at androidx.fragment.app.Fragment.onInflate (Fragment.java)
  at androidx.fragment.app.Fragment.onOptionsMenuClosed (Fragment.java)
  at androidx.fragment.app.Fragment.onRequestPermissionsResult (Fragment.java)
  at androidx.fragment.app.Fragment.onViewCreated (Fragment.java)
  at androidx.fragment.app.Fragment.performConfigurationChanged (Fragment.java)
  at androidx.fragment.app.Fragment.setAnimatingAway (Fragment.java)
  at androidx.fragment.app.Fragment.setAnimator (Fragment.java)
  at androidx.fragment.app.Fragment.setNextAnim (Fragment.java)
  at androidx.fragment.app.Fragment.setNextTransition (Fragment.java)
  at androidx.fragment.app.Fragment.setOnStartEnterTransitionListener (Fragment.java)
  at androidx.fragment.app.FragmentContainer.instantiate (FragmentContainer.java)
  at androidx.fragment.app.FragmentContainer.onFindViewById (FragmentContainer.java)
  at androidx.fragment.app.FragmentManagerImpl$6.instantiate (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentState.instantiate (FragmentState.java)
  at androidx.fragment.app.FragmentManagerImpl.addAddedFragments (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.addBackStackState (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.addFragment (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.addRetainedFragment (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.animateRemoveFragment (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.attachController (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.beginTransaction (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.completeExecute (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchConfigurationChanged (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchContextItemSelected (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchCreateOptionsMenu (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchMultiWindowModeChanged (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchOnFragmentActivityCreated (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchOnFragmentAttached (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchOnFragmentViewCreated (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchOptionsMenuClosed (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dump (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.enqueueAction (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.executeOps (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.executePostponedTransaction (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.findFragmentById (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.findFragmentByTag (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.getFragment (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.loadAnimation (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.makeFadeAnimation (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.makeOpenCloseAnimation (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.popBackStack (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.popBackStackImmediate (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.popBackStackState (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.postponePostponableTransactions (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.putFragment (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.restoreSaveState (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.setBackStackIndex (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.setMaxLifecycle (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.throwException (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentController.attachHost (FragmentController.java)
  at androidx.fragment.app.FragmentController.createController (FragmentController.java)
  at androidx.fragment.app.FragmentController.dispatchActivityCreated (FragmentController.java)
  at androidx.fragment.app.FragmentController.dispatchConfigurationChanged (FragmentController.java)
  at androidx.fragment.app.FragmentController.dispatchContextItemSelected (FragmentController.java)
  at androidx.fragment.app.FragmentController.dispatchCreateOptionsMenu (FragmentController.java)
  at androidx.fragment.app.FragmentController.dispatchMultiWindowModeChanged (FragmentController.java)
  at androidx.fragment.app.FragmentController.dispatchOptionsMenuClosed (FragmentController.java)
  at androidx.fragment.app.FragmentController.findFragmentByWho (FragmentController.java)
  at androidx.fragment.app.FragmentController.onCreateView (FragmentController.java)
  at androidx.fragment.app.FragmentController.restoreSaveState (FragmentController.java)
  at androidx.fragment.app.FragmentActivity.onCreate (FragmentActivity.java)
  at androidx.appcompat.app.AppCompatActivity.onCreate (AppCompatActivity.java)
  at com.facebook.react.ReactActivity.onCreate (ReactActivity.java)
  at com.tnfr.tnfr.MainActivity.onCreate (MainActivity.java)
  at android.app.Activity.performCreate (Activity.java:6742)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1122)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2650)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2758)
  at android.app.ActivityThread.-wrap12 (ActivityThread.java)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1509)
  at android.os.Handler.dispatchMessage (Handler.java:102)
  at android.os.Looper.loop (Looper.java:163)
  at android.app.ActivityThread.main (ActivityThread.java:6228)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:886)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)
Caused by: java.lang.NoSuchMethodException: 
  at java.lang.Class.getConstructor0 (Class.java:2204)
  at java.lang.Class.getConstructor (Class.java:1683)
  at androidx.fragment.app.Fragment.dump (Fragment.java)
  at androidx.fragment.app.Fragment.findFragmentByWho (Fragment.java)
  at androidx.fragment.app.Fragment.getLayoutInflater (Fragment.java)
  at androidx.fragment.app.Fragment.getLifecycle (Fragment.java)
  at androidx.fragment.app.Fragment.instantiate (Fragment.java)
  at androidx.fragment.app.Fragment.onActivityResult (Fragment.java)
  at androidx.fragment.app.Fragment.onAttach (Fragment.java)
  at androidx.fragment.app.Fragment.onAttach (Fragment.java)
  at androidx.fragment.app.Fragment.onAttachFragment (Fragment.java)
  at androidx.fragment.app.Fragment.onContextItemSelected (Fragment.java)
  at androidx.fragment.app.Fragment.onCreateAnimation (Fragment.java)
  at androidx.fragment.app.Fragment.onCreateOptionsMenu (Fragment.java)
  at androidx.fragment.app.Fragment.onCreateView (Fragment.java)
  at androidx.fragment.app.Fragment.onHiddenChanged (Fragment.java)
  at androidx.fragment.app.Fragment.onInflate (Fragment.java)
  at androidx.fragment.app.Fragment.onInflate (Fragment.java)
  at androidx.fragment.app.Fragment.onOptionsMenuClosed (Fragment.java)
  at androidx.fragment.app.Fragment.onRequestPermissionsResult (Fragment.java)
  at androidx.fragment.app.Fragment.onViewCreated (Fragment.java)
  at androidx.fragment.app.Fragment.performConfigurationChanged (Fragment.java)
  at androidx.fragment.app.Fragment.setAnimatingAway (Fragment.java)
  at androidx.fragment.app.Fragment.setAnimator (Fragment.java)
  at androidx.fragment.app.Fragment.setNextAnim (Fragment.java)
  at androidx.fragment.app.Fragment.setNextTransition (Fragment.java)
  at androidx.fragment.app.Fragment.setOnStartEnterTransitionListener (Fragment.java)
  at androidx.fragment.app.FragmentContainer.instantiate (FragmentContainer.java)
  at androidx.fragment.app.FragmentContainer.onFindViewById (FragmentContainer.java)
  at androidx.fragment.app.FragmentManagerImpl$6.instantiate (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentState.instantiate (FragmentState.java)
  at androidx.fragment.app.FragmentManagerImpl.addAddedFragments (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.addBackStackState (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.addFragment (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.addRetainedFragment (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.animateRemoveFragment (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.attachController (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.beginTransaction (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.completeExecute (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchConfigurationChanged (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchContextItemSelected (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchCreateOptionsMenu (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchMultiWindowModeChanged (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchOnFragmentActivityCreated (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchOnFragmentAttached (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchOnFragmentViewCreated (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dispatchOptionsMenuClosed (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.dump (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.enqueueAction (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.executeOps (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.executePostponedTransaction (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.findFragmentById (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.findFragmentByTag (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.getFragment (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.loadAnimation (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.makeFadeAnimation (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.makeOpenCloseAnimation (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.popBackStack (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.popBackStackImmediate (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.popBackStackState (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.postponePostponableTransactions (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.putFragment (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.restoreSaveState (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.setBackStackIndex (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.setMaxLifecycle (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentManagerImpl.throwException (FragmentManagerImpl.java)
  at androidx.fragment.app.FragmentController.attachHost (FragmentController.java)
  at androidx.fragment.app.FragmentController.createController (FragmentController.java)
  at androidx.fragment.app.FragmentController.dispatchActivityCreated (FragmentController.java)
  at androidx.fragment.app.FragmentController.dispatchConfigurationChanged (FragmentController.java)
  at androidx.fragment.app.FragmentController.dispatchContextItemSelected (FragmentController.java)
  at androidx.fragment.app.FragmentController.dispatchCreateOptionsMenu (FragmentController.java)
  at androidx.fragment.app.FragmentController.dispatchMultiWindowModeChanged (FragmentController.java)
  at androidx.fragment.app.FragmentController.dispatchOptionsMenuClosed (FragmentController.java)
  at androidx.fragment.app.FragmentController.findFragmentByWho (FragmentController.java)
  at androidx.fragment.app.FragmentController.onCreateView (FragmentController.java)
  at androidx.fragment.app.FragmentController.restoreSaveState (FragmentController.java)
  at androidx.fragment.app.FragmentActivity.onCreate (FragmentActivity.java)
  at androidx.appcompat.app.AppCompatActivity.onCreate (AppCompatActivity.java)
  at com.facebook.react.ReactActivity.onCreate (ReactActivity.java)
  at com.tnfr.tnfr.MainActivity.onCreate (MainActivity.java)
  at android.app.Activity.performCreate (Activity.java:6742)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1122)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2650)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2758)
  at android.app.ActivityThread.-wrap12 (ActivityThread.java)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1509)
  at android.os.Handler.dispatchMessage (Handler.java:102)
  at android.os.Looper.loop (Looper.java:163)
  at android.app.ActivityThread.main (ActivityThread.java:6228)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:886)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)

Why can't my launch icon slide down

💻 My environment

  • react-native-bootsplash version:
  • react-native version:
  • Platform: ios / android / both
  • OS version: ?
  • Device: brand + model
  • Simulator: yes / no
  • Android Studio version: ?
  • Android buildToolsVersion: ?
  • Xcode version: ?

🕵️‍♂️ Reproducing the issue

Explain what you did, what you expected to happen, and what actually happens.
Provide some code or screenshots if needed.

🤞Solution

Do you know what needs to be done to address this issue?
Ideally, provide a pull request with a fix.
Is this startup map to be edited by yourself or fixed? Only use the app icon as the startup map

Security exception: Permission Denial

ERROR

Starting: Intent { cmp=[appName]/.MainActivity }
Security exception: Permission Denial: starting Intent { flg=0x10000000 cmp=[appName]/.MainActivity } from null (pid=27721, uid=2000) not exported from uid 10085

java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=[appName]/.MainActivity } from null (pid=27721, uid=2000) not exported from uid 10085
at com.android.server.am.ActivityStackSupervisor.checkStartAnyActivityPermission(ActivityStackSupervisor.java:1632)
at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:438)
at com.android.server.am.ActivityStarter.startActivityLocked(ActivityStarter.java:278)
at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:817)
at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4532)
at com.android.server.am.ActivityManagerShellCommand.runStartActivity(ActivityManagerShellCommand.java:417)
at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:141)
at android.os.ShellCommand.exec(ShellCommand.java:96)
at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:15014)
at android.os.Binder.shellCommand(Binder.java:594)
at android.os.Binder.onTransact(Binder.java:492)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:4243)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2919)
at android.os.Binder.execTransact(Binder.java:697)

💻 My environment

  • react-native-bootsplash version: "^0.1.1"
  • react-native version: "0.60.4",
  • Platform: android
  • Device: Nexus 6
  • Simulator: yes
  • Android Studio version: 3.4.2
  • Android buildToolsVersion: 28.0.3

🕵️‍♂️ Reproducing the issue

Install react-native-bootsplash and run react-native run-android

Feature request: react-native-navigation support

💻 My environment

  • react-native-bootsplash version: 0.1.1
  • react-native version: 0.60.4
  • Platform: Both
  • OS version: IOS 12.3 / Android Pie
  • Device: Iphone 8 simulator
  • Simulator: yes
  • Android Studio version: 3.4.x
  • Xcode version: 10.3
  • React-Native-Navigation: V3 Alpha 11

🕵️‍♂️ Issue is splash screen fluctuates once when JS screen gets mounted..

I followed all your steps but its still happening. Please let me know what to do. I'm using react native navigation. I'm guessing due to react-native-navigation this is happening. Please let me know how to deal with it. Looking forward for your response. Thanks!

getApplicationContext().getPackageName() can return an inappropriate string

💻 My environment

  • react-native-bootsplash version: 0.1.1
  • Platform: android

🕵️‍♂️ Reproducing the issue

If your code isn't located at the place expected by this assumption

startActivity(new Intent(this, Class.forName(getApplicationContext()
.getPackageName() + ".MainActivity")));
(getApplicationContext().getPackageName())

(My case: white labeled app with dynamic application id that's doesn't match the classes path)

🤞Solution

Your solution after a private discussion:

https://developer.android.com/guide/topics/manifest/meta-data-element

    <activity
      android:name="com.zoontek.rnbootsplash.RNBootSplashActivity"
      android:theme="@style/BootTheme"> <!-- apply the theme you created at step 3. -->
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>

<meta-data android:name=“started” android:value=“com.my.ns” />
    </activity>

Workaround

Use your own class for the activity. Eg for me with android-pre x

package com.my.ns;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

public class RNBootSplashActivityPackageNameWorkaround extends AppCompatActivity {

  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {
      startActivity(new Intent(this, MainActivity.class));
      finish();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
      <activity
        android:name=".RNBootSplashActivityPackageNameWorkaround"
        android:theme="@style/SplashTheme"
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
      </activity>

Android splash screen image jumps slightly when loading

💻 My environment

    OS: macOS 10.14.6
    CPU: (4) x64 Intel(R) Core(TM) i7-6567U CPU @ 3.30GHz
    Memory: 54.65 MB / 16.00 GB
    Shell: 5.7.1 - /usr/local/bin/zsh
  Binaries:
    Node: 10.15.3 - /var/folders/fc/dg0hjk2n5lg7g8brjxyfhx6h0000gn/T/yarn--1567232771367-0.714416577935092/node
    Yarn: 1.17.3 - /var/folders/fc/dg0hjk2n5lg7g8brjxyfhx6h0000gn/T/yarn--1567232771367-0.714416577935092/yarn
    npm: 6.4.1 - ~/.asdf/installs/nodejs/10.15.3/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  SDKs:
    iOS SDK:
      Platforms: iOS 12.4, macOS 10.14, tvOS 12.4, watchOS 5.3
    Android SDK:
      API Levels: 23, 24, 27, 28
      Build Tools: 27.0.3, 28.0.3
      System Images: android-23 | Google APIs Intel x86 Atom, android-24 | Google APIs Intel x86 Atom
  IDEs:
    Android Studio: 3.4 AI-183.6156.11.34.5692245
    Xcode: 10.3/10G8 - /usr/bin/xcodebuild
  npmPackages:
    @react-native-community/cli: ^2.9.0 => 2.9.0
    react: 16.9.0 => 16.9.0
    react-native: 0.61.0-rc.0 => 0.61.0-rc.0

🕵️‍♂️ Reproducing the issue

Splash screen on some Android devices jumps slightly when loaded

🤞Solution

There are a couple solutions in this issue but none of them seem to be working on all devices.

Wondering if anyone else is seeing the same behavior and has any good fixes.

Complex launchscreens on Android

💻 My environment

  • react-native-bootsplash version: 1.0.3
  • react-native version: 0.61.5
  • Platform: android

🕵️‍♂️ Reproducing the issue

I want to use a complex launchscreen on Android but when I dot this the app crashes with following error: E AndroidRuntime: Caused by: android.content.res.Resources$NotFoundException: File res/drawable/bootsplash.xml from drawable resource ID #0x7f060055 in logcat.

When I use the launchscreen from the example it works

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
  <!-- the background color. it can be a system color or a custom one defined in colors.xml -->
  <item android:drawable="@android:color/white" />

  <item>
    <!-- the app logo, centered horizontally and vertically -->
    <bitmap
      android:src="@drawable/ic_launcher"
      android:gravity="center" />
  </item>
</layer-list>

But with my own launchscreen I get the error:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">

    <ImageView
        android:id="@+id/AppLogo"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center"
        android:layout_marginTop="-50dp"
        android:contentDescription="@string/AppName"
        android:src="@mipmap/ic_launcher_foreground"
        app:srcCompat="@mipmap/ic_launcher_foreground" />

    <TextView
        android:id="@+id/AppName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="50dp"
        android:fontFamily="@font/lato_black"
        android:text="@string/AppName"
        android:textColor="@color/navy"
        android:textSize="36sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_gravity="bottom"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/FostplusLogo"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:contentDescription="@string/fostplus_logo"
            android:scaleType="center"
            android:src="@drawable/fostplus"
            app:srcCompat="@drawable/fostplus" />

        <ImageView
            android:id="@+id/BebatLogo"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:contentDescription="@string/bebat_logo"
            android:paddingTop="10dp"
            android:scaleType="center"
            android:src="@drawable/bebat"
            app:srcCompat="@drawable/bebat" />

    </LinearLayout>

</FrameLayout>

ViewGroup.removeView on null object reference

Hi! Thanks for this awesome lib! Today I found a weird crash report coming from bootsplash. It has only been reported by a specific device so far, here are the details:

💻 My environment

  • react-native-bootsplash version: 1.2.1
  • react-native version: 0.61.5
  • Platform: Android
  • OS version: 5.0
  • Device: Samsung Galaxy Note 3
  • Android buildToolsVersion: ?

🕵️‍♂️ Reproducing the issue

I'm not sure how, but I think it's kinda my fault but perhaps it should also be addressed by this library if it hasn't already. I got two places where I call the method to hide the bootsplash:

// ... somewhere in my boot "sequence"
useEffect(() => {
  // If for some reason we take more than 2 seconds to boot
  // this hides bootsplash and shows a spinner
  setTimeout(() => RNBootSplash.hide(200), 2000);
}, []);

useEffect(() => {
  // Wait until we're ready to show the splashscreen
  if (platformReady) {
    RNBootSplash.hide(200);
  }
}, [platformReady]);

I'm guessing that the second call to RNBootSplash.hide could fail in this particular config because the View no longer exists and bootsplash doesn't handle that case? I wasn't handling that particular case because... well, I assumed it would just do nothing 😅

This problem doesn't seem to affect any other device yet, but I'll keep an eye on it.

Stacktrace
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.ViewGroup.removeView(android.view.View)' on a null object reference
       at com.zoontek.rnbootsplash.RNBootSplashModule$1$1.onAnimationEnd(RNBootSplashModule.java)
       at android.view.ViewPropertyAnimator$AnimatorEventListener.onAnimationEnd(ViewPropertyAnimator.java:1116)
       at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1089)
       at android.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:666)
       at android.animation.ValueAnimator$AnimationHandler.run(ValueAnimator.java:682)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
       at android.view.Choreographer.doCallbacks(Choreographer.java:590)
       at android.view.Choreographer.doFrame(Choreographer.java:559)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:5942)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

🤞Solution

I'm not sure. Perhaps checking if the reference is not null before calling removeView? I'll try to add a check on the React side to avoid calling RNBootSplash.hide twice and see if this fixes the issue for me.

I'm not an Android dev, so I haven't checked the code to see if perhaps that's exactly what happened here.

TypeError: null is not an object (evaluating 'RNBootSplash.hide')

💻 My environment

  • react-native-bootsplash version: ^1.0.3
  • react-native version: 0.61.4
  • Platform: ios
  • OS version: macOS Catalina v10.15.1
  • Device: iPhone 11
  • Simulator: yes
  • Android Studio version: n/a
  • Android buildToolsVersion: n/a
  • Xcode version: 11.2.1

🕵️‍♂️ Reproducing the issue

  1. yarn add react-native-bootsplash
  2. Follow exact steps in https://github.com/zoontek/react-native-bootsplash#setup
  3. Add RNBootSplash to App.tsx
import * as React from 'react';
import RNBootSplash from "react-native-bootsplash";
import AsyncStorage from '@react-native-community/async-storage';
import { AppNavigator } from './Navigation';
import { ApolloProvider, ApolloClient, createHttpLink, InMemoryCache } from '@apollo/client';
import { setContext } from 'apollo-link-context';

const httpLink = createHttpLink({
  uri: '...special_url...',
});

const authLink = setContext(async (_, { headers }) => {
  const token = await AsyncStorage.getItem('@userToken');
  return {
    headers: {
      ...headers,
      authorization: token ? `Bearer ${token}` : '',
    }
  }
});

const client = new ApolloClient({
  link: authLink.concat(httpLink),
  cache: new InMemoryCache()
});

export default function App() {
  const init = () => {
    RNBootSplash.hide();
  }
  React.useEffect(() => {
    init();
  }, []);

  return (
    <ApolloProvider client={client}>
      <AppNavigator />
    </ApolloProvider>
  );
}
  1. See this error TypeError: null is not an object (evaluating 'RNBootSplash.hide')
  2. Try linking manually following https://github.com/zoontek/react-native-bootsplash#-manual-linking
  3. Same error shows

🤞Solution

Unsure how to navigate this. Any help would be appreciated, thanks.

When the screen is full, the picture stretches and deforms, but there is no adaption

💻 My environment

  • react-native-bootsplash version:
  • react-native version:
  • Platform: ios / android / both
  • OS version: ?
  • Device: brand + model
  • Simulator: yes / no
  • Android Studio version: ?
  • Android buildToolsVersion: ?
  • Xcode version: ?

🕵️‍♂️ Reproducing the issue

When the screen is full, the picture stretches and deforms, but there is no adaption,is it can scale?

🤞Solution

Do you know what needs to be done to address this issue?
Ideally, provide a pull request with a fix.

I cannot see any splash screen in IOS device, only react native app name screen is visible ,what is .xib support ?

💻 My environment

  • react-native-bootsplash version:
  • react-native version:
  • Platform: ios / android / both
  • OS version: ?
  • Device: brand + model
  • Simulator: yes / no
  • Android Studio version: ?
  • Android buildToolsVersion: ?
  • Xcode version: ?

🕵️‍♂️ Reproducing the issue

Explain what you did, what you expected to happen, and what actually happens.
Provide some code or screenshots if needed.

🤞Solution

Do you know what needs to be done to address this issue?
Ideally, provide a pull request with a fix.

Can not upgrade to 1.1.1/1.1.3

When trying to upgrade via yarn it spits out the following error:

error An unexpected error occurred: "https://registry.yarnpkg.com/react-native-bootsplash/-/react-native-bootsplash-1.1.3.tgz: Request failed \"404 Not Found\"".

💻 My environment

  • react-native-bootsplash version: 1.1.0
  • react-native version: 0.61.5
  • Platform: both
  • OS version: 10.15.1
  • Device: irrelevant
  • Simulator: irrelevant
  • Android Studio version: 3.5.2
  • Android buildToolsVersion: 26.x
  • Xcode version: 11.3
  • yarn version: 1.19.1

🕵️‍♂️ Reproducing the issue

Explain what you did, what you expected to happen, and what actually happens.
Provide some code or screenshots if needed.

  • Running yarn upgrade does not complete successfully.

🤞Solution

Do you know what needs to be done to address this issue?
Ideally, provide a pull request with a fix.

  • Stuck with 1.1.0 at this time.

iOS application is shown first than bootsplash icon is shown

💻 My environment

  • react-native-bootsplash version:1.2.1
  • react-native version: 0.61.5
  • Platform: ios
  • OS version: MacOS Catalina 0.15.3 Beta (19D49f)
  • Device: Iphone 8 (emulator)
  • Simulator: yes
  • Xcode version: 11.3 (11C29)

🕵️‍♂️ Reproducing the issue

This issue only relates to IOS, android works perfectly.

Expected:

  • Bootsplash logo on custom background until hide() is called

Actual:

  • Application icon with gradient background on a custom background color is shown for a small period of time than bootsplash_logo icon is shown on custom background color as expected.

What I did:

  • I have integrated this awesome library following the readme
  • generated bootsplash_logo files using the generator
  • configured LaunchScreen according to the example and changed the custom background color

We have an application icon with a gradient and a transparent bootsplash logo icon on a transparent background.

example 2
exemple 1

'RNSplashScreen.h' file not found

💻 My environment

  • react-native-bootsplash version: 1.0.3
  • react-native version: 0.61.4
  • Platform: ios
  • OS version: 13
  • Device: n/a
  • Simulator: n/a
  • Android Studio version: n/a
  • Android buildToolsVersion: n/a
  • Xcode version: 11.1

🕵️‍♂️ Reproducing the issue

I npm installed the package and expected it to autolink. But it did not. Got the error on build:

'RNSplashScreen.h' file not found

🤞Solution

Do you know what needs to be done to address this issue?
Ideally, provide a pull request with a fix.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.