使用新签名功能自动构建和签名Gradle

时间:2017-06-19 09:37:56

标签: c# android gradle automation signing

我有一个Android Studio项目和一个C#脚本,它构建了这个项目的版本:首先我使用CMD.exe创建一个未签名的版本APK,然后我使用jarsigner签署该应用程序(这需要构建apk,甚至无需打开Android Studio并能够更改密钥库)。

我最近更新了Android Studio,现在当我从IDE生成签名APK时,有一个新选项:签名版本 - V1(Jar签名)和V2(完整APK签名)。在此更新后,如果我使用我的C#脚本构建APK,则Google Play不会接受APK文件:它说我的APK未经过优化,我应该使用优化工具并重新上传。我相信这两个变化是相关的。

我的问题是如何使用jarsigner选择签名版本?我在jarsignergradlew帮助中找不到相关选项。

这是我的C#简化代码:

//assemble an unsigned APK
Process cmd = new Process()
cmd.StartInfo.FileName = "CMD.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();        
cmd.StandardInput.WriteLine(@"cd /d """ + Application.StartupPath + @"""");
cmd.StandardInput.WriteLine(@"gradlew assembleRelease");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();

//sign the APK
string args = @"-keystore """ + keyPath + @""" -storepass " + alias + 
@" """ + Application.StartupPath + 
@"\app\build\outputs\apk\app-release-unsigned.apk"" " + aliasPas;
Process java = new Process();
java.StartInfo.FileName = Path.Combine(GetJavaInstallationPath(), "bin\\jarsigner.exe");
java.StartInfo.Arguments = args;
java.StartInfo.UseShellExecute = false;
java.Start();
java.WaitForExit();

2 个答案:

答案 0 :(得分:1)

我最终只使用Gradle工具来构建和签署发布APK(从管道中排除分离的Java jarsigner流程)。

以下是app-level build.gradle文件中的新签名配置:

signingConfigs {
    release {
        storeFile file(RELEASE_STORE_FILE)
        storePassword RELEASE_KEY
        keyAlias RELEASE_KEY_ALIAS
        keyPassword RELEASE_KEY_PASSWORD
        v1SigningEnabled true;
        v2SigningEnabled true;
    }
}

如您所见,我添加了v1SigningEnabledv2SigningEnabled字段。密钥库信息来自gradle.properties文件,如this主题中所述,我刚刚调整了我的脚本以更改我需要更改密钥库的文件内容。现在上传APK文件时没有任何错误。

答案 1 :(得分:0)

https://source.android.com/security/apksigning/,您可以阅读有关v1和v2签名方案的信息。使用jarsigner,您可以创建v1签名方案。据我所知,jarsigner无法进行v2签名。

我认为v1签名不是你问题的原因,因为它说的是缺少优化,而不是缺少签名。我认为这只是一个巧合。

实际上我根本不知道为什么你有一个C#脚本,你可以使用你的Gradle构建文件中的jarsigner,而不需要使用任何外部包装脚本。

我建议您查看并修复构建脚本,以进行正确的签名和优化,而不是使用一些自制的C#脚本。也许这可能有所帮助。