android - 您上传的 APK 或 Android App Bundle 具有带有 Intent 过滤器的 Activity 、 Activity 别名、服务或广播接收器,但没有“an”

标签 android android-manifest android-12

问题:您上传的 APK 或 Android App Bundle 具有带有 Intent 过滤器的 Activity 、 Activity 别名、服务或广播接收器,但未设置“android:exported”属性。此文件无法安装在 Android 12 或更高版本上。请参阅:developer.android.com/about/versions/12/behavior-changes-12#exported
我的 AndroidManifest.xml 文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.c4life.guardianangel">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>


<application
   tools:replace="android:label"
   android:label="GA"
   android:exported="true"
   android:icon="@mipmap/ic_launcher">
   <meta-data android:name="com.google.android.geo.API_KEY"
       android:value="[insert API key here]"/>
    <activity
        android:name=".MainActivity"
        android:exported="true"
        android:launchMode="singleTop"
        android:theme="@style/LaunchTheme"
        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
        android:hardwareAccelerated="true"
        android:windowSoftInputMode="adjustResize">
        <meta-data
          android:name="io.flutter.embedding.android.NormalTheme"
          android:resource="@style/NormalTheme"
          />
        <meta-data
          android:name="io.flutter.embedding.android.SplashScreenDrawable"
          android:resource="@drawable/launch_background"
          />
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
   <service android:name="changjoopark.com.flutter_foreground_plugin.FlutterForegroundService" android:exported="false"/>
    <meta-data
        android:name="flutterEmbedding"
        android:value="2" />


</application>

<uses-sdk
    android:targetSdkVersion="30"
    tools:overrideLibrary="changjoopark.com.flutter_foreground_plugin" />

最佳答案

根据 google 新政策如果您的应用以 Android 12 或更高版本为目标并且包含使用 Intent 过滤器的 Activity 、服务或广播接收器,则您必须为这些应用组件显式声明 android:exported 属性。
您可以按照以下步骤操作:

  • 打开 AndroidManifest.xml 文件并在底部选择 合并 list .
    像这样:enter image description here
  • 如果您无法预览合并 list ,请在您的 build.gradle 文件
    设置 compileSdkVersion 30 targetSdkVersion 30 并同步您的项目,现在尝试再次打开合并 list 我希望这次您能正确预览合并 list 。但如果没有预览,请不要担心,您仍然可以导航到您在项目中使用的不同第三方库中的各个 list 文件。

  • enter image description here
  • 现在检查所有使用 Intent 过滤器而不使用 的 Activity 、服务、接收器安卓:导出标签。在您的主 list 文件中,您可以简单地添加 安卓:导出属性(property)给 Activity 标记所以添加 android:exported=""并在这些引号内设置一个 bool 值。现在您可能会问,我什么时候需要将 android:exported="true"或 android:exported="false"添加到使用 Intent 过滤器的 Activity 、服务或广播接收器中。如果应用组件包含 LAUNCHER 类别,请将 android:exported 设置为 true。在大多数其他情况下,将 android:exported 设置为 false。
  • 注意:如果有任何使用 的 Activity 、服务或接收器,还要检查各个第三方库 list 文件。 那么您必须使用 覆盖主 list 文件中的相同 Activity 、服务或接收器安卓:导出属性(property)。

  • 例如,在我的例子中,我定义了 安卓:导出对于我的主 list 文件中的每个 Activity 、服务或接收器,但在我的项目中我使用的是 Razor 支付 的 list 中的依赖项 so Razor 支付如果发现有 Activity 接收器哪些正在使用 没有 的属性(property)安卓:导出所以我在我的主要 list 文件中声明了它们。
    如下所示 :
     <activity
            android:name="com.razorpay.CheckoutActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
            android:theme="@style/CheckoutTheme"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <data
                    android:host="rzp.io"
                    android:scheme="io.rzp" />
            </intent-filter>
        </activity>
    
        <receiver android:name="com.razorpay.RzpTokenReceiver"
            android:exported="true"
            android:permission="android.permission.INTERNET">
            <intent-filter>
                <action android:name="rzp.device_token.share" />
            </intent-filter>
        </receiver>
    
    注意:在您的情况下,您可能需要查看更多文件并检查 Activity 、服务并在主 list 文件中提及它们。
  • 在完成所有这些操作后,您还可以更改回 targetSdkVersion 31 compileSdkVersion 31 在您的 build.gradle 文件。
  • 关于android - 您上传的 APK 或 Android App Bundle 具有带有 Intent 过滤器的 Activity 、 Activity 别名、服务或广播接收器,但没有“an”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70695372/

    相关文章:

    java - 单击按钮时新 Intent 未启动

    android - 启动画面图标未完全显示

    由于三星设置应用程序崩溃,用户的 Android 12 深度链接关联失败

    java - Android单元测试:从使用上下文的 fragment 中调用方法

    android - 是否可以在 Android Studio 中运行/调试测试?

    android - 强制 AndroidStudio 在 gradle.properties 中包含默认行?

    android - 属性 application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) 来自 [com.android.support :support-compat:28. 0.0]

    java - FCM 通知导致 MIUI 在前台崩溃 - Android

    java - 如何用代码检查Android list 参数

    Android 12 电池优化