apksigner - 无效的密钥库格式

问题描述 投票:0回答:6

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

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

android android-build apksigner
6个回答
7
投票

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

尝试找出您的密钥工具来自哪里(Linux 上为

which keytool
,Powershell 中为
Get-Command keytool
)。


0
投票

对我有用的是你不需要对齐它。只需将其上传到 Google 就可以了。

apksigner  sign --ks application.keystore app-release-unsigned.apk

所以解决方案是忽略 zipalign

因为这可能会很混乱。尝试再次重建您的 apk,以防万一您已经对其进行了签名,以避免多重签名。


0
投票

我知道OP的情况并非如此,但对于那些在应用程序中心收到无效密钥库格式错误时偶然发现此页面的人:使用

.jks
文件而不是
.keystore
文件解决了问题为我。我按照这些说明通过 Android Studio 创建了一个。


0
投票

当我重新安装 VS 2019 来运行现有的 xamarin 表单应用程序时,我遇到了这个问题。 只需按照以下步骤即可使其发挥作用:

  1. 创建一个新的简单 xamarin 表单应用程序。
  2. 从“C:\Users\YourUser\AppData\Local\Xamarin\Mono for Android”中删除现有的 debug.keystore 文件。
  3. 在设备上运行并部署您刚刚创建的应用程序(这将创建新的 debug.keystore 文件)
  4. 现在运行您现有的应用程序

快乐编码:)


0
投票

命令执行格式示例: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'正确版本测试!


0
投票

在 Android Studio 的 apksigner.bat 中,读取环境变量 %JAVA_HOME%。它必须指向带有用于创建密钥库的 keytool.exe 的 jre/jdk。也可以使用较新的版本。但就我而言,Amazon Corretto 已经改变了方向。在 apksigner.bat 调用之前将 %JAVA_HOME% 设置为正确的 jdk(在我的例子中是 Oracle)。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.