Почему значение для $ {ApplicationName} не указано после переноса моего приложения Flutter на Android embedding v2?

#android #flutter #dart #deprecated

Вопрос:

Я попытался импортировать устаревшее приложение flutter, но после выполнения шагов, приведенных на github, я получаю это

 C:UserspersonalAndroidStudioProjectsflash-chat-flutterandroidappsrcmainAndroidManifest.xml:10:9-42 Error:
    Attribute application@name at AndroidManifest.xml:10:9-42 requires a placeholder substitution but no value for <applicationName> is provided.
C:UserspersonalAndroidStudioProjectsflash-chat-flutterandroidappsrcdebugAndroidManifest.xml Error:
    Validation failed, exiting
 

Комментарии:

1. Можете ли вы добавить свой AndroidManifest.xml досье.

2. Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы выделить именно то, что вам нужно. Как написано в настоящее время, трудно точно сказать, о чем вы спрашиваете.

Ответ №1:

Я тоже столкнулся с этим. В моем случае это было потому, что я установил manifestPlaceholders «обычный» способ, назначив с = помощью (как, похоже, делают все примеры):

В android/app/build.gradle :

 android {
    ⋮
    defaultConfig {
        applicationId "com.example.my_app"
        minSdkVersion flutter.minSdkVersion
        targetSdkVersion flutter.targetSdkVersion
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        // This right here!
        manifestPlaceholders = [someKey: "@string/some_value"]
    }
    ⋮
}
 

Оказывается, поддержка multidex привела к необходимости динамического определения имени приложения, следовательно ${applicationName} , заполнителя в манифесте.

Это значение определяется плагином Flutter Gradle здесь с помощью manifestPlaceholders , поэтому, если вы замените значение, переназначив его, вы столкнетесь с этой проблемой. Исправление простое: добавьте свои значения к существующим = примерно так:

 android {
    ⋮
    defaultConfig {
        applicationId "com.example.my_app"
        minSdkVersion flutter.minSdkVersion
        targetSdkVersion flutter.targetSdkVersion
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        // Fixed now! Note the plus!
        manifestPlaceholders  = [someKey: "@string/some_value"]
    }
    ⋮
}
 

Ответ №2:

Я получил ту же ошибку:

Вам нужно добавить это в свой build.gradle (YourFlutterProject/android/app/build.gradle)

 buildTypes {
    release {
        manifestPlaceholders = [applicationName: "android.app.Application"]
    }

    debug {
        manifestPlaceholders = [applicationName: "android.app.Application"]
    }
    build{
        manifestPlaceholders = [applicationName: "android.app.Application"]
    }
}
 

Комментарии:

1. Вам не нужно этого делать; фреймворк сделает это за вас. На самом деле фреймворк должен делать это динамически, чтобы правильно обрабатывать многодексные сценарии. Согласно моему ответу, вам просто нужно избегать перезаписи значений, предоставляемых фреймворком.