android 错误 exported needs to be explicitly specified for Apps targeting Android 12

简介: android 错误 exported needs to be explicitly specified for Apps targeting Android 12

问题描述:

android 错误 android:exported needs to be explicitly specified for Apps targeting Android 12


问题原因:

由于项目的编译版本compileSdkVersion和targetSdkVersion升级到了31及以上(Android12),然后就是清单文件manifest里面包含了intent-filter的四大组件,没有明确的设置android:exported,就会出现这个错。


问题解决方案:


第一步,先调整我们能改动的App项目及依赖的Library里面的所有AndroidManifest.xml


a、在AndroidManifest.xml中搜索“<intent-filter”关键字,寻找设置了intent-filter的对应组件,确认是否包含android:exported ,如果没有则添加上,设置true或false具体看自己需求。


b、还有一种情况是,可能某些设置了android:export,但是合并时会报覆盖override相关错误,此时可加上tools:replace=“android:exported” 或许能解决。


通过以上两步后再次运行, 如果三方库的android:exported没问题,问题也就解决了,但如果还是爆错,那就是三方库没有解决这个问题导致的。


第二步,第三方库引起报错, 需要定位是哪个三方库导致的,这就需要在控制台执行命令:

chmod +x gradlew
./gradlew processDebugMainManifest --stacktrack


第三步,根据错误提示信息,可知道失败是四大组件的哪个组件,还可知道有几个失败的问题。

这时,我们就需要定位导致这个问题的是哪个具体的第三方库。


a、如果是自己刚加的第三方库,可尝试删除再执行第二步,看是否还报错误。如果不再报错误,则问题解决。


b、如果还报错误,那我们可以在build.gradle里面的dependencies里面, 采用二分大法, 先块注释一部分依赖引用(我们先不用去管代码里面由于没有引用,而引起的相关报红,只是暂时注释而已,找问题而已,问题找到后再恢复),再执行第二步,看是否还报错。


c、如果还报错,再具体二分大法块注释细分,直到能够行注释确定某一个三方库。


d、找到之后我们可以根据第二步执行后的结果,确认对应三方库的清单文件是否存在没加android:exported的问题 。


e、这样就定位到具体是哪个三方库导致的了,具体解决方法

  • 更新 build.gradle 里面的dependencies 第三方库的版本


方法一、我们可以在浏览器中搜索这个第三方库,找到开源代码,再阅读 readme , 找到此库,最新的版本号进行引用,以修复此问题。


方法二、直接使用build.gradle dependencies 引用第三方库的最新版本。

例如:

implementation 'com.github.wy749814530:MultiGraphics:1.0.4'
====>
implementation 'com.github.wy749814530:MultiGraphics:latest.release'
只需要将版本号1.0.4 替换为latest.release 就可以总是依赖最新版本了。


方法三、可以在我们自己的AndroidManifest里面覆写这个有问题的三方组件,主动加上android:exported


方法四、联系对方修复下这个问题再依赖新版。



PS总结:推荐直接使用版本号,不太推荐使用“latest.release”这种方式来依赖第三方库。

“latest.release”依赖方式的缺点:

  • 会增编译时间,而且有时候可能下载依赖失败
  • 新版本升级有可能影响到自身项目,导致编译失败
  • android studio在编译时,不能第一时间检查到新版本,会有时间间隔。



相关文章
|
3月前
|
开发工具 Android开发
解决Manifest merger failed : android:exported needs to be explicitly specified for <activity>
解决Manifest merger failed : android:exported needs to be explicitly specified for <activity>
85 1
|
6月前
|
Android开发
Android android:exported="true" 属性
Android android:exported="true" 属性
984 0
|
数据安全/隐私保护 Android开发
uniapp vue3版本 Android 引用 jsencrypt加密库 报错问题 “default“ is not exported by,解决方法
uniapp vue3版本 Android 引用 jsencrypt加密库 报错问题 “default“ is not exported by,解决方法
1211 0
|
开发工具 Android开发
Android 7.1 ro.rk.install_non_market_apps属性无效
Android 7.1 ro.rk.install_non_market_apps属性无效
242 0
|
安全 Linux 开发工具
公开/封闭属性android:exported引出的Android系统安全技术
公开/封闭属性android:exported引出的Android系统安全技术 android:exported是Android在AndroidManifest.xml里面配置Activity或其他组件如Service或广播等的基础属性,之所以在这里挑出来单独说,是因为该属性现在经常被一些粗糙的安全漏洞扫描系统错误的理解和使用,形成不正确的分析结论。
1170 0
|
Android开发
Android Studio 解决Error:(781) Multiple substitutions specified in non-positional format; did you ...
异常信息: /Users/mazaiting/AndroidStudioProjects/WisdomSite/app/build/intermediates/res/merged/debug/values/values.
1495 0
|
Android开发
我的Android进阶之旅------&gt;解决Error: specified for property &#39;mergedManifest&#39; does not exist.
错误描述 刚运行从Github上面下载而来的代码时,爆了如下所示的bug,错误描述如下所示: Error:A problem was found with the configuration of task ':app:generateDebugInstantRunAppInfo'.
1029 0