我最近从 Eclipse 迁移到 Android Studio,经过一番努力,应用程序启动并运行。现在我面临第二个障碍——生成应用程序的白标版本。我已经阅读了有关 Android Studio 中的 Flavor 机制的所有内容,我相信它会起作用,但我仍然有几个问题。
但首先让我解释一下我们使用 Ant 使用的当前白标机制(由于支持库的升级,我认为我不能再使用它了,因为它确实需要在 lib 文件夹中存在 Jar 文件?)。这个 Ant 脚本读取一个build.xml
文件,我们在该文件中指定了新值(strings.xml
和colors.xml
)的位置以及特定于白标的资源文件夹(图像等)。它基本上复制新文件(只有少数不同),然后运行构建,重命名 APK 并为其提供新的 App Id。因此,只需按一下按钮,我就可以一举制作超过 100 个白色标签。此构建中包含一个复制机制,它创建新 APK 的副本以及与之关联的版本,所以如果基本风格是MYAPP.apk
我们在第 44 版上,它会复制它并制作一个44-MYAPP.apk
我们保留的版本,以防我们需要为那些直接从我们的 S3 而不是从 GooglePlay 拉取的客户回滚 - 是的,这是其中一些客户的要求。
我想我可以用口味来模仿其中的大部分内容,但有以下问题:
我希望所有构建都具有相同的版本名称和版本代码。如果我将风味配置值留空,他们会从 AndroidManifest.xml 文件中获取版本吗?
是否可以让每个 APK 在生成时都有自己的应用程序名称,这样
AppHeyYou.apk
或者WhereIsThat.apk
为了另一种风格?我看到的示例似乎在 APK 名称的末尾添加了一个后缀,我需要一个全新的 APK 名称(并且没有添加“Release
”)。我可以让它构建风味,然后使用来自或默认配置的版本复制它并重命名它(例如
MyApp.apk
并复制到)?由于有接近 100 个,因此在每个版本中更改每个风味配置都不实用。44-MyApp.apk
AndroidManifest.xml
有没有办法通过单次按下按钮来强制生成所有白色标签。同样,为每个人都这样做是不切实际的。
谢谢你的帮助!
更新
只是为了提供帮助,我想我会展示我最终得到的完整 gradle 脚本。这是它的作用:
- 定义口味
- 在构建它们时,给它们提供风味的名称,但在前面加上版本代码(因此版本代码为 44 的红色风味变为“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 {
}
}
当我让白色标签工作并为所有这些人自动运行时,我也会对此进行处理。