【问题标题】:Building Different flavors of a Flutter app with different Application IDs使用不同的应用程序 ID 构建不同风格的 Flutter 应用程序
【发布时间】:2020-09-06 20:00:16
【问题描述】:

我有一些关于如何正确执行此操作的问题 - Flutter 团队关于使用 Flavors 的文档有些缺乏,到目前为止,教程和文章似乎都来自那些在了解它时发布的人。我很欣赏这里的努力,但也认识到知识是不完整的。

可以在很多地方设置应用程序 ID,特别是在 AndroidManifest 和 build.gradle 文件中。

例子:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.domain.app">
    <!-- io.flutter.app.FlutterApplication is an android.app.Application that
         calls FlutterMain.startInitialization(this); in its onCreate method.
         In most cases you can leave this as-is, but you if you want to provide
         additional functionality it is fine to subclass or reimplement
         FlutterApplication and put your custom class here. -->
    <uses-permission android:name="android.permission.INTERNET"/>

例子:

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.domain.appname"
        minSdkVersion 23
        targetSdkVersion 29
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }

    flavorDimensions "appFlavor"
    productFlavors {
        qa {
            dimension "appFlavor"
            applicationId "com.domain.appflavor1"
        }
        prod {
            dimension "appFlavor"
            applicationId "com.domain.appflavor2"
        }
        dev {
            dimension "appFlavor"
            applicationId "com.domain.appflavor3"
        }
    }

应用程序 ID 也出现在 Kotlin MainActivity.kt 文件中,以及 src 目录下该文件的路径中。据我所知,此处指定的值对应用程序功能没有任何影响。但它肯定在某处有一定的相关性。

在各个配置集中为 build.gradle 中的各个风味设置的值按预期工作。

但是当您有多个 AndroidManifest.xml 文件时——例如,每种风格一个,这些都必须指定与主 AndroidManifest.xml 文件中的完全相同的包。尝试忽略该值会导致错误。主 AndroidManifest 中的值似乎无关紧要,只要它与特定风格 AndroidManifest 中的名称匹配即可

但这没有任何意义——包名和applicationID怎么会不同,app build.gradle和AndroidManifest之间怎么会冲突呢?

究竟哪个会被用来做什么?

我在 S.E 上还有一个未解决的问题,我正在与 MissingPlugin 异常相关的问题作斗争,我认为这可能与这里有关:Flutter issues with release-mode only APK builds

【问题讨论】:

  • 您确定必须为每种口味添加一个 Android Manifest 吗?在我从事的一个具有风味的项目中,每个调试、配置文件和发布都只有 android 清单。..
  • @MathisFouques 是的,我使用它们为每种风味提供唯一的名称和图标。如果消除 AndroidManifestfiles 将是有益的,我可能可以在没有图标和名称的情况下生活,直到我找到另一个解决方案。

标签: flutter build android-productflavors android-build-flavors applicationid


【解决方案1】:

对于 productFlavors 块中的每个风味,您可以重新定义 applicationId 属性,或者您可以改为使用 applicationIdSuffix 将一个段附加到默认应用程序 ID

https://developer.android.com/studio/build/application-id

【讨论】:

  • 但 build.gradle 仅适用于 android。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 2017-06-26
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多