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

两者都有不同的applicationIds,但我们只能专注于其中之一。假设“青色”的applicationId为“com.cyan.app”。

第二个 flavor 维度称为“环境”。它具有两个值:
“产品”,“测试”。

我也有两种构建类型:
“调试”,“发布”

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

但是,如果我构建应用程序的发行版,则无论环境如何,我都希望保留主要的applicationId,即com.cyan.app。

有什么办法可以用gradle和android gradle插件实现呢?

最佳答案

好的,我在周末坐下了,就能做到(甚至更多)。在这里分享,以便其他人可以受益于希望实现与我在问题中发布的内容相同的人。

因此,首先我们必须将自己附加到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是一种简单的方法,可以获取我感兴趣的特定维度的样式(不是一个大问题,因此我不会在此处使用此代码发送垃圾邮件)。当我们获得 flavor 时,将其添加到mergedFlavor对象的包名称中,就可以完成了。

我不仅设法更改了程序包名称,而且还动态更改了应用程序启动器名称,但是在StackOverflow上有很多解决方案,因此在这里我不再赘述。总而言之,更改软件包名称的解决方案有效。希望它将帮助像我这样的人。

10-07 17:49