Android White Labeling using Android Studio Flavors



我最近从Eclipse迁移到Android Studio,经过一些努力,应用程序已经启动并运行。现在我面临第二个障碍 - 生成应用程序的白标版本。我已经阅读了Android Studio中有关Flavor机制的所有内容,我相信它会起作用,但我仍然有很多问题。

但首先让我解释一下我们使用 Ant 的当前白标机制(由于支持库的升级,我认为我不能再使用它了,因为它确实需要在 lib 文件夹中存在 Jar 文件?这个 Ant 脚本读取一个build.xml文件,其中我们指定了新值(strings.xmlcolors.xml(和特定于白标的资源文件夹(图像等(的位置。它基本上复制新文件(只有少数文件不同(,然后运行构建,重命名APK并为其提供新的应用程序ID。因此,我只需按一下按钮,就可以一举建立 100 多个白色标签。此构建中包含一种复制机制,该机制会创建具有关联版本的新APK的副本,因此,如果基本风格MYAPP.apk并且我们使用的是版本44,它会复制该版本并制作一个我们保留的44-MYAPP.apk,以防我们需要回滚那些直接从我们的S3而不是GooglePlay中提取的客户 - 是的, 这是对其中一些人的要求。

我想我可以用口味来模仿其中的大部分,并提出以下问题:

  1. 我希望所有版本都具有相同的版本名称和版本代码。如果我将风格配置值留空,他们会从 AndroidManifest.xml 文件中获取版本吗?

  2. 是否可以让每个APK在生成时都有自己的应用程序名称,例如AppHeyYou.apkWhereIsThat.apk另一种风格?我看到的示例似乎在APK名称的末尾附加了一个后缀,我需要一个全新的APK名称(并且没有"Release"(。

  3. 我是否可以让它构建风格,然后使用AndroidManifest.xml中的版本或默认配置复制并重命名它(例如MyApp.apk并复制到44-MyApp.apk(?由于有接近 100 个,因此在每个风格配置中更改此设置对于每个版本都不切实际。

  4. 有没有办法通过一键强制生成所有白标。同样,对每个都这样做是不切实际的。

感谢您的任何帮助!

更新

只是为了提供帮助,我想我会展示我最终得到的完整 gradle 脚本。以下是它的作用:

  1. 定义口味
  2. 在构建它们时,给它们命名为风格,但版本代码在前面(因此版本代码为 44 的 Red 风格变为"44-Red.apk"(。

最后,我的应用程序的build.gradle看起来像这样:

buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.+'
}
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
repositories {
maven { url 'https://maven.fabric.io/public' }
}

android {
compileSdkVersion 25
buildToolsVersion '25.0.2'
defaultConfig {
applicationId "com.mycompany.ourapp"
minSdkVersion 14
targetSdkVersion 23
versionCode 62
versionName "1.0.62"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
signingConfig signingConfigs.config
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
productFlavors {
Red {
setProperty("archivesBaseName", "red")
}
Blue {
setProperty("archivesBaseName", "blue")
}
}

applicationVariants.all { variant ->
variant.outputs.each { output ->
def path = "C:/AndroidBuilds/MyCompany.Build/" + "/"
def SEP = "-"
def flavor = variant.productFlavors[0].name
def version = variant.versionCode
def newApkName = path + version + SEP + flavor
def newApkNameNoVersion = path + flavor
output.outputFile = new File(newApkName + ".apk")
}
}
dependencies {
}
}

当我让白标工作并自动运行所有这些时,我也会解决这个问题。

我很抱歉不知道艺术的确切等级术语,但是......

我希望所有版本都具有相同的版本名称和版本代码。如果我将风格配置值留空,他们会从 AndroidManifest.xml 文件中获取版本吗?

如果未在productFlavors块中指定versionCodeversionName,则将应用您在defaultConfig块中定义的任何内容。

是否可以让每个APK在生成时都有自己的应用程序名称,例如AppHeyYou.apk和WhereIsThat.apk用于另一种口味?我看到的示例似乎在APK名称的末尾附加了一个后缀,我需要一个全新的APK名称(并且没有附加"发布"(。

查看applicationVariants属性。它会让你写一些类似的东西

applicationVariants.all { variant ->
variant.outputs.each { output ->
def newName = [build your filename here]
output.outputFile = new File(output.outputFile.parent, newName);
}
}

我是否可以让它构建风格,然后使用 AndroidManifest 中的版本或默认配置复制并重命名它(例如 MyApp.apk并复制到 44-MyApp.apk(.xml?由于有接近 100 个,因此在每个风格配置中更改此设置对于每个版本都不切实际。

在上面的applicationVariants.all块中,您可以访问defaultConfig.versionCode.versionName以创建文件名包含版本控制信息的副本。

有没有办法通过一键强制生成所有白标。同样,对每个都这样做是不切实际的。

我相信你可以gradlew assemble运行命令。运行gradlew tasks输出以下内容(以及许多其他任务(:

Build tasks
-----------
assemble - Assembles all variants of all applications and secondary packages.

最新更新