你上传了一个 APK 或 Android 应用包,它有一个活动、活动别名、服务或广播接收器,带有意图过滤器,但没有“ an”

发行: 您上传了一个 APK 或 Android App Bundle,它具有带有意图过滤器的活动、活动别名、服务或广播接收器,但是没有设置“ Android: export”属性。此文件不能安装在 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" />
57949 次浏览

根据谷歌新政策如果你的应用针对 Android 12或更高版本,并且包含使用意图过滤器的活动、服务或广播接收器,你必须明确声明这些应用组件的 导出: true属性。

对于颤动和反应本土项目 : 将此行添加到项目的 AndroidManifest.xml文件:

android:exported="true"

enter image description here

现在只要重建你的项目。在大多数情况下,这个工作就像一个魅力。

如果上述解决方案无效 如果您的项目是在 Android 原生,请遵循以下指示: 在主清单文件中检查所有可以使用没有 出口标记的意图过滤器的活动、服务和接收器。 为这些标记添加 输出 = “ true”输出 = “ false”

您可能会问,什么时候需要将 输出 = “ true”输出 = “ false”添加到使用意图过滤器的活动、服务或广播接收器中。如果应用程序组件包含 LAUNCHER 类别,则将 android: 导出设置为 没错,否则将 android: 导出设置为 假的

如果在主清单文件中添加 android: 导出对您不起作用,请按照以下步骤操作:

例如,在我的案例中,我已经在我的主清单文件中为每个活动、服务或接收者定义了 出口,但是在我的项目中,我使用的是 Razorpay依赖关系,所以在 Razorpay的清单中,我发现有一个 活动接收器使用的是 属性,而没有使用 出口,所以我在我的主清单文件中声明了它们。 如下所示:

 <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>

注意: 在您的情况下,您可能需要查看更多的文件并检查活动和服务,并在主清单文件中提到它们。

  • 在完成所有这些操作之后,您可以在 建造,分级文件中切换回 TargetSdkVersion 3131版本

我终于解决了这个问题

1: 使用 android v12安装仿真器

2: 运行你的应用程序 编译器将告诉您 服务/接收者等导致问题的原因

现在你必须把它添加到你的清单,并添加到它的 输出 = “ true”

对我来说,问题出在本地通知包上 我收到了修复 接收器的消息 Flutterlocalnotification.ScheduledNotificationBootReceiver 所以我在主要活动之外,加入了我的清单

 <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
</intent-filter>
</receiver>

而且效果很好

“ export”属性描述其他人是否可以 允许使用它。

因此,如果您在某个活动上使用了“ export = false”,那么就没有其他应用程序,甚至 安卓系统本身,可以启动它。只有你可以做到这一点,从 在你自己的申请表里。

因此,在标记为 LAUNCHER 的活动上设置“ export = false” 活动基本上会告诉系统它不能启动您的 申请表。

在我的情况下,我只需要在我的清单中加上这一行:

android:exported="true"

enter image description here

如果您不使用任何其他项目,那么更新所有库的最新版本,因为一些旧库 AndroidManifest.xml没有在活动、服务或广播接收器中添加 出口

换衣服吧
- > defaultConfig

targetSdkVersion="31"

targetSdkVersion="30"

对我来说很正常。

将 android: export = “ true”行添加到我的 Manifes

如果使用 targetSdkVersion = 31

    package="com.name.app"><!-- Channnge your package -->
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https" />
</intent>
<intent>
<action android:name="android.intent.action.DIAL" />
<data android:scheme="tel" />
</intent>
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="*/*" />
</intent>
</queries>
<application
android:label="Tut Elimi"
android:icon="@mipmap/ic_launcher">
<service android:name="com.example.app.backgroundService"
android:exported="true">
<intent-filter>
<action android:name="com.example.app.START_BACKGROUND" />
</intent-filter>
</service>
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value=""/>
<activity
android:name=".MainActivity"
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"
android:exported="true">


<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<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/splash"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="FLUTTER_NOTIFICATION_CLICK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<!-- Displays an Android View that continues showing the launch screen
Drawable until Flutter paints its first frame, then this splash
screen fades out. A splash screen is useful to avoid any visual
gap between the end of Android's launch screen and the painting of
Flutter's first frame. -->
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
</intent-filter>
</receiver>
<service
android:name="com.name.app.BackgroundService"
android:enabled="true"
android:exported="true" />
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>


</manifest>  ````

