起因是项目想要更新友盟统计的最新版本(友盟核心9.3.7),结果友盟说需要同时将分享也更新到最新(7.1.4),而此版本的分享QQ、微博、微信不但要使用友盟相关的完整sdk,还要使用各软件官方的sdk。
但在集成新浪微博的官方sdk(10.10.0)后,项目出现了Default Activity not found的问题。
网上搜了一下,大多都是清理缓存等针对studio的操作,个人感觉并不合适,于是开始自己分析。
首先,注释掉对新浪微博sdk的依赖,问题消失。确定是依赖和原代码产生了冲突。
而默认启动的Activity是在清单文件里定义的,清单文件本身并无错误(注掉新浪可以正常使用),那么一定是清单文件中某些内容与新浪微博中的内容产生了冲突。
想到集成文档里提到了分享需要FileProvider,于是尝试将项目原来清单文件中定义的FileProvider注释掉,果然问题消失了。
至此问题便已经确定,因为新浪微博分享需要使用FileProvider,所以很可能其官方sdk中就已经定义过了,与我们自己在项目中定义的发生了冲突,导致清单文件处于失效的状态,以至于启动时报错,找不到默认Activity。
解决办法:就是定义合并清单的属性node,参数replace表示在合并时使用注解的那一个替换低优先级的声明。
<provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true" tools:node="replace"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" /> </provider>
修改代码后,studio不再报错,试了试项目功能都正常了。
注:这个问题我也是头一次遇到,node也是第一次使用,清单合并相关的内容还有很多,大家可以多去看看,如果发现我的说法有啥错误,还请帮忙指正。