使用Android Studio Flavors进行Android白色标记

时间:2017-08-10 23:45:06

标签: android android-studio white-labelling

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

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

我认为我可以通过以下问题模仿其中的大部分内容:

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

  2. 是否可以让每个APK在生成时拥有自己的应用程序名称,例如44-MYAPP.apkAppHeyYou.apk用于另一种风格?我看到的示例似乎是在APK名称的末尾加上后缀,我需要一个全新的APK名称(并且没有加上“WhereIsThat.apk”。

  3. 我可以让它构建风格,然后使用Release中的版本或默认值将其复制并重命名(例如MyApp.apk并复制到44-MyApp.apk)配置?由于接近100,因此每个版本配置中的更改都不适用于每个版本。

  4. 有没有办法只需按一下按钮就可以强制生成所有白色标签。再说一遍,为每一个做这件事都是不切实际的。

  5. 感谢您的帮助!

    更新

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

    1. 定义风味
    2. 构建它们时,给它们一个风味的名称,但前面加上版本代码(因此版本代码为44的Red flavor变为“44-Red.apk”)。
    3. 最后,我的应用程序的build.gradle如下所示:

      AndroidManifest.xml

      当我获得白色标签工作和所有这些的自动运行时,我也将在此处解决。

1 个答案:

答案 0 :(得分:1)

我为不知道精确的艺术术语而道歉,但是......

  

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

如果您未在versionCode块中指定versionNameproductFlavors,则会应用defaultConfig块中定义的任何内容。

  

是否有可能让每个APK在生成时拥有自己的应用程序名称,例如AppHeyYou.apk和WhereIsThat.apk的另一种风格?我看到的示例似乎是在APK名称末尾加上后缀,我需要一个全新的APK名称(并且没有添加“Release”)。

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

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

我是否可以使用AndroidManifest.xml中的版本或默认配置将其复制并重命名(例如MyApp.apk并复制到44-MyApp.apk)?由于接近100,因此每个版本配置中的更改都不适用于每个版本。

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

  

有没有办法只需按一下按钮就可以强制生成所有白色标签。再说一遍,为每一个做这件事都是不切实际的。

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

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