ume*_*ani 5 android android-gradle-plugin apk-signing
我在构建项目时遇到了这个问题。以下是堆栈跟踪。我为发布密钥创建了一个新的密钥库文件,但是没有用。
Caused by: java.io.IOException: Failed to generate v1 signature
at com.android.tools.build.apkzlib.sign.SigningExtension.onOutputZipReadyForUpdate(SigningExtension.java:292)
at com.android.tools.build.apkzlib.sign.SigningExtension.access$200(SigningExtension.java:53)
at com.android.tools.build.apkzlib.sign.SigningExtension$1.lambda$beforeUpdate$2(SigningExtension.java:171)
at com.android.tools.build.apkzlib.zip.ZFile.notify(ZFile.java:2154)
at com.android.tools.build.apkzlib.zip.ZFile.update(ZFile.java:923)
at com.android.tools.build.apkzlib.zip.ZFile.close(ZFile.java:1207)
at com.android.tools.build.apkzlib.zfile.ApkZFileCreator.close(ApkZFileCreator.java:174)
at com.google.common.io.Closer.close(Closer.java:216)
at com.android.builder.internal.packaging.IncrementalPackager.close(IncrementalPackager.java:332)
at com.android.build.gradle.tasks.PackageAndroidArtifact.doTask(PackageAndroidArtifact.java:704)
at com.android.build.gradle.tasks.PackageAndroidArtifact.splitFullAction(PackageAndroidArtifact.java:515)
at com.android.build.gradle.tasks.PackageAndroidArtifact.lambda$doFullTaskAction$3(PackageAndroidArtifact.java:396)
at com.android.build.gradle.internal.scope.BuildElements$ExecutorBasedScheduler$transform$$inlined$forEach$lambda$1.call(BuildElements.kt:121)
at com.android.build.gradle.internal.scope.BuildElements$ExecutorBasedScheduler$transform$$inlined$forEach$lambda$1.call(BuildElements.kt:110)
at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: java.security.InvalidKeyException: Failed to sign using signer "CERT"
at com.android.apksig.internal.apk.v1.V1SchemeSigner.signManifest(V1SchemeSigner.java:295)
at com.android.apksig.internal.apk.v1.V1SchemeSigner.sign(V1SchemeSigner.java:256)
at com.android.apksig.DefaultApkSignerEngine.outputJarEntries(DefaultApkSignerEngine.java:424)
at com.android.tools.build.apkzlib.sign.SigningExtension.onOutputZipReadyForUpdate(SigningExtension.java:290)
... 18 more
Caused by: java.security.InvalidKeyException: Failed to sign using SHA1withDSA
at com.android.apksig.internal.apk.v1.V1SchemeSigner.generateSignatureBlock(V1SchemeSigner.java:519)
at com.android.apksig.internal.apk.v1.V1SchemeSigner.signManifest(V1SchemeSigner.java:293)
... 21 more
Caused by: java.security.InvalidKeyException: The security strength of SHA-1 digest algorithm is not sufficient for this key size
at sun.security.provider.DSA.checkKey(DSA.java:104)
at sun.security.provider.DSA.engineInitSign(DSA.java:136)
at java.security.Signature$Delegate.init(Signature.java:1152)
at java.security.Signature$Delegate.chooseProvider(Signature.java:1112)
at java.security.Signature$Delegate.engineInitSign(Signature.java:1176)
at java.security.Signature.initSign(Signature.java:527)
at com.android.apksig.internal.apk.v1.V1SchemeSigner.generateSignatureBlock(V1SchemeSigner.java:515)
Run Code Online (Sandbox Code Playgroud)
在论坛上关注了其他问题,但没有任何效果。请帮忙。Android Studio版本-3.2.1
编辑 -将minSdkVersion从18更改为21,解决了该问题。但是无法弄清楚背后的真正原因。
该错误消息意味着密钥可能具有1024位强度,因为它是使用 JDK 之前的任何 JDK 版本生成的8u151- 而预计密钥强度至少为 2048 位:
\n\n\nSHA-1 摘要算法的安全强度对于这个密钥大小来说是不够的。
\n
这背后的原因是,JDK 的默认密钥大小已从1024位更改为20488u151位。此更改也可以在datecode 的JRE/JDK加密路线图中找到2017-10-17:
\n\n\n将 jarsigner 和 keytool \xe2\x80\x91sigalg 默认值升级为 SHA256withDSA,将 DSA 密钥的 \xe2\x80\x91keysize 默认值升级为 2048。
\n
“恢复说明”将是(这并不真正适用于 Android Studio 的标牌):
\n\n\n\n\n要使用不同的算法和/或更小的密钥大小,请使用 keytool 和 jarsigner 的 \xe2\x80\x91sigalg 和 \xe2\x80\x91keysize 选项覆盖当前默认值。在此更改之前,默认值为 SHA1withDSA 和 1024 位。
\n
对于 APK,建议使用apksigner而不是jarsigner - 同时还有APK 签名方案 v3(这些是向后兼容的 - 因此不要使用v1)。
生成至少具有 2048位强度的新密钥应允许v1( jar) 签名。降级 JDK 也是一个可行的解决方法(虽然我不想建议这样做)。
如果您已将此密钥发布到 Google Play,则最好的选择可能是尝试迁移到Google Play 应用签名(发布密钥将降级为上传密钥)。
\n\n最重要的是,您的系统范围内安装的 JDK 版本很可能比当前版本的 Android Studio 捆绑的 OpenJDK 旧得多 - 因此您可以根据需要生成任意数量的新密钥,但它们不会\' t 满足最低安全要求。更新系统范围内安装的 JDK 版本应该使您能够生成具有足够强度的密钥;运行java -version,看看您甚至使用什么来生成强度不足的密钥。
或者简单地使用... /android-studio/jre/jre/bin/keytool来生成它们。
小智 5
生成密钥大小长度为 2048 的密钥库对我有用。
keytool -genkey -v -keystore ~/.android/debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000
Run Code Online (Sandbox Code Playgroud)
shi*_*hen -1
这可能是由于图标格式错误引起的,此处跟踪了一个问题: https: //issuetracker.google.com/issues/63885809
运行以下命令查看有问题的资源
./gradlew assemble --stacktrace
Run Code Online (Sandbox Code Playgroud)
找到如下日志:
错误:org.gradle.tooling.BuildException:无法生成 v1 签名错误:java.io.IOException:无法生成 v1 签名错误:com.android.apksig.apk.ApkFormatException:ZIP 条目名称“xxxx/ 中不支持字符 xxxx” xxx?”
尝试删除该文件或替换为新文件。
| 归档时间: |
|
| 查看次数: |
2331 次 |
| 最近记录: |