Flutter集成Jitsi Meet Plus在Android 12安装失败的解决方法
解决Flutter集成Jitsi Meet Plus在Android 12上的安装解析失败问题
问题原因
Android 12(目标SDK版本31及以上)强制要求所有包含intent filters的组件必须显式声明android:exported属性。Jitsi Meet Plus依赖的org.jitsi.meet.sdk.ConnectionService组件自带intent filter,但未声明该属性,导致安装时触发INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误。
解决步骤
修改项目的android/app/src/main/AndroidManifest.xml,将ConnectionService的声明移至<application>标签内部,并显式添加android:exported="true"属性:
修改后的完整AndroidManifest.xml代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="eu.buddybee.consultancy" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.GALLERY"/> <!-- Provide required visibility configuration for API level 30 and above --> <queries> <!-- If app checks for Web support --> <intent> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> </intent> <!-- If app checks for mail support --> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="mailto" /> </intent> <!-- If app checks for SMS support --> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="sms" /> </intent> <!-- If app checks for call support --> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="tel" /> </intent> </queries> <application tools:replace="android:label" android:label="BuddyBee" android:name="${applicationName}" android:icon="@mipmap/ic_launcher"> <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"> <!-- 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" /> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <!-- Deep linking --> <meta-data android:name="flutter_deeplinking_enabled" android:value="true" /> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" android:host="buddybee.eu" /> <data android:scheme="https" android:host="buddybee.eu" /> <data android:scheme="https" android:host="www.buddybee.eu" /> <data android:scheme="http" android:host="www.buddybee.eu" /> <data android:scheme="www"/> </intent-filter> </activity> <!-- 添加Jitsi ConnectionService声明 --> <service android:name="org.jitsi.meet.sdk.ConnectionService" android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE" android:exported="true"> <intent-filter> <action android:name="android.telecom.ConnectionService" /> </intent-filter> </service> <!-- Don't delete the meta-data below. This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> <meta-data android:name="flutterEmbedding" android:value="2" /> </application> </manifest>
关键说明
- 必须将
service标签放在<application>内部,这是AndroidManifest的规范要求(之前注释的代码放在了application外部,属于错误位置)。 android:exported="true"是Android 12+的强制要求,确保系统能识别该组件的可访问性。- 保留
android.permission.BIND_TELECOM_CONNECTION_SERVICE权限,这是Jitsi实现通话功能必需的。
内容的提问来源于stack exchange,提问作者Abir Ahsan
相关产品推荐
相关产品推荐

