3

我最近升级到了 Android Studio 2.3,现在我要为我现有的一个应用程序生成一个签名的 APK,Build / Generate signed APK...就像我一直做的那样。之前我总是得到一个名为MyApp-1.0.apk1.0版本名称在哪里)的文件,但现在我得到MyApp-1.0-unaligned.apk.

我注意到有一些新选项可供选择V1 (Jar signature)和/或V2 (Full APK Signature. 按照文档中的建议,我选择了两者。然而,文档确实这么说

注意:如果您使用 APK 签名方案 v2 对您的应用进行签名,并对该应用进行进一步更改,则该应用的签名将失效。因此,在使用 APK 签名方案 v2 对您的应用进行签名之前,而不是之后,请使用 zipalign 等工具。

在我的build.gradle我有

buildTypes {
    debug{
        // Enable/disable ProGuard for debug build
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        zipAlignEnabled true
    }

    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        zipAlignEnabled true
    }
}

我已经看到一些人在使用 Android gradle 构建工具的 alpha 版本时遇到了类似的问题,但我正在使用2.3.0

classpath 'com.android.tools.build:gradle:2.3.0'

那么,在签名之前,如何使 APK 生成过程对我的 APK 进行 zipalign?

4

1 回答 1

1

该问题是由外部 gradle 脚本管理生成的 APK 的文件名引起的。我完全忘记了那个脚本,现在它开始无法检查 APK 是否已压缩,因为 Google 引入了 v2 签名。

我有这个脚本包含在我的build.gradle喜欢中

apply from: '../../export_signed_apk.gradle'

脚本本身看起来像这样

android.applicationVariants.all {
    variant -> def appName

    //Check if an applicationName property is supplied; if not use the name of the parent project.
    if (project.hasProperty("applicationName")) {
        appName = applicationName
    } else {
        appName = parent.name
    }

    variant.outputs.each {
        output -> def newApkName

        //If there's no ZipAlign task it means that our artifact will be unaligned and we need to mark it as such.
        if (output.zipAlign) {
            newApkName = "${appName}-${variant.versionName}.apk"
        } else {
            newApkName = "${appName}-${variant.versionName}-unaligned.apk"
        }

        output.outputFile = new File(output.outputFile.parent, newApkName)
    }
}

output.zipAlign自应用 V2 签名以来似乎失败了,因此myApp-1.0-unaligned即使签名的 APK 确实是 zipaligned,它也会返回。

我只是删除了 IF 语句,只是保留

newApkName = "${appName}-${variant.versionName}.apk"
于 2017-04-04T18:00:49.503 回答