【问题标题】:ApplicationId conditioned by build type and flavour dimensionApplicationId 由构建类型和风味维度决定
【发布时间】:2015-08-06 14:55:25
【问题描述】:

我有一个具有 2 个风味维度的应用程序。第一个维度,我们称之为“品牌”有两种类型: “草莓”、“青色”

两者都有不同的 applicationId,但我们只能关注其中一个。假设“青色”具有 applicationId “com.cyan.app”。

第二个风味维度称为“环境”。它有两个值: “产品”、“测试”。

我还有两种构建类型: “调试”、“发布”

现在我感兴趣的是如何配置 gradle 脚本,这样每当我构建调试版本时,都会有 applicationIdSuffix 包含“调试”字符串和环境名称字符串。所以在上面的例子中,它将是: com.cyan.app.debug.prod 和 com.cyan.app.debug.test

但是,如果我构建应用程序的发布版本,我想保留主 applicationId,所以 com.cyan.app,无论环境风格如何。

有什么方法可以通过 gradle 和 android gradle 插件实现吗?

【问题讨论】:

  • environment 不是产品风味维度,恕我直言。 prod=releasetest=debug 作为构建类型,或者 prodtest 只是其他自定义构建类型。为什么您认为environment 应该是产品风味维度?
  • 首先感谢您的回答并抽出宝贵的时间。其次,我们可以坚持这个话题吗?让我们将维度称为“dimension_1”和“dimension_2”以及变体“variant_1”、“variant_2”等。这对主题或维度的问题有什么影响?恕我直言,这与问题无关。答案是可能或不可能。如果有人确实知道如何实现我的要求,我将不胜感激。
  • “第二,我们能不能坚持一下这个话题?” ——我坚持主题,主题是“我怎样才能获得我想要的 applicationId 值”,如果你没有多个风味维度,在这种情况下会更简单。对于试图提供帮助,我深表歉意,我将采取措施确保今后不再这样做。
  • 我不是一个冲突的人,所以我不会试图与你争吵你的答案。就像我说过的,我感谢您抽出宝贵的时间,即使您无法帮助我解决我提出的确切问题。如果其他人知道如何结合 android gradle 插件在 gradle 中寻找我想要的东西,我将非常感激。只是为了澄清我不是在寻找一个涉及简化我的案例的解决方案。我不感兴趣。我想为我提出的确切情况找到一个解决方案,因此有多种构建类型和多种风味维度(具有多种风味)。

标签: android gradle


【解决方案1】:

好的,我在周末坐下来并且能够实现这一点(以及更多)。在这里分享,以便其他希望实现与我在问题中发布的相同目标的人受益。

所以首先我们必须像这样将自己附加到 applicationVariants.all 任务:

applicationVariants.all { variant ->
  //We tweak the package name and application name depending on the variants (so that we can have multiple applications installed on the phone, depending on the 
  tweakPackageName(variant);
  replaceInManifest(variant, 'android:label=\"@string/app_name\"', 'android:label=\"@string/
}

我已将逻辑与其他方法分开,以免代码阻塞。 TweakPackageName 方法看起来很简单(事实证明):

/**
 * Method that alters the package name in order to have many different variants of application installed simultanously on a device.
 */
ext.tweakPackageName = { variant ->
  def envFlavor = getFlavorOfDimension(variant, flavorDimEnvironmentName);
  variant.mergedFlavor.applicationId = variant.mergedFlavor.applicationId + ".${envFlavor.name.toLowerCase()}";
}

getFlavorOfDimension 是一种获取我感兴趣的特定维度风味的简单方法(不是什么大问题,所以我不会在这里用这段代码发送垃圾邮件)。当我们获得风味时,我们将其添加到 mergeFlavor 对象的包名中,我们就完成了。

我还设法不仅更改了包名称,而且还动态更改了应用程序启动器名称,但是 StackOverflow 上有很多解决方案,所以我不会在这里重复。总而言之,更改包名称的解决方案有效。希望它能帮助像它帮助我的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-08
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    相关资源
    最近更新 更多