为啥在将我的 Flutter 应用程序迁移到 Android 嵌入 v2 后没有提供 $applicationName 的值?
Posted
技术标签:
【中文标题】为啥在将我的 Flutter 应用程序迁移到 Android 嵌入 v2 后没有提供 $applicationName 的值?【英文标题】:Why is the value for $applicationName not supplied after migrating my Flutter app to Android embedding v2?为什么在将我的 Flutter 应用程序迁移到 Android 嵌入 v2 后没有提供 $applicationName 的值? 【发布时间】:2021-12-22 01:57:11 【问题描述】:我试图迁移一个已弃用的颤振应用程序,但在按照 github 上提供的步骤进行操作后,我得到了这个
C:\Users\personal\androidStudioProjects\flash-chat-flutter\android\app\src\main\AndroidManifest.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:\Users\personal\AndroidStudioProjects\flash-chat-flutter\android\app\src\debug\AndroidManifest.xml Error:
Validation failed, exiting
【问题讨论】:
你能添加你的 AndroidManifest.xml 文件吗? 请澄清您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:我遇到了同样的错误:
您需要将此添加到您的 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"]
【讨论】:
你不需要这样做;该框架为您完成。事实上,框架需要动态地进行,以便正确处理多索引场景。根据我的回答,您只需要避免覆盖框架提供的值。【参考方案2】:我也遇到了这个问题。就我而言,这是因为我设置了 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 support 引入了动态确定应用程序名称的需求,因此清单中的 $applicationName
占位符。
该值由 Flutter Gradle 插件 here 通过 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"]
⋮
【讨论】:
以上是关于为啥在将我的 Flutter 应用程序迁移到 Android 嵌入 v2 后没有提供 $applicationName 的值?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在将 msys gcc 从 9.2 更新到 10.1.0 后我的所有 std 命名空间都损坏了