Flutter发布的APK无法通过Google Play控制台接受

10

我按照官方的Flutter页面一步一步地创建了密钥、密钥库并签名了我的apk。

但当我尝试将其上传到Google Play Console时,我遇到了这个错误:

"您上传了一个以调试模式签名的APK或Android应用程序包。您需要以发布模式签署APK或Android应用程序包"

之前有类似的问题被问过,但是那没有解决我的问题。这里有一个类似的问题。

以下是我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显示为红色不相关):

Android Studio的截图,显示使用的版本。

我的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": {
      
    }
  }
]
4个回答

10

没有建议看起来有效,然后执行了

flutter clean

所有问题都得到了解决。我可以通过Android Studio或命令行创建APK文件。感谢VikaS和Harsha pulikollu


谢谢,我省下了我的夜晚。 - Nam Pham

2
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 - 运行appsigner来签名应用程序:

<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”,而是输出您的证书数据。

最初的回答。


你好 @Ricardo,我在使用React Native 0.60时遇到了同样的问题,但是我找不到构建工具路径,它在Android文件中吗? - Friis1978
@Friis1978,build-tools位于Android SDK目录中。它的位置可能因您安装Android SDK和操作系统的方式而有所不同。 - Ricardo Gonçalves

2
你需要在构建APK时选择release选项。 对于Windows:

enter image description here

对于Apple:

enter image description here

注:原回答翻译为“最初的回答”。

我使用了VPN并看到了图片。但是我从哪里进入那个窗口呢?我查看了每一个论坛,都说要使用终端命令。我在Android Studio中使用“查找操作”进行搜索,但它对我来说是不可用的。我无法点击它。 - Melih Durmaz
谢谢分享这个视频。但是当我点击“Build”选项卡时,我没有看到“生成已签名的捆绑包”的选项。我只看到了“构建bundle或APKs”的选项,但是它对我来说不可点击。我正在使用最新版本的Android Studio。 - Melih Durmaz
你的 Studio 版本号是多少? - VikaS GuttE
你需要在Android Studio中单独打开你的Flutter Android项目,然后才能生成APK。在Android Studio中右键点击Flutter项目,然后你会看到“FLUTTER",将鼠标悬停在上面,选择"在Android Studio中打开"即可。 - Harsha pulikollu
尝试通过单击“帮助”菜单中的“检查更新”来检查更新。 - VikaS GuttE
显示剩余12条评论

0

尝试

flutter clean

在编程中,当应用程序出现一些奇怪的行为时,flutter clean命令非常有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接