当前位置: 首页 > 知识库问答 >
问题:

已经存在的程序类型:android.support.v4.app.BackStack唱片

农英杰
2023-03-14

我已经升级了我的Android Studio,我在最新版本中发现了许多问题。

虽然存在许多类似的问题,但我检查了所有问题的答案,没有一个对我有效!

以下是我在编译代码时遇到的错误:

程序类型已存在:android。支持v4.app。BackStackRecord$Op消息{kind=ERROR,text=Program type已经存在:android.support.v4.app.BackStackRecord$Op,sources=[未知源文件],工具名=Optional.of(D8)}

这是我的gradle文件:

项目:

// Top-level build file where you can add configuration options common to 

all sub-projects/modules.

buildscript {

repositories {
    google()
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.1.0'


    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    }
 }

 allprojects {
 repositories {
    google()
    jcenter()
    maven {
        url "https://jitpack.io"
          }
     }
}

task clean(type: Delete) {
delete rootProject.buildDir
}

应用程序:

apply plugin: 'com.android.application'

android {
compileSdkVersion 27
defaultConfig {
    applicationId "com.alcantara.bugismart"
    minSdkVersion 15
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner 
"android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 
'proguard-rules.pro'
            }
           }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso- 
    core:3.0.1'
    implementation 'com.github.ViksaaSkool:AwesomeSplash:v1.0.0'
}

你可以告诉我还有什么要补充的,以了解我在做什么或我错在哪里。

共有3个答案

柳经纶
2023-03-14

替代公认答案的另一种方法是告诉gradle强制更新版本:

final SUPPORT_LIB_VER = '27.1.1'

configurations.all {
    resolutionStrategy { 
        force "com.android.support:appcompat-v7:${SUPPORT_LIB_VER}"
        force "com.android.support:support-v4:${SUPPORT_LIB_VER}"
    }
}

当您有许多依赖项时,这会更方便。

另请参阅:对“如何强制Gradle为两个依赖项设置相同版本”的回答

华懿轩
2023-03-14

将其添加到你的应用程序模块中。格雷德尔:

implementation 'com.android.support:support-v4:27.1.1'
裴卓君
2023-03-14

程序类型已存在:android。支持v4.app。BackStackRecord$Op消息{kind=ERROR,text=Program type已经存在:android.support.v4.app.BackStackRecord$Op,sources=[未知源文件],工具名=Optional.of(D8)}

出现此问题的原因是支持库重复。此依存关系:

implementation 'com.github.ViksaaSkool:AwesomeSplash:v1.0.0'

正在使用旧版本的支持库。如果您已经使用了支持库,请尝试将其排除在外:

// support libraries we want to use
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:support-v4:27.1.1'

// we already have the specific support libraries. So, exclude it
implementation ('com.github.ViksaaSkool:AwesomeSplash:v1.0.0') {    
    exclude group: 'com.android.support'
    exclude module: 'appcompat-v7'
    exclude module: 'support-v4'
}

您需要使用以下命令检查依赖关系:

./gradlew app:dependencies

或者,您也可以通过添加具有所需确切版本的冲突库来覆盖支持库版本。

在添加构建依赖项留档中,有一个完整的步骤可以修复依赖项解析错误。以下是摘录:

当您向应用程序项目添加多个依赖项时,这些直接和可传递的依赖项可能会相互冲突。Android Gradle插件试图优雅地解决这些冲突,但一些冲突可能会导致编译时或运行时错误。

为了帮助您调查哪些依赖关系导致了错误,请检查应用程序的依赖关系树,并查找出现多次或版本冲突的依赖关系。

如果您无法轻松识别重复依赖项,请尝试使用Android Studio的UI搜索包含重复类的依赖项,如下所示:

  1. 选择导航

以下各节描述了您可能遇到的不同类型的依赖项解析错误以及如何修复这些错误。

如果一个类在运行时类路径上出现多次,则会出现类似以下错误:

Program type already present com.example.MyClass

此错误通常由以下情况之一引起:

>

  • 二进制依赖项包括一个库,您的应用也将其作为直接依赖项包含在内。例如,您的应用声明了对库A和库B的直接依赖项,但库A已在其二进制文件中包含库B。

    • 要解决此问题,请删除库B作为直接依赖项

    您的应用程序在同一库上具有本地二进制依赖项和远程二进制依赖项。

    • 要解决此问题,请删除其中一个二进制依赖项

    当Gradle解析编译类路径时,它首先解析运行时类路径,并使用结果来确定应该将哪些版本的依赖项添加到编译类路径中。换句话说,运行时类路径确定下游类路径上相同依赖项所需的版本号。

    您的应用程序的运行时类路径还确定Gradle在应用程序测试APK的运行时类路径中匹配依赖项所需的版本号。类路径的层次结构如下图所示:

    例如,当您的应用程序包括使用依赖项配置的依赖项版本,并且库模块包括使用仅运行时配置的依赖项的不同版本时,可能会发生冲突,即同一依赖项的不同版本出现在多个类路径中。

    在解决对运行时和编译时类路径的依赖时,Android Gradle插件3.3.0和更高版本会尝试自动修复某些下游版本冲突。例如,如果运行时类路径包括库A版本2.0,编译类路径包括库A版本1.0,则插件会自动将编译类路径上的依赖项更新为库A版本2.0,以避免错误。

    但是,如果运行时类路径包含Library A版本1.0,而编译类路径包含Library A版本2.0,则插件不会将对编译类路径的依赖降级为Library A版本1.0,并且您仍然会收到类似于以下内容的错误:

    Conflict with dependency 'com.example.library:some-lib:2.0' in project 'my-library'.
    Resolved versions for runtime classpath (1.0) and compile classpath (2.0) differ.
    

    要解决此问题,请执行以下操作之一:

    • 将所需版本的依赖项作为api依赖项包含到库模块中。也就是说,只有库模块声明依赖关系,但应用程序模块也可以通过传递方式访问其API
    • 或者,您可以在两个模块中声明依赖关系,但应确保每个模块使用相同版本的依赖关系。考虑配置项目范围的属性,以确保每个依赖项的版本在整个项目中保持一致

  •  类似资料: