程序类型已存在:android.support.constraint.BuildConfig

12

build.gradle(模块:app)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 'android-P'
    buildToolsVersion '27.0.3'
    defaultConfig {
        multiDexEnabled true
        applicationId "tk.megh.myapplication"
        minSdkVersion 'P'
        targetSdkVersion 'P'
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dexOptions {
        preDexLibraries = false
    }
}



dependencies {
    implementation 'com.android.support:multidex:1.0.1'
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.0'
    androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation 'com.android.support:appcompat-v7:+'
    testImplementation 'junit:junit:4.12'

}

我认为我知道造成这个错误的原因了。如果你看看依赖关系,会发现有两个重复的包名不同的冗余包。

com.android.support.constraint:constraint-layout:1.1.0 androidx.constraintlayout:constraintlayout:1.1.0

但是我不能删除它们中的任何一个,因为一些包使用了它们。我是Android开发的新手,所以对任何解决方法都没有太多想法。

如果我删除

implementation 'com.android.support.constraint:constraint-layout:1.1.0'

我在调试过程中遇到了这个错误:

    java.lang.RuntimeException: Unable to start activity 
ComponentInfo{tk.megh.myapplication/tk.megh.myapplication.MainActivity}: 
android.view.InflateException: Binary XML file line #2: Binary XML file 
line #2: Error inflating class android.support.constraint.ConstraintLayout

如果我移除

implementation 'androidx.constraintlayout:constraintlayout:1.1.0'

在调试过程中,我遇到了以下错误:

 java.lang.RuntimeException: Unable to start activity 
ComponentInfo{tk.megh.myapplication/tk.megh.myapplication.DisplayMessageActivity}: 
android.view.InflateException: Binary XML file line #2: Binary XML file line #2: 
Error inflating class androidx.constraintlayout.widget.ConstraintLayout

附加细节:

MainActivity.java的导入:

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;

导入DisplayMessageActivity.java

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;   

提前致谢。


我不明白为什么你不能删除它们中的任何一个?它们本质上是相同的,只是 Google 开始将代码移动到另一个地方 "androidx" 并开始采用它作为更新支持库(以及其他组件)的唯一位置。 - Levi Moreira
删除其中一个并调整代码中的引用。 - Carlos
移除 androidx.constraintlayout:constraintlayout:1.1.0 - Gabriele Mariotti
目前在Android P上无法使用约束布局的编辑器? - filthy_wizard
3个回答

31

错误提示表明您在布局xml文件中使用了ConstraintLayout

请仅保留一个库的版本,并确保在您的xml中使用该版本的ConstraintLayout。

因此,如果您保留androidx,请检查您的布局文件,并确保您在那里使用的是androidx.constraintlayout.ConstraintLayout,而不是android.support.constraint.ConstraintLayout


1
好的,我没想到问题和布局有关。现在我明白了,非常感谢你的帮助。 - Meghashyam Bhandary
8
当你使用Android Studio 3.2(金丝雀版14)将视图组转换为CLayout时,会添加androidx约束布局。如果您已经在使用CL 1.1.0(来自支持库),这是新项目模板为您完成的(包含在gradle中),那么您将看到此冲突。这可能是一个“错误”或一些其他问题,一旦androidx包成为主流并移除另一个包,它就会消失。 - Martin Marconcini
我发现在我的xml文件中使用了所有正确匹配的xml和ConstraintLayout。问题出在build.gradle文件上,其中两者都作为依赖项包含在内。一旦我将它们移除,它就正常工作了。 - codingjeremy

1
请注意不要同时引用com.android.support.constraint:constraint-layoutandroidx.constraintlayout:constraintlayout。选定一个(最好是androidx),删除另一个,并确保布局文件中的包名称也一致。这样可以解决我的问题。

0

我也曾经遇到过类似的问题。我在使用 android.arch.core 库时使用了两个不同版本。通过修复这些版本,问题得以解决。尝试在整个应用程序中使用一个版本。希望能对某些人有所帮助。

谢谢


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接