Flutter:尽管有更新,Android 14 API Level 34 目标问题仍然存在

Flutter:尽管有更新,Android 14 API Level 34 目标问题仍然存在
Flutter:尽管有更新,Android 14 API Level 34 目标问题仍然存在

为什么我仍然看到 API 级别 34 警告?

在 Flutter 开发中,针对最新的 Android API 级别对于确保应用程序与新功能和安全升级的兼容性至关重要。最近,在将 targetSdkVersion 更改为 API 级别 34 (Android 14) 后,开发人员报告称,尽管构建成功,但 Play 控制台仍然警告应用程序必须面向 Android 14 或更高版本。

这种差异可能会导致混乱,尤其是当以前的应用程序包仍在控制台上运行时。了解先前版本如何影响当前上传并解决此警告对于有效发布 Flutter 应用程序至关重要。

命令 描述
compileSdkVersion 确定用于编译应用程序的 API 级别。在本例中,它设置为 34,面向 Android 14。
targetSdkVersion 定义应用程序运行时的 Android API 级别。更新到 34 可确保与 Android 14 的兼容性。
google.auth.default() 检索用于访问 Google API 的默认凭据,这些凭据通常与云服务结合使用。
build('androidpublisher', 'v3') 初始化 Google Play Developer API,以便可以通过编程方式管理应用程序包和发布。
service.edits().insert() 在 Google Play Console 上打开一个新的编辑会话,这是更改应用元数据或捆绑包所必需的。
bundles = service.edits().bundles().list() 列出与特定应用程序版本连接的所有应用程序包。这允许脚本确定旧版本是否仍然处于活动状态。
service.edits().bundles().delete() 从 Google Play 管理中心删除活动包。这对于消除过时或冲突的构建非常方便。
service.edits().commit() 提交在编辑会话期间所做的更改,包括对应用程序配置和捆绑包的所有更改。

了解 Flutter 中 API 级别定位的解决方案

第一个脚本修改 Flutter 项目的 Android 设置,以确保应用程序正确定位 API 级别 34。关键命令是 compileSdkVersion 和 targetSdkVersion,它们指定编译和部署期间使用的 Android SDK 版本。将 compileSdkVersion 设置为 34 可确保程序是使用 Android 14 构建的,而 targetSdkVersion 指定应用程序运行的预期 Android 版本。这些修改更新了项目设置以满足最新的 Google Play 商店提交标准,并删除了有关不支持的 API 级别的警告。

第二个脚本通过 Python 与 Google Play Console API 进行通信。它自动执行检测和删除可能导致问题的旧软件包的过程。 google.auth.default() 返回用于访问 Play Store API 的默认凭据,而 build('androidpublisher', 'v3') 初始化 Google Play Developer API。然后,该脚本利用 service.edits().bundles().list() 获取活动应用程序包,如果发现旧版本,service.edits().bundles().delete() 删除它。最后, service.edits().commit() 命令保存并应用所有更改,确保应用程序清除任何可能导致错误消息的过时捆绑包。

解决方案:确保 Flutter 应用程序正确的目标 SDK 级别更新。

Flutter (Dart) Android 清单更新

android {
    compileSdkVersion 34
    defaultConfig {
        applicationId "com.example.myapp"
        minSdkVersion 21
        targetSdkVersion 34
        versionCode 1
        versionName "1.0"
    }
}

后端脚本:验证捆绑包版本并停用旧捆绑包

用于管理活动应用程序包的 Google Play Console API (Python)

import google.auth
from googleapiclient.discovery import build
credentials, project = google.auth.default()
service = build('androidpublisher', 'v3', credentials=credentials)
package_name = 'com.example.myapp'
edit_id = service.edits().insert(body={}, packageName=package_name).execute()['id']
bundles = service.edits().bundles().list(packageName=package_name, editId=edit_id).execute()
for bundle in bundles['bundles']:
    if bundle['versionCode'] == 1:  # First build still active
        service.edits().bundles().delete(packageName=package_name, editId=edit_id,
                                        bundleId=bundle['id']).execute()
service.edits().commit(packageName=package_name, editId=edit_id).execute()

解决 Flutter 应用程序更新中的冲突包。

更新 Flutter 应用程序的 targetSdkVersion 时的一个常见问题是旧应用程序包的存在在 Google Play Console 中仍显示为活动状态。即使这些捆绑包已过时,它们也可能会阻止最新版本被正确识别,从而导致出现“应用程序必须针对 Android 14(API 级别 34)或更高版本”之类的警告。虽然需要将 targetSdkVersion 更改为 34,但开发人员还必须确保以前的版本不会中断更新过程。管理应用程序版本,特别是消除过时的捆绑包,可以帮助解决此问题。

除了在 build.gradle 文件中适当定义目标 API 级别之外,还应在 Google Play Console 中定期审核活动版本。开发人员应使用 Google Play Developer API 等工具或手动禁用过时的软件包。这可确保 Play 商店准确反映最新的构建配置。由于 Google Play 要求应用程序遵循严格的版本控制标准进行更新,因此在 Play Console 中控制代码和捆绑包可确保平稳过渡并降低遇到未解决的 API 级别警告的可能性。

有关使用 Flutter 定位 Android 14 API 级别 34 的常见问题。

  1. 尽管更新了 targetSdkVersion,为什么 API 级别警告仍然存在?
  2. 如果 Play 管理中心仍有指定为活动状态的早期应用程序包,则可能会发生这种情况,从而导致冲突。
  3. 如何在 Google Play 管理中心中禁用过时的捆绑包?
  4. 使用 Google Play Developer API 停用旧版本,或使用 Play Console 界面手动执行此操作。
  5. Flutter中targetSdkVersion的作用是什么?
  6. 它决定了您的程序运行的 API 级别,确保与较新的 Android 功能的兼容性。
  7. compileSdkVersion 和 targetSdkVersion 有什么区别?
  8. compileSdkVersion 指定编译期间使用的 SDK 版本,而 targetSdkVersion 指定程序在运行时的目标版本。
  9. 如何在 Play 管理中心中查看当前有效的捆绑包?
  10. 您可以使用 service.edits().bundles().list() 列出它们,或者直接在 Play 管理中心中查看它们。

解决 API 定位问题的关键要点。

确保您的 Flutter 应用程序针对适当的 API 级别对于 Play 商店合规性至关重要。将 targetSdkVersion 更新到 34 后,应在 Play Console 中对活动应用程序包进行广泛评估。旧的、冲突的版本可能会阻止最新版本被正确识别。使用 Google Play Developer API 等技术,开发人员可以停用过时的捆绑包,解决常见问题并确保快速应用程序分发而无需发出警告。