仅仅将 exported:true添加到您的 Android 清单活动并没有解决我的问题。可能是因为您的应用程序所依赖的库没有 exported:true,只要这些库使用 exported:true更新,您就不应该在将来遇到这个 bug

你必须这么做

  • Android 工作室中的开放项目
  • 打开 AndroidManif.xml
  • 在底部选择合并清单

enter image description here

  • 现在,确保您添加导出到真无论何处说明,并修复那些警告指定的行(蓝色)和点击蓝色文本不带你到这些标签服务,活动,接收器在上述步骤之一,然后寻找库的合并错误存在

例如,这里的一个合并错误显示了 flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService中的问题

enter image description here

因此,转到错误上方用蓝色列出的特定库的清单,在那里您可以将导出添加到 true。(这也将解决合并错误)

enter image description here

services标记中将导出值添加到 true

enter image description here

视频演示: https://www.youtube.com/watch?v=hy0J8MNnE6g

需要将 android:exported="true"添加到所有具有 intent-filter的组件中。

看看你需要添加它的地方,你可以打开 Merged Manifest文件。

enter image description here

enter image description here

enter image description here

enter image description here

如果您的 Android Studio 没有显示合并的 Manifest 选项卡,您可以通过搜索合并的 AndroidManifest.xml 文件来找出问题所在。

对我来说,它是在: 构建应用程序中间合并 _ 清单发布 AndroidManifest.xml

我的问题是预定通知引导接收器:

将以下内容添加到您的清单中:

       <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver"
android:exported="true">
</receiver>

如果您是 flutter 开发人员并且无法找到合并清单选项卡,请按照以下步骤操作:

  1. 在 Android Studio 中打开项目。
  2. 导航到 main AndroidManifest.xml。
  3. 导航
  4. 等待项目加载 等待项目
  5. 在这里... 找到了

我的 RN 应用程序的问题是,在 debug/AndroidManifest.xml 中,导出的 facebook.react.devsupport 被设置为 false。把它变成了真的,解决了它。

按下合并清单显示了问题所在。

enter image description here

希望能帮上忙。

Xamarin Forms: 我能够发布它,我必须用路径 obj Release120 android 清单更新 AndroidManifest,因为一些“接收者”不在那里,并且没有添加“ android: export”。

这是 为 Unity 开发人员提供特定的和任何针对 一般的机器人平台的框架工作。如果您无论如何都不能发布,即使您向每个包含意图过滤器的活动/接收者添加了 android: export 属性,那么您应该这样做,希望您能够解决这个问题。

问题

最近,Playstore 开始要求应用程序/游戏以 API 31为目标。你升级了 SDK,Gradle 等等。你有一个版本,发布到了 PlayStore 现在 PlayStore 告诉你,这个

你上传了一个 APK 或 Android 应用包,它有一个活动、活动别名、服务或广播接收器,带有意图过滤器,但没有设置“ Android: export”属性。

你已经试过了

现在你知道了包含在你的应用程序/游戏中的 Android 清单包含了一些活动、接收器、活动别名等,它们包含了意图过滤器,但是没有将 Android: export 属性设置为 true 或 false。

您还尝试通过启用自定义 Android 清单将此属性添加到所有清单和统一自己的清单中。但是 Playstore 仍然不接受这个应用。

你不想升级 Unity 版本来解决这个问题。你还有一个解决方案。

缩小范围

您在添加 android: export 属性方面做得很好,但是在构建时,并非所有这些标记都会持久化。在构建过程中,Unity 正在替换你的属性,特别是与你在应用程序中使用的外部插件相关的属性。

因此,让我们看看哪些插件包含有问题的活动/接收者等。

不要构建 bundle 或 apk,而是将您的联合项目导出为 Android 项目。

在 android 工作室中打开项目,并在那里构建。

构建完成后,转到这个文件,它是包含来自所有单独清单的数据的合并 Menifest。

YourExportdProjectFolder 启动程序构建中间合并 _ 清单版本

enter image description here

精确地遍历这个文件并检查哪些活动/接收者等不包含导出: 属性集。插件里没有。这就是罪魁祸首。

让我们修复它

返回 Unity,转到相关的插件清单,从该清单中复制那些特定的有问题的活动(完成即与意图过滤器一起完成) ,然后粘贴到

资产/插件/Android/Android 清单

就像这样

 <receiver android:name="universal.tools.notifications.ScheduledNotificationsRestorer"
android:exported="true"
tools:replace="android:exported">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>

现在重新建立,你应该是好去!