截至今天,某些事情一定发生了变化,因为我们无法在应用程序商店中更新我们的应用程序。
上传时出现此错误:
Warning: If an activity, service, or broadcast receiver uses intent filters and doesn't have an explicitly-declared value for android:exported, your app can't be installed on a device that runs Android 12 or higher.
在文档中给出了如何解决此问题的示例:
<service android:name="com.example.app.backgroundService"
android:exported="false">
<intent-filter>
<action android:name="com.example.app.START_BACKGROUND" />
</intent-filter>
</service>
问题是,这是关于 java 和 android studio,但不能很好地转换为 xamarin.forms。
这是我的清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.172" package="com.interiorcircle.interiorcircledroid" android:installLocation="auto" android:versionCode="329">
<uses-sdk android:minSdkVersion="28" android:targetSdkVersion="31" />
<application android:label="Interior Circle" android:theme="@style/MainTheme" android:icon="@mipmap/launcher_foreground">
<provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data>
</provider>
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="asd" />
</application>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-feature android:name="android.hardware.location.network" android:required="false" />
</manifest>
编辑:
我注意到 obj 文件夹在清单中构建,这里没有相关属性:
<service android:name="crc6494e14b9856016c30.PNFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<receiver android:name="crc6494e14b9856016c30.PushNotificationActionReceiver" />
<receiver android:name="crc6494e14b9856016c30.PushNotificationDeletedReceiver" />
<activity android:configChanges="orientation|screenSize|uiMode" android:name="crc646957603ea1820544.MediaPickerActivity" />
有没有人有类似的经历并且可能已经解决了这个问题?
我在服务属性上设置了这个...
[Service(Exported = true or false)]
这导致属性被自动添加到生成的清单文件中。
正如我在问题中发现的那样,问题是由 firebase nuget 包产生的,它缺少 android:exported 属性。
但是,您可以通过将此行添加到应用程序标签之间的清单中来添加此内容:
<receiver android:name="crc6494e14b9856016c30.PNFirebaseMessagingService" android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</receiver>
由于这是一个任意的命名空间,它可能不会永远工作,所以请记住,这个命名空间可能会改变。
我还针对这个确切的问题打开了一个 git 问题,以便开发人员可以自行修复它。
最好