【问题标题】:Program type already present: android.support.constraint.BuildConfig程序类型已经存在:android.support.constraint.BuildConfig
【发布时间】:2018-10-21 03:26:07
【问题描述】:

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;   

提前致谢。

【问题讨论】:

  • 我不明白你为什么不能删除它们中的任何一个?它们本质上是相同的,只是谷歌开始将代码移动到不同的地方“androidx”,并将开始采用它作为更新支持库(以及其他组件)的唯一地方。
  • 删除其中一个并调整代码中的引用。
  • 移除 androidx.constraintlayout:constraintlayout:1.1.0
  • 目前无法在android p上使用编辑器进行约束布局?

标签: android android-studio gradle build.gradle


【解决方案1】:

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

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

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

【讨论】:

  • 哦,好吧。没想到和布局有关。现在我知道了,谢谢你。
  • Android Studio 3.2 (canary 14) 在您(从可视化编辑器)将视图组转换为 CLayout 时添加了 androidx 约束布局。必须是“错误”或一旦 androidx 就会消失的东西。包成为主流,另一个被删除。如果您已经在使用 CL 1.1.0(来自支持部门),这是新项目模板为您所做的(包括 gradle 中的模板),那么您将看到此冲突。
  • 我发现我在我的 xml 文件中使用了所有正确匹配的 xmls 和 ConstraintLayout。它在 build.gradle 中,我将它们都包含为依赖项。一旦我删除它,它就可以正常工作了。
【解决方案2】:

我也有同样的问题。 我为 android.arch.core 库使用了两个不同的版本。因此,修复这些版本对我有帮助。尝试在整个应用程序中使用一个版本。希望它对某人有所帮助。

谢谢

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 2019-02-22
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 2019-04-10
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多