已显式指定android:exported仍报错的DJI SDK Android集成问题求助
问题根因
你当前项目的targetSdkVersion设置为31(对应Android 12版本),Android 12及以上系统要求所有带intent-filter的四大组件(Activity、Service、BroadcastReceiver、ContentProvider)必须显式声明android:exported属性。你自行在主Manifest中配置的自定义组件已添加该属性,但你集成的DJI SDK 4.12版本发布时间早于Android 12规范落地,SDK内部自带的组件(尤其是未在你主Manifest中显式配置的服务、广播接收器、子Activity等)没有配置android:exported属性,在Manifest合并阶段就会触发报错,该问题和minSdk的配置无关。
可行解决方案
方案一:降级编译/目标SDK版本(推荐,兼容性最好)
DJI SDK 4.x系列对Android 12+的适配存在较多已知兼容性问题,直接降版本可以避免后续运行时出现其他未知异常,修改build.gradle (:app)中的参数即可:
android { // 将compileSdk从31改为30 compileSdk 30 defaultConfig { applicationId "com.dji.importSDKDemo" minSdk 19 // 将targetSdk从31改为30 targetSdk 30 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } // 其余配置保持不变 }
修改后同步Gradle重新构建即可解决报错。
方案二:在主Manifest中强制补全属性(适合需要保留targetSdk31的场景)
- 首先给你主Manifest中已经声明的DJI SDK组件补全
android:exported属性,当前你的DJIGlobalService未配置该属性,修改如下:
<service android:name="dji.sdk.sdkmanager.DJIGlobalService" android:exported="false"> </service>
- 给Manifest根节点添加tools命名空间,用于强制覆盖SDK内部组件的属性配置:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.dji.importSDKDemo">
- 若修改后仍有报错,可在
<application>标签中添加tools:replace="android:exported",强制合并所有组件的exported属性。
内容的提问来源于stack exchange,提问作者Prometheus
相关产品推荐
相关产品推荐

