运行 react-native run-android 后出现两个应用程序

19

我正在制作一个React Native应用程序,先前它能够正常工作,但是现在当我运行“react-native run-android”命令时,安装和启动成功后,我可以在模拟器中看到两个应用程序,并且它们都能够正常工作。
那么,你有任何想法为什么我会看到2个应用程序,或者我应该说为什么我会安装额外的重复应用程序吗?

7个回答

29

我认为您在应用程序中添加了启动画面后出现了这个问题,首先进入此目录:android/app/src/main/AndroidManifest.xml如果您像这样添加了两次某些内容

       <activity
        android:name=".SplashActivity"
        android:theme="@style/SplashTheme"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        </activity> -->

它将在您的设备上渲染两次并构建两个应用程序。

在我的文件中

AndroidManifest.xml

<!-- remove just first part the activity, but i comment this part -->

  <!-- <activity
    android:name=".SplashActivity"
    android:theme="@style/SplashTheme"
    android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity> -->



  <activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/SplashTheme"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
    android:windowSoftInputMode="adjustResize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>

是的,这就是问题,但如何解决呢?如果我移除它,启动画面还能正常工作吗? - Ahtesham Shah
通常在添加启动画面后,您需要在AndroidManifest文件中添加第二个活动。只需删除第一个活动即可解决问题。 - Aras

19

问题是由于启动页和主活动中都有多个类别为LAUNCHER。

<category android:name="android.intent.category.LAUNCHER" />

既有SplashActivity和MainActivity的解决方案是更改

<category android:name="android.intent.category.LAUNCHER" />


<category android:name="android.intent.category.DEFAULT" />

在MainActivity中。

具有.SplashActivity和.MainActivity的文件如下所示:

    <activity
        android:name=".SplashActivity"
        android:theme="@style/SplashTheme"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <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.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
    </activity>

8

8

更改此内容

<activity
            android:name=".SplashActivity"
            android:theme="@style/SplashTheme"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

      <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=".SplashActivity"
            android:theme="@style/SplashTheme"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

      <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>


3

除了Aras上面发布的答案之外,对我来说问题特别在于额外的intent-filter属性,它们被标记为“MAIN”和“LAUNCHER”。似乎你不能有多个这样的属性而不创建重复的应用程序。

       <activity
         android:name=".SplashActivity"
         android:theme="@style/SplashTheme"
         android:label="@string/app_name">
         <!-- You'll either want to remove this section, or ensure that it does not exist in any other activities. -->
         <intent-filter>
           <action android:name="android.intent.action.MAIN" />
           <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
       </activity>

0
你只需要简单地结账就可以了。

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

在App的AndroidManifest.xml文件中,很有可能在您的应用程序清单文件中定义了多个启动器。您可以尝试删除任何额外的启动器。
尝试清除缓存并重新构建您的应用程序。

-2

检查已安装应用的包名。


怎么办?我找不到它在哪里! - Mayank Baiswar
在Android菜单中,前往“应用程序”并检查这两个应用程序,它们必须具有不同的包名称。 - Rodrigo Gontijo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接