Google Play 控制台不接受 Flutter 发布的 apk
Flutter release apk not accepted by Google Play Console
中的说明一步一步创建了一个密钥和密钥库并签署了我的 apk
但是当我尝试将它上传到 Google Play 管理中心时,出现了这个错误:
"You uploaded an APK or Android App Bundle that was signed in debug mode. You need to sign your APK or Android App Bundle in release mode"
之前问过A similar question,但是没有解决我的问题
这是我的 app/build.gradle:
的相关部分
android {
compileSdkVersion 28
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "my.package.name"
minSdkVersion 16
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
//testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
这是我的 Android Studio 版本的屏幕截图(Android SDK 为红色与此无关。):
我的 output.json 文件:
[
{
"outputType": {
"type": "APK"
},
"apkInfo": {
"type": "MAIN",
"splits": [
],
"versionCode": 1,
"versionName": "1.0.0",
"enabled": true,
"outputFile": "app-release.apk",
"fullName": "release",
"baseName": "release"
},
"path": "app-release.apk",
"properties": {
}
}
]
构建 APK 时需要 select release
选项
为Windows
Apple
似乎没有任何建议有效。然后,
flutter clean
所有问题都解决了。我可以通过 Android Studio 或命令行创建 apk。感谢 VikaS 和 Harsha pulikollu
flutter clean
也不适合我。所以我手动签署了 apk,它被 Google Play Console 接受了。在此处找到路线 https://developer.android.com/studio/publish/app-signing#sign-manually
如何手动签署 apk
要手动签署 apk,您需要 运行 在 Windows.
的命令提示符下的终端中执行以下命令
1 - 确保 apk 使用调试密钥签名:
<build-tools-path>/<sdk-vesion>/apksigner verify --print-certs app-release.apk
(将“app-release.apk”替换为您的 apk 文件名
如果使用调试密钥签名,输出将类似于
Signer #1 certificate DN: C=US, O=Android, CN=Android Debug
Signer #1 certificate SHA-256 digest: 384cf54f892877ea6d934bbc335bf3aa61b8dd3d89e27feb49c0bc7e62b0bbb7
Signer #1 certificate SHA-1 digest: c7a8384ff8fe2d1e99dbdba45db93180ed53b9ff
Signer #1 certificate MD5 digest: ca13ad2688257283319bf2596f360f8c
2 - 运行 zipalign 以对齐第一个字节并减少 RAM 使用
<build-tools-path>/<sdk-vesion>/zipalign -v -p 4 app-release.apk app-aligned.apk
它将列出文件并以 Verification succesful
消息结束。
3 - 运行 应用程序签名者:
<build-tools-path>/<sdk-vesion>/apksigner sign --ks <path to .jks file> --out app-signed.apk app-aligned.apk
它将提示输入密钥库密码并静默完成作业。
4 - 验证它是否使用您的密钥签名:
<build-tools-path>/<sdk-vesion>/apksigner verify --print-certs app-signed.apk
如果签名正确,输出将与第一步类似,但输出的不是“Android Debug”,而是您的证书数据。
尝试
flutter clean
flutter clean 命令在很多情况下都非常有用,只要应用程序显示出一些荒谬的行为。
当 apk 或 android 应用程序包在调试模式下签名并上传时会发生这种情况。
所以确保你在 build.gradle
中有 release
buildTypes {
release {
minifyEnabled true
// 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
}
}
以及将 yourkeystore.jks 文件放入 android/app/yourkeystore.jks 这样你就不会不得不提完整路径。
现在路径将是
storePassword=yourkeystore
keyPassword=yourkeystore
keyAlias=yourkeystore
storeFile=yourkeystore.jks
但是当我尝试将它上传到 Google Play 管理中心时,出现了这个错误:
之前问过"You uploaded an APK or Android App Bundle that was signed in debug mode. You need to sign your APK or Android App Bundle in release mode"
A similar question,但是没有解决我的问题
这是我的 app/build.gradle:
的相关部分android {
compileSdkVersion 28
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "my.package.name"
minSdkVersion 16
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
//testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
这是我的 Android Studio 版本的屏幕截图(Android SDK 为红色与此无关。):
我的 output.json 文件:
[
{
"outputType": {
"type": "APK"
},
"apkInfo": {
"type": "MAIN",
"splits": [
],
"versionCode": 1,
"versionName": "1.0.0",
"enabled": true,
"outputFile": "app-release.apk",
"fullName": "release",
"baseName": "release"
},
"path": "app-release.apk",
"properties": {
}
}
]
构建 APK 时需要 select release
选项
为Windows
Apple
似乎没有任何建议有效。然后,
flutter clean
所有问题都解决了。我可以通过 Android Studio 或命令行创建 apk。感谢 VikaS 和 Harsha pulikollu
flutter clean
也不适合我。所以我手动签署了 apk,它被 Google Play Console 接受了。在此处找到路线 https://developer.android.com/studio/publish/app-signing#sign-manually
如何手动签署 apk
要手动签署 apk,您需要 运行 在 Windows.
的命令提示符下的终端中执行以下命令1 - 确保 apk 使用调试密钥签名:
<build-tools-path>/<sdk-vesion>/apksigner verify --print-certs app-release.apk
(将“app-release.apk”替换为您的 apk 文件名
如果使用调试密钥签名,输出将类似于
Signer #1 certificate DN: C=US, O=Android, CN=Android Debug
Signer #1 certificate SHA-256 digest: 384cf54f892877ea6d934bbc335bf3aa61b8dd3d89e27feb49c0bc7e62b0bbb7
Signer #1 certificate SHA-1 digest: c7a8384ff8fe2d1e99dbdba45db93180ed53b9ff
Signer #1 certificate MD5 digest: ca13ad2688257283319bf2596f360f8c
2 - 运行 zipalign 以对齐第一个字节并减少 RAM 使用
<build-tools-path>/<sdk-vesion>/zipalign -v -p 4 app-release.apk app-aligned.apk
它将列出文件并以 Verification succesful
消息结束。
3 - 运行 应用程序签名者:
<build-tools-path>/<sdk-vesion>/apksigner sign --ks <path to .jks file> --out app-signed.apk app-aligned.apk
它将提示输入密钥库密码并静默完成作业。
4 - 验证它是否使用您的密钥签名:
<build-tools-path>/<sdk-vesion>/apksigner verify --print-certs app-signed.apk
如果签名正确,输出将与第一步类似,但输出的不是“Android Debug”,而是您的证书数据。
尝试
flutter clean
flutter clean 命令在很多情况下都非常有用,只要应用程序显示出一些荒谬的行为。
当 apk 或 android 应用程序包在调试模式下签名并上传时会发生这种情况。
所以确保你在 build.gradle
中有 releasebuildTypes {
release {
minifyEnabled true
// 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
}
}
以及将 yourkeystore.jks 文件放入 android/app/yourkeystore.jks 这样你就不会不得不提完整路径。
现在路径将是
storePassword=yourkeystore
keyPassword=yourkeystore
keyAlias=yourkeystore
storeFile=yourkeystore.jks