如中所述https://developer.android.com/studio/publish/app-signing#signing-我尝试手动在Windows7上用gitbash对一个应用程序进行签名。
我使用生成密钥库
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
(
所以我的问题是如何找到合适的店铺类型?我在帮助和互联网上都找不到任何关于这件事的信息。
如果使用较新的JDK生成密钥库,然后使用较旧的JDK进行验证,则可能会出现此问题。在我的案例中:我用java16生成了密钥库,并用AppCenter构建了应用程序,该应用程序在java8上进行了验证(我认为(。
试着找出密钥工具的来源(Linux上的which keytool
,Powershell中的Get-Command keytool
(。
在Android Studio的apksigner.bat中,读取环境变量%JAVA_HOME%。它必须使用keytool.exe指向jre/jdk,该keytool.exe用于创建密钥库。的更新版本也是可能的。但就我而言,亚马逊·科雷托已经把指针弯了。在apksigner.bat调用之前,将%JAVA_HOME%设置为正确的jdk(在我的例子中是Oracle(。
对我有用的是,你不需要对齐它。只需将它上传到谷歌,它就可以了。apksigner sign --ks application.keystore app-release-unsigned.apk
因此,解决方案是忽略ziplign
因为这可能是一团糟。尝试重新构建你的apk,以防你已经签名,避免多个签名。
我知道OP不是这样的,但对于那些在App Center中收到无效密钥库格式错误时偶然发现此页面的人来说:使用.jks
文件而不是.keystore
文件为我解决了这个问题。我按照这些说明通过Android Studio创建了一个。
当我重新安装VS 2019以运行我现有的xamarin表单应用程序时,我遇到了这个问题。只需遵循以下步骤即可使其发挥作用:
- 创建一个新的简单xamarin表单应用程序
- 从"中删除现有的debug.keystore文件;C: \Users\YourUser\AppData\Local\Xamarin\Mono for Android">
- 在设备上运行并部署刚刚创建的应用程序(这将创建新的debug.keystore文件(
- 现在运行您现有的应用程序
快乐编码:(
命令执行格式示例:C:\Users/root/AppData/Local/Android/Sdk/build-tools/30.03\apkigner sign--ks C:\development\xxxxx.jks--ks密钥别名xxxx--ks passpass:xxxx--key pass:xxx--out C:\development \xxxxx_signed.apk C:\developmon\xxorion_app.apk
错误的原因是这个jks文件的AndroidSdk构建工具版本不匹配,这个30.0.3'正确的版本测试需要修改!