Android编译报错Program type already present及布局膨胀异常求助
解决Android编译错误:Program type already present: android.support.constraint.BuildConfig
兄弟,你这问题我刚入门Android的时候也踩过一模一样的坑!本质是Android Support库和AndroidX库混用导致的冲突——这俩是Google推出的两套完全独立的安卓支持库体系,绝对不能在同一个项目里同时使用对应的组件(比如你这里的ConstraintLayout就分别属于这两套),同时引入自然会触发重复类的编译错误,而单独移除其中一个又会因为布局文件找不到对应类报膨胀异常。
下面给你一套清晰的解决方案,推荐直接转用AndroidX(因为Google已经停止维护老Support库了,AndroidX是未来趋势):
步骤1:统一依赖库
打开build.gradle (Module: app),删除老Support版本的ConstraintLayout依赖,只保留AndroidX版本:
修改前的依赖片段:
implementation 'com.android.support.constraint:constraint-layout:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.0'
修改后:
// 删掉老Support版,只留AndroidX版 implementation 'androidx.constraintlayout:constraintlayout:1.1.0'
步骤2:修正布局文件的根布局类
- 找到
MainActivity对应的布局文件(比如activity_main.xml),把根布局的android.support.constraint.ConstraintLayout替换成androidx.constraintlayout.widget.ConstraintLayout:
修改前:
修改后:<android.support.constraint.ConstraintLayout ...> <!-- 布局内容 --> </android.support.constraint.ConstraintLayout><androidx.constraintlayout.widget.ConstraintLayout ...> <!-- 布局内容 --> </androidx.constraintlayout.widget.ConstraintLayout> DisplayMessageActivity的布局已经用了AndroidX版本的ConstraintLayout,不需要修改。
步骤3:替换Activity的导入为AndroidX版本
把两个Activity里的android.support.v7.app.AppCompatActivity导入替换成AndroidX的对应类:
修改前:
import android.support.v7.app.AppCompatActivity;
修改后:
import androidx.appcompat.app.AppCompatActivity;
步骤4:配置项目默认使用AndroidX
打开项目根目录的gradle.properties文件(如果没有就新建一个),添加以下两行配置:
android.useAndroidX=true android.enableJetifier=true
Jetifier会自动把第三方依赖里的老Support库代码转换成AndroidX兼容的版本,避免后续其他依赖出现类似冲突。
如果你暂时不想转AndroidX,也可以选择继续用老Support库,操作刚好相反:
- 删除AndroidX版的ConstraintLayout依赖
- 把
DisplayMessageActivity布局里的androidx.constraintlayout.widget.ConstraintLayout替换成android.support.constraint.ConstraintLayout - 保持Activity的导入为老Support版本即可
但还是强烈建议转AndroidX,毕竟老Support库已经被Google弃用,后续不会再有更新维护。
内容的提问来源于stack exchange,提问作者Meghashyam Bhandary
相关产品推荐
相关产品推荐

