android - 使用 gradle 重命名 apk -> 两次获得相同的 apk

标签 android gradle android-studio build.gradle

我有一个具有不同风格的应用程序 - 每种风格都有两个构建类型。

重命名 list 中的一些行后,我也重命名了 apk。一切正常 - 我只是想知道为什么我两次获得相同的 apks?一次不改名一次改名...

具有不同名称的同一应用的简短示例:

  • “myApp-flavor-buildType.apk”(未重命名)
  • “myApp-appName-buildType-version.apk”(重命名为 apk)

这是我的 build.gradle 文件的代码:

// *** OVERRIDE data in MANIFEST ***
android.applicationVariants.each { variant ->
    variant.processManifest.doLast {
        overrideDataInManifest(variant)
    }
}

def overrideMapsKey(buildVariant){
    def appName = getAppName(buildVariant)

    // override line ... this is not necessary to this question

    renameAPK(buildVariant, appName)
}

// *** RENAME APK ***
def renameAPK(buildVariant, appName){
    def apk = buildVariant.packageApplication.outputFile;
    def newName = "";

    // get data for apk renaming
    def versionName = android.defaultConfig.versionName 
    def versionNameSuffix = buildVariant.buildType.versionNameSuffix
    if(versionNameSuffix.toString().equals("null"))
        versionNameSuffix = ""
    def buildTypeOfApp= buildVariant.buildType.name 

    if (buildVariant.zipAlign) {
        newName = "etscanner-" + appName + "-" + buildTypeOfApp.toUpperCase() + "-v" + versionName + versionNameSuffix + ".apk"
    }else{
        newName = "etscanner-" + appName + "-" + buildTypeOfApp.toUpperCase() + "-v" + versionName + versionNameSuffix + "-ALIGNED" + ".apk"
    }
    buildVariant.packageApplication.outputFile = new File(apk.parentFile, newName);
}

只是想知道发生了什么,以及是否可以在没有两个 apk 的情况下完成相同的任务。

最佳答案

对于 zipAlign 选项设置为 true 的变体,始终会有两个 APK 文件。首先 gradle 构建原始 APK 文件,然后对其进行 zipalign 并在不删除原始文件的情况下生成优化版本。

buildVariant.packageApplication.outputFile 是构建过程的中间产物,根据我的观察,一个始终是未对齐的 APK 文件。

buildVariant.outputFile 是应用 zipAlign 选项的最终输出。

另一方面,您可能想要更正 build.gradile 文件,它实际上将未对齐版本的 APK 文件重命名为“对齐”版本,并保持 zipalign APK 文件不变。这是我的修改版本:

if (buildVariant.zipAlign) {
    newName = "etscanner-" + appName + "-" + buildTypeOfApp.toUpperCase() + "-v" + versionName + versionNameSuffix + "-ALIGNED.apk"
    buildVariant.outputFile = new File(apk.parentFile, newName);
}

newName = "etscanner-" + appName + "-" + buildTypeOfApp.toUpperCase() + "-v" + versionName + versionNameSuffix + "-UNALIGNED" + ".apk"
buildVariant.packageApplication.outputFile = new File(apk.parentFile, newName);

关于android - 使用 gradle 重命名 apk -> 两次获得相同的 apk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18507660/

相关文章:

java - Firebase 数据库检索未按顺序执行

java - Eclipse - Android 应用程序在启动时崩溃?

android - 程序类型已存在-错误

android - android 设置中的首选项变灰

android - 为 UsbDeviceConnection 设置波特率

java - 从 unity Activity 返回到 android studio 中的 MainActivity

java - 到底什么时候请求运行时许可?

java - 致命异常 : main java. lang.NoClassDefFoundError : org. apache.commons.net.ftp.FTPClient Android Studio

android - 如何在使用不同风格的相同命名类时防止重复类错误?

maven - Gradle/Maven项目fork提供了原始 Artifact (仅下载fork)