Android Studio3.6升级后AAR集成时Fragment视图找不到异常求助
解决AAR集成后Fragment找不到容器视图的问题
哥们,我完全懂你的痛苦!Android Studio 3.6升级后,资源合并的规则悄悄变了,直接导致你的项目单独跑没问题,打包成AAR集成到其他项目就炸锅——核心问题就是资源ID被重新映射/冲突了。
先给你拆解下原因:单独运行时,你的R.id.container_main_activity是固定的数值,但打包成AAR后,宿主项目在合并资源时会重新生成资源ID,这时候代码里硬编码的旧ID自然找不到对应的视图了,错误日志里的com.plavaga.vyuha.v2:id/content就是冲突或重映射后的结果。
下面是几个亲测有效的解决方案,按稳妥程度排序:
方案一:动态获取资源ID(最推荐)
不要直接用R.id.container_main_activity,改成通过资源名称动态查找,这样不管ID怎么变,只要名称对就能找到:
protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); if (savedInstanceState == null) { // 动态获取容器ID int containerId = getResources().getIdentifier( "container_main_activity", "id", getPackageName() ); if (containerId != 0) { FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() .replace(containerId, new MainFragment()) .commit(); } else { Log.e("MainActivity", "找不到容器视图ID,检查资源名称是否正确"); } } }
方案二:给Library资源加统一前缀,避免冲突
在你的Library项目的build.gradle里添加资源前缀配置,确保你的资源不会和宿主项目重名:
android { // 给所有资源加前缀,比如vyuha_,这样容器ID就变成@+id/vyuha_container_main_activity resourcePrefix "vyuha_" buildTypes { release { // 如果不需要资源压缩,直接关闭,减少ID变动概率 shrinkResources false minifyEnabled false } } }
记得同步gradle后,把布局里的ID和代码里的引用都改成带前缀的版本。
方案三:调整宿主项目的资源合并策略
如果宿主项目里有同名资源导致冲突,可以在宿主的build.gradle里配置合并规则:
android { // 只保留需要的资源语种/配置,减少冲突可能 resourceConfigurations += ["en", "zh-rCN"] packagingOptions { // 指定资源合并时优先保留Library的资源 mergeResourcesStrategy 'keep' } }
最后提醒下:每次打包AAR后,在宿主项目里先执行Clean Project再Rebuild Project,Android Studio 3.6后的缓存有时候会残留旧资源ID,导致问题复现。
内容的提问来源于stack exchange,提问作者Newton Suhail
相关产品推荐
相关产品推荐

