我有一个具有2种风味尺寸的应用程序。第一个维度,让我们称之为"品牌"有两种类型: "草莓","青色"
两者都有不同的applicationIds,但我们只关注其中一个。让我们说"青色"有applicationId" com.cyan.app"。
第二种风味维度叫做环境"。它有两个值: " prod"," test"。
我还有两种构建类型: "调试","发布"
现在我感兴趣的是,如何配置gradle脚本,这样每当我构建调试版本时,都会有applicationIdSuffix,它将包含" debug"字符串和环境名称字符串。所以在上面的例子中它将是: com.cyan.app.debug.prod和com.cyan.app.debug.test
但是如果我构建一个应用程序的发布版本,我想留下主要的applicationId,所以com.cyan.app,无论环境风味。
有什么办法可以用gradle和android gradle插件实现吗?
答案 0 :(得分:3)
好的,我在周末坐下来并且能够实现这一目标(以及更多)。在这里分享,以便其他人可以受益于谁想要实现我在问题中发布的相同的事情。
首先,我们必须将自己附加到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是一个简单的方法来获取我感兴趣的特定维度的味道(不是一个大问题所以我不会在这里使用此代码发送垃圾邮件)。当我们得到味道时,我们将它添加到mergedFlavor对象的包名称中,我们就完成了。
我还设法不仅更改了包名,而且还动态更改了应用程序启动器名称,但是StackOverflow上有很多解决方案,所以这里我不会多余。总而言之,改变包名称的解决方案是有效的。希望它会帮助像我这样的人帮助我。