- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近,我想出了如何使用占位符进行 Manifest Mergers。我在我的应用程序中实现了它,在大多数情况下,我对结果非常满意 - Gradle-only solution to modify App name based on Build Variant
之前,您必须创建一个新的稀疏 String Resource
只有一个字符串具有您想要在不同资源上更改的属性,例如 flavor 和构建类型。就个人而言,我不认为这种方法真的很干净。简单易行,是的,但不干净。
从那我创建了以下工作。但是,我不喜欢重复的代码,我的每个人都是 Flavor
s 将有重复的代码。这是可以抽象出来的东西吗?可能可以放在defaultConfig
?
例如,在下面的代码中,有什么方法可以移动 manifestPlaceholders
存在于每个 Flavor 中的代码,并将其抽象为 defaultConfig
不知何故,我只能定义一次?
android {
...
ext {
APP_NAME = "App Name"
HUB_NAME = "Hub"
}
defaultConfig {
...
}
productFlavors {
entity_1 {
versionNameSuffix ' - Entity_1'
applicationIdSuffix 'entity_1'
manifestPlaceholders = [ applicationLabel: APP_NAME + versionNameSuffix ]
}
entity_2 {
versionNameSuffix ' - Entity_2'
applicationIdSuffix 'entity_2'
manifestPlaceholders = [ applicationLabel: APP_NAME + versionNameSuffix ]
}
...
entity_n {
versionNameSuffix ' - Entity_n'
applicationIdSuffix 'entity_n'
manifestPlaceholders = [ applicationLabel: APP_NAME + versionNameSuffix ]
}
hub {
versionNameSuffix ' - Hub'
applicationIdSuffix 'hub'
manifestPlaceholders = [ applicationLabel: HUB_NAME ]
}
}
buildTypes {
release {
...
}
}
applicationVariants.all { variant ->
if (variant.buildType.name != "release") return
if (variant.flavorName != "hub") {
variant.mergedFlavor.manifestPlaceholders = [applicationLabel: APP_NAME]
}
}
applicationLabel
s 以下。我使用这些来确定主屏幕上应用程序的名称。
Flavor Debug App Name Release App Name
-------- -------------- ----------------
entity_1 App Name - Entity_1_name App Name
entity_2 App Name - Entity_2_name App Name
... ... ...
entity_n App Name - Entity_n_name App Name
hub Hub Hub
最佳答案
想要的东西很容易就能完成。
问题中的当前实现是首先尝试创建最具体的名称,然后删除特定风格中不需要的信息。
有了相反的想法,我需要首先创建最通用的名称,然后添加特定口味所需的信息。
android {
...
ext {
APP_NAME = "App Name"
HUB_NAME = "Hub"
}
defaultConfig {
...
manifestPlaceholders = [ applicationLabel: APP_NAME ]
}
productFlavors {
entity_1 {
versionNameSuffix ' - Entity_1'
applicationIdSuffix 'entity_1'
}
entity_2 {
versionNameSuffix ' - Entity_2'
applicationIdSuffix 'entity_2'
}
.
.
.
entity_n {
versionNameSuffix ' - Entity_n'
applicationIdSuffix 'entity_n'
}
hub {
versionNameSuffix ' - Hub'
applicationIdSuffix 'hub'
manifestPlaceholders = [ applicationLabel: HUB_NAME ]
}
}
buildTypes {
release {
...
}
}
// BEFORE the applicationVariants.all { ... } code runs, this is what all the applicationLabel look like. We are close, but need to ADD to them...
// Flavor Debug App Name Release App Name
// -------- -------------- ----------------
// entity_1 App Name App Name
// entity_2 App Name App Name
// ... ... ...
// entity_n App Name App Name
// hub Hub Hub
applicationVariants.all { variant ->
// Don't modify the release build or the hub flavor. They are good already.
if (variant.buildType.name == "release" || variant.flavorName == "hub") return
variant.mergedFlavor.manifestPlaceholders = [applicationLabel: APP_NAME + variant.mergedFlavor.versionNameSuffix]
}
// AFTER the applicationVariants.all { ... } code runs, this is what all the applicationLabel look like. We are done!
// Flavor Debug App Name Release App Name
// -------- -------------- ----------------
// entity_1 App Name - Entity_1_name App Name
// entity_2 App Name - Entity_2_name App Name
// ... ... ...
// entity_n App Name - Entity_n_name App Name
// hub Hub Hub
关于android - Gradle Flavor 变量的抽象为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37776335/
因此,从标题中可以看出,我有重复的问题。 您不允许在自己的口味和主目录中定义相同的文件。但是您可以使用xml资源执行此操作。 那么它是如何工作的呢?例如,我的构建变体是 RedStagingDebug
我正在使用 Android Studio(v 2.1,gradle 插件 v 2.1.0)开发一个 Android 应用程序。我的应用程序有多个版本,它们共享很多通用代码,因此我决定使用 flavor
productFlavors { India { } USA { } } 以2种产品口味为例 1。印度2.美国 构建变体的总数将
有没有一种方法可以结合构建类型和风格来获取构建变体,以便从最特定的res文件夹中获取资源? 可以说我有src/mainsrc/debugsrc/flavor1src/flavor2 在我的src/ma
我无法让产品口味发挥作用。我想要实现味道里面的味道例如,我有 2 个应用程序,我是这样声明的, productFlavors { abc { applicat
我收到类似 Error: Flavor 'fdroid' has no flavor dimension 这样的错误。将项目导入 Android Studio 后,请帮助我我在这里没有改变任何东西,它
一种 flavor 是否可能基于另一种 flavor ? 例如build.gradle: productFlavors { flavor1 { flavorBase "main
我有 Android Studio 1.3.1。当我打开旧项目时,Grandle 1.0.0 版本较低,升级它,更改 flavorGroups => flavorDimensions,packageN
在我当前的应用程序中,我有 2 个构建,我们称它们为 build 1 和 build 2。我知道两种风格可以共享公共(public)代码/资源,但也可以有单独的代码和资源,如下所示: 我想做的是扩展
我的母语不是英语,所以我不太了解“ flavor ”的含义可能是它指的是正则表达式语法??如果有的话,有多少正则表达式语法? BRE ERE Perl 等?? 最佳答案 正则表达式引擎实现的功能、它“
因此,我已经从事了一段时间的白色标签样式项目,并且在扩展性方面遇到了一些问题。具体来说,根据项目的工作方式,我需要能够基于每个客户端支持多个后端环境,每个后端环境都具有唯一的凭据。 我已经使用两种口味
我们正在尝试开发 2 种 gradle 口味以加快我们的开发过程: 将我们的库编译为模块的本地风格 使用我们库的最新快照的远程版本 我在 gradle 中声明了两种口味: productFlavors
我的应用程序级 build.gradle 文件中有以下内容: flavorDimensions "store", "features" productFlavors { amazon {
我有一个 Android 应用程序,有两种版本,免费版和收费版。我想创建另一种 flavor flavorExt,它基于免费 flavor 但具有一些附加功能。我已经使用 gradle 中的 sour
我在使用源代码集时遇到了一些麻烦,我有一个包含大部分常用代码的主要源代码集,但是之前的开发人员包含了一个构建风格开关,例如: if (Application.inKiosk) {
这个问题在这里已经有了答案: Android Flavors : Multiple java and src directories for each flavor (2 个答案) 关闭 7 年前。
任何人都可以向我解释如何将我的每种风格用于主要和特定于风格的 java/src 目录吗?我的目标是让目录被不止一种口味使用,但不是全部。 例如我有 3 种口味:A1、A2 和 B。 所有 favor
我的源代码树: app/src/main/java/com/example/A.java app/src/main/java/com/example/B.java 我想使用 productFlavor
我的应用程序包含 A 和 B 两种版本。当我运行 ./gradlew app:test 时,所有版本 A 的测试都通过,而版本 B 失败。我还有两种构建类型 debug 和 release。 我的架构
我知道我可以在 GitHub Flavored Markdown 中使用“代码”来突出显示代码片段。但我无法显示片段的行号。有没有办法做到这一点? ```javascript var s = "Jav
我是一名优秀的程序员,十分优秀!