【问题标题】:How do you build for Android Target SDK 31 with Capacitor 2?如何使用 Capacitor 2 为 Android Target SDK 31 构建?
【发布时间】:2022-08-17 04:09:20
【问题描述】:

我目前在我的应用程序中使用 Capacitor 2,目前无法升级到 3 或 4,但 Google Play 现在要求新应用程序(以及从 2022 年 11 月开始的更新)以 Android SDK 31 为目标。

我将variables.gradle 文件更新为targetSdkVersion = 31,并且我的aab 构建得很好,但是当我将它上传到Google Play 时,它会抛出一个错误并说:

您上传的 APK 或 Android App Bundle 具有带有意图过滤器的 Activity、Activity 别名、服务或广播接收器,但未设置“android:exported”属性。

它链接到the following page

我检查了我的应用程序的AndroidManifest.xml 并添加了正确的android:exported=\"true\" 属性,但Google Play 仍然抛出同样的错误。

根据 Capacitor 的 GitHub 问题,他们没有计划将 Android SDK 31 修复程序反向移植到 Capacitor 2。在升级到 Capacitor 3/4 之前如何解决这个问题?

    标签: android capacitor


    【解决方案1】:

    经过一番挖掘,我发现导致我出现问题的文件位于:

    src-capacitor/node_modules/@capacitor/android/capacitor/src/main/AndroidManifest.xml

    注意:这可能在您的根 node_modules 文件中。我正在使用类星体(v1)。

    如果您在本地构建,您只需编辑该文件并更改以下行:

    <service android:name="com.getcapacitor.CapacitorFirebaseMessagingService" android:stopWithTask="false">

    <service android:name="com.getcapacitor.CapacitorFirebaseMessagingService" android:stopWithTask="false" android:exported="true">

    如果您正在使用构建服务器和/或希望在您的代码中进行此更改,那么您可以编写一个脚本来在构建时编辑该行或使用类似patch-package 的东西。

    对我来说,这是我需要做出的唯一更改才能将我的应用程序提交到 Google Play,但如果您使用其他 Capacitor 插件,它们可能需要进行类似的更新。在 Android Studio 中打开您的 android 项目,导航到您的主 AndroidManifest.xml (app/src/main/AndroidManifest.xml),然后单击文件窗口底部的“Merged Manifest”按钮。

    此视图将组合您的项目使用的所有 AndroidManifest.xml 文件,如果找到需要添加 android:exported="true/false" 的文件,它将引发错误(因此您也可以查找并修复它们,或者如果它们更新这些依赖项已经修好了)

    【讨论】:

      猜你喜欢
      • 2021-11-07
      • 2011-09-29
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 2021-11-29
      • 2022-08-18
      相关资源
      最近更新 更多