Android 12 适配之 "Android:exported"
将 build.gradle
中的 targetSDKVersion
和 compileSdkVersion
改为 31,对应 Android 12
build 项目报错
Apps targeting Android 12 and higher are required to specify an explicit value for
android:exported
when the corresponding component has an intent filter defined. See https://developer.android.com /guide /topics /manifest /activity -element#exported for details.
查看对应官网的解释
只要带有 intent-filter
标签的,就需要显式的指定 Android:exported
的值,activity
、receiver
等
例如
方法 1
targetSDKVersion
和 compileSdkVersion
回退到 31 以下
方法 2
修改 AndroidManifest.xml
文件
将我们能改的 AndroidManifest.xml
文件中需要显式指定 Android:exported
的值都改掉,但是有一些三方库也没有针对 Android 12
做适配,由于在 Android build
过程中,会将所有的 AndroidManifest.xml
文件合并成一个文件,将其中的一些标签合并到一起
打开主项目的 AndroidManifest.xml
文件,查看 Merged Manifest
,可以看到具体的报错和警告,发现有一个库:blockcanary
没有适配,这个库是用于检测程序卡顿的,看了一下最新的库都已经是 2017
年得了,只有先废弃,要是有需求的话再找替代的库
现在主项目和三方库的 AndroidManifest.xml
文件都没有问题了,再次运行成功。