gpt4 book ai didi

android - ApplicationId 以构建类型和 flavor 维度为条件

转载 作者:行者123 更新时间:2023-11-29 17:33:05 24 4
gpt4 key购买 nike

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

两者都有不同的 applicationIds,但我们可以只关注其中一个。假设“cyan”有 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 上有很多解决方案,因此我不会在这里重复。总而言之,更改包名称的解决方案有效。希望它能像帮助我一样帮助其他人。

关于android - ApplicationId 以构建类型和 flavor 维度为条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31859079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com