【问题标题】:Add signing info to apk file name in gradle将签名信息添加到 gradle 中的 apk 文件名
【发布时间】:2024-05-23 17:45:02
【问题描述】:

在我的例子中,旧的 apk 文件名包含未对齐和未签名的签名信息。这些旧文件名在模块 gradle 文件中用这种方法重命名:

 applicationVariants.all { variant ->
    variant.outputs.each { output ->
        output.outputFile = new File(
                output.outputFile.parent,
                output.outputFile.name.replace(".apk", "-${variant.versionCode}-${variant.versionName}.apk"))
    }
}

版本代码和版本名称设置如下:

versionCode buildNumber()
versionName "${versionMajor}.${versionMinor}"

在此重命名的结果中,签名信息(未对齐或未签名)位于变体版本代码之前。

现在我正在使用 gradle:3.0.0-beta6。因此我无法再使用旧方法,因为 outputFile 更改为只读且无法重命名。现在我尝试在我的 gradle 中添加一个新的重命名方法,如下所示:

android.applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${archivesBaseName}-${variant.baseName}-${variant.versionCode}-${variant.versionName}.apk"
    }
}

有了这个新的 apk 名称几乎看起来像旧的,但在 baseName 和 versionCode 之间缺少签名信息。 该应用程序仍未签名,因此应该有未签名的信息。

有谁知道我如何能够在不进行硬编码的情况下添加此信息?

如果应用程序被签名,此信息应该会消失,但如果可能的话,不要更改重命名方法。

【问题讨论】:

    标签: android android-studio android-gradle-plugin android-app-signing


    【解决方案1】:

    为了有人正在搜索这个问题,我用这段代码解决了这个问题:

     android.applicationVariants.all { variant ->
        variant.outputs.all {
            outputFileName = "${archivesBaseName}-${variant.baseName}${variant.variantData.isSigned()?"":"-unsigned"}-${variant.versionCode}-${variant.versionName}.apk"
        }
    }
    

    【讨论】:

    • 从Android Gradle Plugin 4.1.0开始variant.variantData.isSigned()改为variant.isSigningReady()
    • @Mickverm 你怎么知道它什么时候改变了?它不再起作用,并且不确定变化是什么。找不到相关文档
    最近更新 更多