我正在尝试在 Google Play 上发布我的第一个应用程序,但遇到了困难。让我向您解释我的问题:我的应用程序编译,我想生成一个签名的 apk ......这不适用于 android studio (Build--> generate signed budle/apk),我收到了下一条错误消息:
erreur keytool : java.io.FileNotFoundException: C:\Users\sebla\Desktop\AndroidApp\jdk-11.0.1\bin\mykeystore.jks (Accès refusé)
Run Code Online (Sandbox Code Playgroud)
然后,我成功创建了密钥库(通过 cmd):
C:\Users\sebla\Desktop\AndroidApp\jdk-11.0.1\bin>keytool -genkey -v -keystore appkeystore.keystore -alias permisKey -keyalg RSA -keysize 2048 -validity 10000
但是现在我在生成签名的 apk 时收到以下错误消息:
Something went wrong with the encryption tool: Get Key failed: Given final block not properly padded
java.security.UnrecoverableKeyException: Get Key failed: Given final block not properly padded
at sun.security.pkcs12.PKCS12KeyStore.engineGetKey(PKCS12KeyStore.java:410)
at sun.security.provider.KeyStoreDelegator.engineGetKey(KeyStoreDelegator.java:96)
at sun.security.provider.JavaKeyStore$DualFormatJKS.engineGetKey(JavaKeyStore.java:70)
at java.security.KeyStore.getKey(KeyStore.java:1023)
at com.google.wireless.android.vending.developer.signing.tools.extern.export.KeystoreHelper.extractPrivateKey(KeystoreHelper.java:56)
at com.google.wireless.android.vending.developer.signing.tools.extern.export.KeystoreHelper.getPrivateKey(KeystoreHelper.java:35)
at com.google.wireless.android.vending.developer.signing.tools.extern.export.ExportEncryptedPrivateKeyTool.run(ExportEncryptedPrivateKeyTool.java:98)
at org.jetbrains.android.exportSignedPackage.ExportSignedPackageWizard$2.run(ExportSignedPackageWizard.java:241) …Run Code Online (Sandbox Code Playgroud) 我正在试验 GitLab 的 CI/CD,并正在研究如何生成签名版本 APK。
我在这里阅读了这篇文章。
它提出了以下建议:
- ./gradlew assembleRelease
-Pandroid.injected.signing.store.file=$(pwd)/my.keystore
-Pandroid.injected.signing.store.password=$KEYSTORE_PASSWORD
-Pandroid.injected.signing.key.alias=$KEY_ALIAS
-Pandroid.injected.signing.key.password=$KEY_PASSWORD
Run Code Online (Sandbox Code Playgroud)
并将变量存储在 Gitlab CI/CD 变量中。
但是每次我运行管道时,它总是会导致:
* What went wrong:
Execution failed for task ':app:packageRelease'.
> 1 exception was raised by workers:
java.lang.RuntimeException: java.lang.RuntimeException:
com.android.ide.common.signing.KeytoolException: Failed to read key key0 from store "/tmp/Lp7GrQLJ/0/XXXXX/sample-android-project/keystore": Keystore was tampered with, or password was incorrect
Run Code Online (Sandbox Code Playgroud)
有人可以在这里指导我吗?我可能做错了什么?
我的gradle文件中有这个:
android {
signingConfigs {
mySigningConfig {
keyAlias 'theAlias'
keyPassword 'thePassword'
storeFile file('theKeystore.jks')
storePassword 'thePassword'
}
}
...
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.mySigningConfig
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
然后当我生成我的发布 APK 时,我只需转到Build -> Build Bundle(s) / APK(s) -> Build APK(s)并创建 APK。与如果我去不同Build -> Generate Signed Bundle / APK,它会提示我:
我的问题是,我当前的 gradle 文件生成什么版本的签名?是V1还是V2?如何修改我的 gradle 文件,以便它专门使用 V1 或 V2 构建?
我有一个具有以下结构的项目:
Root
\__main_project
|
\__modules
\__
| library1
|
\__
library2
Run Code Online (Sandbox Code Playgroud)
我的gradle中有以下配置:
android {
compileSdkVersion 19
buildToolsVersion '19.0.0'
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
}
signingConfigs {
release {
storeFile file('/home/home/.signing/test.keystore')
storePassword 'testtest'
keyAlias 'testtest'
keyPassword 'testtest'
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
Run Code Online (Sandbox Code Playgroud)
构建我的项目我运行以下命令:
./gradlew :main_project:assembleRelease
Run Code Online (Sandbox Code Playgroud)
但它只生成main_project-release-unsigned.apk
所以我的问题是,当我指定所有必需的配置时,它为什么会生成unsigned apk.谢谢.
我用于签署Android应用的密钥是使用Android Studio生成的.当我尝试从Android Studio生成签名的APK时,它工作正常.
但是,当我尝试使用apksigner工具进行签名时,相同的密钥不起作用.这是我正在使用的命令.
apksigner sign --ks mykey.jks --ks-key-alias MyAlias --out app-myapp-release.apk app-myapp-release-aligned.apk
我收到以下错误:
java.io.IOException:密钥库被篡改,或密码不正确
有什么建议?
**更新**Android Studio版本2.2.3密钥库是使用"生成"菜单中的"生成签名APK"对话框生成的.
执行以下代码时:
KeyStore ks = KeyStore.getInstance(storeType);
ks.load(new FileInputStream(keyStore), storePassword.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, keyPassword.toCharArray());
Run Code Online (Sandbox Code Playgroud)
我得到一个例外:
java.security.UnrecoverableKeyException: Get Key failed: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
Run Code Online (Sandbox Code Playgroud)
这最初来自使用keytool转换为PKCS12密钥库的JKS密钥库.我尝试创建一个新的PKCS12密钥库,但没有运气.
我正在尝试导出签名APK以提交到Play商店,但是当我单击Build-> Generate Signed APK时,该选项显示为灰色,我无法选择它。