為何出現此錯誤訊息?The application should not provide its own launch screen

 如果你在 Android Studio 遇到錯誤訊息:

"The application should not provide its own launch screen"

這通常發生在 Flutter 開發環境,而且與 flutter_native_splash 套件或 AndroidManifest.xml 設定有關。以下是可能的原因及解決方案:


🚨 可能原因與解決方案

1. flutter_native_splash 設定錯誤

在 Flutter 開發中,預設的啟動畫面(Splash Screen)應該由 Android 系統的 theme 機制 來處理,而不是手動加載一個 Activity。如果你的 flutter_native_splash 設定不正確,可能會導致這個錯誤。

解決方案

  1. 檢查 pubspec.yamlflutter_native_splash 設定

    • 確保 android: true 沒有被設為 false
    • 檢查 background_imagecolor 設定是否正確
    yaml
    flutter_native_splash: android: true ios: true web: false color: "#FFFFFF" image: assets/splash.png
  2. 重新產生啟動畫面 在終端機執行:

    sh
    flutter clean flutter pub get dart run flutter_native_splash:create
  3. 刪除 android/app/src/main/res/drawable/launch_background.xml(如果存在)並重新生成 Splash Screen。


2. AndroidManifest.xml 設定不當

有些開發者會試圖在 AndroidManifest.xml 手動新增 一個 SplashActivity,這會導致系統無法自動加載正確的 launchTheme,進而出錯。

解決方案

  • 打開 android/app/src/main/AndroidManifest.xml

  • 檢查 android:theme 是否設為 Theme.Splash,例如:

    xml
    <activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" <!-- 這個應該是 `LaunchTheme` --> android:exported="true">
  • 確保 沒有額外的 SplashActivity,如果有,請刪除:

    xml
    <activity android:name=".SplashActivity">

3. styles.xml 設定錯誤

Flutter 在 Android 上的啟動畫面是透過 styles.xml 定義的,請確保你的 styles.xml 沒有錯誤。

解決方案

  1. 打開 android/app/src/main/res/values/styles.xml

  2. 檢查 LaunchTheme 是否正確

    xml
    <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar"> <item name="android:windowBackground">@drawable/launch_background</item> </style>
  3. 檢查 themes.xml 是否有重複定義 如果 themes.xml 內有其他 Theme,可能會造成衝突,請確保:

    • Theme.AppCompat.Light.NoActionBar 沒有影響 LaunchTheme
    • 不要使用 Theme.MaterialComponents.DayNight 作為啟動畫面主題

4. MainActivity.kt 設定錯誤

如果你手動修改了 MainActivity.kt,可能會導致 Flutter 的 Splash Screen 機制衝突

解決方案

  1. 打開 android/app/src/main/kotlin/com/example/yourapp/MainActivity.kt
  2. 檢查是否有 SplashActivity,如果有,刪除相關程式碼:
    kotlin
    class SplashActivity : FlutterActivity() {
    MainActivity 應該是這樣:
    kotlin
    package com.example.yourapp import io.flutter.embedding.android.FlutterActivity class MainActivity: FlutterActivity() { }

🔥 總結

最佳解法

  1. 確保 flutter_native_splash 設定正確,執行 flutter pub run flutter_native_splash:create
  2. 刪除 android/app/src/main/res/drawable/launch_background.xml
  3. 確保 AndroidManifest.xml 沒有額外的 SplashActivity
  4. 確保 styles.xmlLaunchTheme 設定正確
  5. 確保 MainActivity.kt 沒有多餘的 Splash 相關程式碼

沒有留言:

張貼留言

excel 最大值用max,取最小值但要排除0,要怎麼寫?

 =MIN(IF(A1:A10<>0, A1:A10))