1

https://developer.android.com/studio/publish/app-signing#signing-manually中所述,我尝试在 Windows 7 上使用 git bash 签署应用程序。

我生成了一个密钥库, keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias 它应该使用默认的密钥库类型,这应该没问题。

然后我运行zipalign zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk 它给出“验证成功”(带有一个)

最后我运行 apksigner 这给了我错误:

"C:\....\apksigner.bat" sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
Keystore password for signer #1:
123456
Failed to load signer "signer #1"
java.io.IOException: Invalid keystore format
        at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:658)
        at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56)
        at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224)
        at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70)
        at java.security.KeyStore.load(KeyStore.java:1445)
        at com.android.apksigner.ApkSignerTool$SignerParams.loadPrivateKeyAndCertsFromKeyStore(ApkSignerTool.java:613)
        at com.android.apksigner.ApkSignerTool$SignerParams.loadPrivateKeyAndCerts(ApkSignerTool.java:555)
        at com.android.apksigner.ApkSignerTool$SignerParams.access$200(ApkSignerTool.java:509)
        at com.android.apksigner.ApkSignerTool.sign(ApkSignerTool.java:215)
        at com.android.apksigner.ApkSignerTool.main(ApkSignerTool.java:89)

我还尝试了不同的商店类型,比如pkcs12根本不支持(给出java.io.IOException: parseAlgParameters failed: PBE AlgorithmParameters not available:)

所以我的问题是如何找到正确的商店类型?我在帮助或互联网上找不到任何关于此的信息。

4

2 回答 2

3

如果您使用较新的 JDK 生成密钥库,然后使用较旧的 JDK 进行验证,则可能会发生此问题。就我而言:我使用 java 16 生成了密钥库,并使用 App Center 构建了应用程序,该应用程序在 java 8 上进行了验证(我认为)。

尝试找出您的 keytool 来自哪里(which keytool在 Linux 上,Get-Command keytool在 Powershell 中)。

于 2021-06-25T08:20:42.457 回答
1

对我有用的是你不需要对齐它。只需将其上传到谷歌,它应该没问题。 apksigner sign --ks application.keystore app-release-unsigned.apk

所以解决方案是忽略 zipalign

因为这可能是一团糟。尝试再次重建你的apk,以防你已经签署它以避免多重签名。

于 2018-12-20T12:03:34.250 回答