Flutter项目安装后出现双桌面图标,仅一个可用的解决求助
Flutter安卓端出现两个桌面图标问题解决
问题原因
你的AndroidManifest.xml里存在两个带有<category android:name="android.intent.category.LAUNCHER"/>的Activity:
- 第一个是Flutter默认的主Activity(代码中可见其intent-filter配置)
- 第二个是手动添加的
.MyActivity
安卓系统会把每个包含LAUNCHER类别的Activity识别为桌面启动入口,因此生成两个图标。而.MyActivity未正确接入Flutter初始化流程,导致点击后无法打开。
另外,第一个Activity里FLUTTER_NOTIFICATION_CLICK的intent-filter错误添加了LAUNCHER类别,这也可能引发异常,需要修正。
解决方案
方案一:移除无用的.MyActivity
如果.MyActivity是冗余的,直接删除整个Activity节点:
<!-- 删除这段代码 --> <activity android:name=".MyActivity" android:theme="@style/LaunchTheme" > <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" /> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>
方案二:保留.MyActivity但移除启动入口
如果.MyActivity有其他用途,去掉它的MAIN和LAUNCHER intent-filter,将其改为普通Activity:
<activity android:name=".MyActivity" android:theme="@style/LaunchTheme" > <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" /> <!-- 移除MAIN和LAUNCHER的intent-filter --> </activity>
修正通知点击的intent-filter
把第一个Activity里FLUTTER_NOTIFICATION_CLICK的intent-filter中的LAUNCHER改成DEFAULT:
<intent-filter> <action android:name="FLUTTER_NOTIFICATION_CLICK"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter>
修改后的完整AndroidManifest.xml示例
<application> <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize" tools:ignore="WrongManifestParent"> <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" /> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <intent-filter> <action android:name="FLUTTER_NOTIFICATION_CLICK"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> <meta-data android:name="flutterEmbedding" android:value="2" /> <!--fb login --> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> <meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/> <activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" /> <activity android:name="com.facebook.CustomTabActivity" android:exported="true"> <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="@string/fb_login_protocol_scheme" /> </intent-filter> </activity> </application> </manifest>
内容的提问来源于stack exchange,提问作者Saleem Yasin
相关产品推荐
相关产品推荐

