【问题标题】:Flutter release apk not accepted by Google Play ConsoleGoogle Play 控制台不接受 Flutter 发布 apk
【发布时间】:2019-07-17 22:02:08
【问题描述】:

我按照official flutter page. 中的说明一步一步创建了一个密钥和密钥库并签署了我的 apk

但是当我尝试将它上传到 Google Play 控制台时,我收到了这个错误:

“您上传的 APK 或 Android App Bundle 在调试模式下签名。您需要在发布模式下签名您的 APK 或 Android App Bundle”

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": {
      
    }
  }
]

【问题讨论】:

    标签: android flutter google-play-console


    【解决方案1】:

    似乎没有任何建议有效。然后,一个

    颤抖干净

    所有问题都解决了。我可以通过 Android Studio 或命令行创建一个 apk。感谢 VikaS 和 Harsha pulikollu

    【讨论】:

    • 谢谢,我拯救了我的夜晚
    【解决方案2】:

    构建APK时需要选择release选项

    适用于 Windows

    苹果版

    【讨论】:

    • 我看不到 imgur 图片,抱歉(出于某种原因,它们在我的国家被禁止)。如果您的意思是“flutter build apk --release”,这就是我签署它们的方式。但这没什么区别。
    • 我使用了 vpn 并看到了图像。但是我从哪里到那个窗口呢?我看过的每个论坛都说要使用终端命令。我在 Android Studio 中使用“查找操作”进行了搜索,但它没有为我启用。我不能点击它。
    • 感谢您的视频。但是当我单击“构建”选项卡时,我没有“生成签名包”选项。我看到“Build Bundles/APKs”,但我无法点击它。我正在使用最新版本的 Android Studio。
    • 您的 Studio 版本号是多少?
    【解决方案3】:

    flutter clean 对我也不起作用。所以我手动签署了 apk 并被 Google Play Console 接受。在这里找到方向https://developer.android.com/studio/publish/app-signing#sign-manually

    如何手动签署apk

    要手动签署 apk,您需要在终端 o 在 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 build-tools 位于 Android SDK 目录中。它的位置可能因您安装 Android SDK 和操作系统的方式而异。
    【解决方案4】:

    当 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
    

    【讨论】:

      【解决方案5】:

      试试

      flutter clean
      

      flutter clean 命令在许多情况下非常有用,只要应用程序显示一些荒谬的行为。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-17
        • 1970-01-01
        • 1970-01-01
        • 2019-02-02
        相关资源
        最近更新 更多