如 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
这给出了“验证成功”(带有 1)
最后我运行 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
)
所以我的问题是如何找到正确的商店类型?我在帮助和互联网上都没有找到任何关于此的信息。
如果您使用较新的 JDK 生成密钥库,然后使用较旧的 JDK 进行验证,则可能会发生此问题。就我而言:我使用 java 16 生成密钥库,并使用 App Center 构建应用程序,该应用程序在 java 8 上进行验证(我认为)。
尝试找出您的密钥工具来自哪里(Linux 上为
which keytool
,Powershell 中为 Get-Command keytool
)。
对我有用的是你不需要对齐它。只需将其上传到 Google 就可以了。
apksigner sign --ks application.keystore app-release-unsigned.apk
所以解决方案是忽略 zipalign
因为这可能会很混乱。尝试再次重建您的 apk,以防万一您已经对其进行了签名,以避免多重签名。
我知道OP的情况并非如此,但对于那些在应用程序中心收到无效密钥库格式错误时偶然发现此页面的人:使用
.jks
文件而不是.keystore
文件解决了问题为我。我按照这些说明通过 Android Studio 创建了一个。
当我重新安装 VS 2019 来运行现有的 xamarin 表单应用程序时,我遇到了这个问题。 只需按照以下步骤即可使其发挥作用:
快乐编码:)
命令执行格式示例:C:/Users/root/AppData/Local/Android/Sdk/build-tools/30.0.3 pksigner sign --ks C:\development\xxxxx.jks --ks-key-alias xxxx --ks-pass pass:xxxx --key-pass pass:xxx --out C:\development\xxxxx_signed.apk C:\development\xxorigin_app.apk
错误原因是AndroidSdk build-tools版本与该jks文件不匹配,需要修改此'30.0.3'正确版本测试!
在 Android Studio 的 apksigner.bat 中,读取环境变量 %JAVA_HOME%。它必须指向带有用于创建密钥库的 keytool.exe 的 jre/jdk。也可以使用较新的版本。但就我而言,Amazon Corretto 已经改变了方向。在 apksigner.bat 调用之前将 %JAVA_HOME% 设置为正确的 jdk(在我的例子中是 Oracle)。