升级至Android 12目标版本后应用部署失败,求解决方案
修复Android 12部署失败的INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误
问题本质
当应用目标版本升级到Android 12(API 31)及以上时,系统要求所有包含intent-filter的组件(Service、Activity、BroadcastReceiver)必须显式声明android:exported属性(值为true或false)。你遇到的错误是因为Firebase SDK自动注入的crc64045f0433dcf30634.FirebaseNotificationService服务带有intent-filter,但未设置android:exported,导致安装包解析失败。
解决方案
在你的AndroidManifest.xml的<application>标签内,显式声明这个Firebase服务并添加android:exported属性:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="testapp.com" android:installLocation="preferExternal" android:versionCode="31" android:versionName="4.1"> <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="31" /> <application android:label="Test App" android:icon="@drawable/icon" android:usesCleartextTraffic="true" android:allowBackup="false"> <!-- 新增:显式声明FirebaseNotificationService并设置exported --> <service android:name="crc64045f0433dcf30634.FirebaseNotificationService" android:exported="true"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <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"> <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>
额外说明
- 该服务用于接收Firebase云消息,需要允许外部服务访问,因此设置
android:exported="true"是合理的。 - 如果后续其他组件出现同类错误,可按相同逻辑处理:找到对应组件的类名,在Manifest中显式声明并添加
android:exported属性。
内容的提问来源于stack exchange,提问作者Matthew Pans
相关产品推荐
相关产品推荐

