【问题标题】:How to have multiple configurations for a single Android build Product Flavour when assembling with Gradle?使用 Gradle 组装时,如何为单个 Android 构建 Product Flavor 进行多种配置?
【发布时间】:2015-05-11 21:01:09
【问题描述】:

我在 Android Studio 中有一个项目,有两种产品风格。除了其中的一些硬编码值外,它们实际上是相同的,例如URL、ID 以及是否激活一些附加功能。

我希望能够只使用一种风格并将这些硬编码值移出某种配置/属性文件,现在的通用代码可以根据需要在启动时读取或预加载。然后我想要某种 gradle 命令,使用不同的配置/属性文件创建不同的 APK。

这样,如果我想为应用程序创建另一个配置(我上面提到的属性的组合),我不必去复制(和维护)另一个 Product Flavor 来执行此操作。

如果这一切都可以在 Android Studio 而不是命令行中完成,那就太好了。有人可以告诉我这样做的方法吗?

命令行解决方案也可以接受,但理想情况下它必须独立于操作系统,因为我们的一些开发人员在 MAC 上工作,而其他开发人员在 PC 上工作。

我和我周围的其他 Android 开发人员自己研究了这个问题。但是我们在 gradle 框架中找不到任何可以实现我所概述的灵活性的东西。

除了可以在 build.gradle 中设置的预配置 android 参数之外,我们找不到任何可以配置我们自己的会影响构建的属性的地方。

我们可以看到的唯一解决方案是将硬编码值更改为我们想要的新配置的重复产品风味。我们希望不惜一切代价避免这种情况。

【问题讨论】:

  • HYTA - 你试过了吗?您有任何具体问题,但“这可能吗”?因为这些问题的答案是“是/否”。请具体说明您的问题。
  • 我已经更新了我原来的帖子。对不起,如果我含糊其辞。就像我上面所说的,我们已经研究了这个问题,但除了创建重复的产品风味之外,没有人发现任何东西。

标签: android android-studio gradle android-gradle-plugin android-productflavors


【解决方案1】:

看来我问得太早了:D。

我们公司的其他人设法使用构建类型解决了这个问题。

例如,假设我们想要一个布尔变量来说明应用程序是否应该在“测试模式”下运行。我们可以使用 buildConfigField 参数定义一个“TEST_MODE_ENABLED”变量。您可以在 gradle 文件中定义一个“测试”构建类型,如下所示(参见最后一个构建类型):

buildTypes {
    debug {
        debuggable true
        buildConfigField "boolean", "TEST_MODE_ENABLED", "false"
    }

    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        buildConfigField "boolean", "TEST_MODE_ENABLED", "false"
    }

    testing {
        debuggable true
        buildConfigField "boolean", "TEST_MODE_ENABLED", "true"
    }
}

然后可以在java代码中通过引用来访问这个参数和其他参数:

BuildConfig.TEST_MODE_ENABLED

有了这个概念,我们可以创建任意数量的配置,然后使用这些额外的构建类型定义额外的构建变体。

我们也可以将它与 gradlew 一起使用,例如:

gradlew assemble[ProductFlavour][BuildType]

希望我解释得当,并且可能对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 2013-07-13
    • 2016-06-23
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多