我正在尝试在 Google Play 商店上传应用程序。我正在构建 .apk 并使用 Maven 对其进行签名。我使用 maven-jarsigner-plugin 来签署 .apk 文件。我正在使用通过 Eclipse 向导创建的密钥来签署另一个 Android 应用程序。我使用以下命令压缩 .apk 文件: zipalign [-f] [-v] infile.apk outfile.apk
当我尝试在 Playstore 上上传应用程序时,收到错误“您上传了在调试模式下签名的 APK”。您需要在发布模式下签署 APK。谁能告诉我如何在发布模式下对 apk 进行签名?我是 Maven 新手(今天开始使用它)。 谢谢
更改为: 签名配置签名配置.release
来自 签名配置签名配置.debug
在你的 build.gradle 应用级别
转到android/app/build.gradle
文件末尾:
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug <==== change this to release
}
}
结果应该是这样的:
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.release
}
}
我不知道你如何在 Maven 中做到这一点,但你需要使用发布密钥库来编译你的应用程序。您可以使用
keytool
创建一个,它位于您的 Java bin 文件夹中:
$ keytool -genkey -v -keystore my-release-key.keystore
-alias alias_name -keyalg RSA -keysize 2048 -validity 10000
创建时,您必须提供两个密码,一个用于密钥库,一个用于密钥。创建密钥库后,您可以使用 Eclipse 导出向导以发布模式编译您的应用程序。
更多详情,请参阅 http://developer.android.com/tools/publishing/app-signing.html#releasemode
对于颤振错误, 默认情况下,flutter 创建如下所示的构建类型
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
你应该更改签名配置行
signingConfig signingConfigs.release
始终创建名称和别名包含“release”而不是“debug”的密钥库。如果您遇到“您上传了在调试模式下签名的 APK。您需要在发布模式下签署您的 APK 错误”,则可以肯定您正在使用默认密钥库,即“debug.keystore”,因此会在调试模式下生成 apk。
解决方案
这应该可以解决问题。
我的 flutter 应用程序也遇到了同样的问题,
将这些添加到您的 android/app/build.gradle 文件中。摇篮:
在安卓之前{ 编译SdkVersion 30
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
在defaultConfig之后{
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
按照此文档完全正确,它会起作用(至少对我有用......)
使用 -genkeypair 而不是 -genkey 解决了我的问题。
所以:keytool -genkeypair -keystore name.keystore -alias nameapp -keyalg RSA
确保你的 android/app/build.gradle 看起来像这样:
plugins {
id "com.android.application"
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
}
// Initialize keystoreProperties as an empty Properties object
def keystoreProperties = new Properties()
// Load the keystore.properties file if it exists
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
namespace = "com.roscode.concentrationcalc"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId = "com.roscode.concentrationcalc"
minSdk = flutter.minSdkVersion
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ?
file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
flutter {
source = "../.."
}
更深入的答案:
1。构建并签署应用程序:
key.properties
文件来存储应用程序的签名信息:
storePassword=<your-password>
keyPassword=<your-password>
keyAlias=upload
storeFile=<keystore-location>
keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
keytool -genkey -v -keystore "C:\Users\<your-username>\upload-keystore.jks" -keyalg RSA -keysize 2048 -validity 10000 -alias upload
upload-keystore.jks
文件复制到 android/app
并在 key.properties
中引用。build.gradle
中添加以下配置:
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
flutter clean
flutter pub get
flutter build appbundle
2。发布到 Google Play 商店:
.aab
的 build/app/outputs/bundle/release/app-release.aab
捆绑包。Google 将在大约 48 小时内审核您的应用。