【问题标题】:AMM0000 android:exported needs to be explicitly specified for element <service#com.microsoft.appcenter.push.TokenService>. Apps targeting Android 12AMM0000 android:exported 需要为元素 <service#com.microsoft.appcenter.push.TokenService> 明确指定。以 Android 12 为目标平台的应用
【发布时间】:2023-01-03 20:34:03
【问题描述】:

我已将 targetsdkversion 从 30 更新到 31(和 tio OS 12),面临以下问题。

java.exe error AMM0000: android:exported needs to be explicitly specified for element &lt;service#com.microsoft.appcenter.push.TokenService&gt;. Apps targeting Android 12

在我使用 firebase 推送通知服务的应用程序中,我添加了所有与通知相关的服务。下面的代码我在 Andriodmanifest.xml 中使用

          android:installLocation="preferExternal"
          package="com.edmatix.parent.shemida"
          android:versionName="production.release.1.0.0.0"
          android:versionCode="20220818">
  <uses-sdk android:minSdkVersion="17" android:targetSdkVersion="31" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <application android:label="SHEMIDA INTERNATIONAL SCHOOL" android:requestLegacyExternalStorage="true" android:preserveLegacyExternalStorage="true"  android:icon="@drawable/SHEMIDA_Launcher" android:networkSecurityConfig="@xml/network_security_config">
    <meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyAnvG581Y_oVWbDcwYNDy6v4CfRdtmU2CY" />
    <uses-library android:name="org.apache.http.legacy" android:required="false" />
    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
      <service android:name="com.microsoft.appcenter.push.TokenService" android:exported="true"/>
      <service android:name="crc646c47bac7b09c0b0e.MyFirebaseIIDService" android:exported="true"/>
        <service android:name="crc646c47bac7b09c0b0e.MyFirebaseMessagingService" android:exported="true"/>
          <receiver android:name="crc64a93b901f58a35d0f.PushReceiver" android:exported="true"/>
            <service android:name="crc6494e14b9856016c30.PNFirebaseIIDService" android:exported="true"/>
              <service android:name="crc6494e14b9856016c30.PNFirebaseMessagingService" android:exported="true"/>
      <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="${applicationId}" />
      </intent-filter>
    </receiver>
  </application>
</manifest>```



Kindly help on this. im new to xamarin forms

【问题讨论】:

  • 即使我在我的一个项目中遇到这个问题,你也能在哪里解决这个问题,你能告诉我你用来解决这个问题的解决方案吗

标签: .net xamarin xamarin.forms xamarin.android xamarin.ios


【解决方案1】:

这些看起来像是在代码中定义的,然后在构建解决方案时自动生成到 AndroidManifest 中。

<service android:name="crc646c47bac7b09c0b0e.MyFirebaseIIDService" android:exported="true"/>
<service android:name="crc646c47bac7b09c0b0e.MyFirebaseMessagingService" android:exported="true"/>
<receiver android:name="crc64a93b901f58a35d0f.PushReceiver" android:exported="true"/>
<service android:name="crc6494e14b9856016c30.PNFirebaseIIDService" android:exported="true"/>
<service android:name="crc6494e14b9856016c30.PNFirebaseMessagingService" android:exported="true"/>

要修复它们,请添加已出口标记到类本身的属性,如下所示:

[Service(Exported = true)]
public class MyFirebaseIIDService: FirebaseInstanceIdService
{
    public static string Token => FirebaseInstanceId.Instance.Token;
    public static event Action<string> TokenRefreshed;

    public override void OnTokenRefresh()
    {
        TokenRefreshed?.Invoke(Token);
    }
}

【讨论】:

    【解决方案2】:

    问题原因:项目的compileSdkVersiontargetSdkVersion已经升级到31及以上。但是,manifest文件包含intent-filter的组件(就像上面的<service#com.microsoft.appcenter.push.TokenService>)没有显式设置android:Exported,那么就会出现这个错误。

    解决方法:将compileSdkVersiontargetSdkVersion设置在31以下。

    【讨论】:

    • 已经完成设置 compilesdkversion 和 targetsdkversion 低于 31 im uanble 上传捆绑文件到播放控制台。我面临以下问题。 "Your app currently targets API level 30 and must target at least API level 31 to ensure it is built on the latest APIs optimized for security and performance. Change your app's target API level to at least 31. Learn More
    猜你喜欢
    • 2022-01-21
    • 2022-07-13
    • 2022-09-23
    • 2023-02-12
    • 2021-10-03
    • 2022-01-06
    • 2022-06-10
    • 2023-01-15
    • 2021-10-11
    相关资源
    最近更新 更多