Android Studio的gradle无法编译指定版本

23

我已经开发了这个小项目几天了,但今天突然间,Android Studio开始给我报错

Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version 14 declared in library com.android.support:support-v4:21.0.0-rc1

我理解是因为它正在尝试编译Android-L的库。我想要编译的版本是旧版本,但它不会。无论我输入哪个版本,它都会给我上面的错误。以下是依赖项。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:20.+'
    compile 'com.android.support:support-v4:20.+'
}

更新

我刚安装了Android Studio Beta,并将我的依赖项更改为Eugen在下面建议的版本。但无论我指定哪个版本的appcompat和support库,同步项目都会出现相同的错误。每次同步时都会给出这个错误。

uses-sdk:minSdkVersion 14 cannot be smaller than version L declared in library com.android.support:support-v4:21.0.0-rc1

我的更新后的依赖关系

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:19.+'
    compile 'com.android.support:support-v4:19.+'
}

更新 2

我认为我没有正确理解Android Studio的依赖系统。我刚刚从依赖项中删除了appcompat和support,但仍然出现相同的错误。我需要从某个地方删除最初包含的库吗?

build.gradle

*注意 - 我又把这两个库添加回去并尝试了同步,只是为了确认。但是没有任何改变。

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    defaultConfig {
        applicationId "taz.starz.footynews"
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:19.+'
    compile 'com.android.support:support-v4:19.+'
    compile project(':ParallaxScroll')
    compile files('src/main/libs/Header2ActionBar-0.2.1.jar')
    compile 'com.arasthel:gnavdrawer-library:+'
    compile 'com.koushikdutta.ion:ion:1.2.4'
}

最高层级的build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

看起来你有一个多模块项目。你的父级 build.gradle 是什么? - Eugen Martynov
你是指顶层的 build.gradle 文件吗? - Thahzan
parallaxscroll 项目的依赖是什么? - Eugen Martynov
是的,顶层 build.gradle。 - Eugen Martynov
我将父级build.gradle文件添加到了OP中。 - Thahzan
显示剩余3条评论
7个回答

43

更新:我找到了适用于我的情况的真正解决方法。请在您的build.gradle中执行以下操作,确保没有任何依赖项悄悄地包含support-v4 r21:

compile("com.blahblah:blah:123") {
    exclude group: 'com.android.support', module:'support-v4'
}

你可以将exclude添加到所有库中,然后逐个删除,直到找出是哪一个引入了support-v4并导致错误。然后在该库上保留exclude
这里有一个新的错误报告:https://code.google.com/p/android/issues/detail?id=72430 假设您正在使用支持库,解决方法是注释或删除该行代码。
<version>21.0.0-rc1</version>

在本地Maven存储库清单文件中,路径为<android-sdk>/extras/android/m2repository/com/android/support-v4/maven-metadata.xml


非常感谢,问题已解决。我猜想在 Google 解决这个问题之后,我需要回去把它重新输入到文件中? - Thahzan
太好了 :) 我使用独立的Android SDK,所以没有这样的问题。好知道! - Eugen Martynov
暂时将那行注释掉可以解决这个问题。 - Emanuel Canha
1
同样的问题也可能是由于appcompat-v7引起的,因此当使用support-v4无法解决问题时,您也应该尝试使用exclude group: 'com.android.support', module:'appcompat-v7' - akirk

24

我遇到了与我的某个依赖项相同的问题,因为它指定了“support-v7:+”作为一个依赖项。我使用gradle dependencies找到了这个问题。

Gradle提供了一种强制分辨率到特定版本的方法。最终我在我的build.grade中加入了以下内容:

compile('com.android.support:appcompat-v7:19.1.0') {
    // really use 19.1.0 even if something else resolves higher
    force = true 
}

24

通过最新的更新,使用以下方式:

compile 'com.android.support:support-v4:20.+'
或者
compile 'com.android.support:support-v4:+'

你正在使用L-preview中的支持库。

这些支持库声明 minSdkVersion L

你需要强制将 minSdkVersion 设为'L'(查看文档)

原因是这些API还不是最终版本。这是一种防止在最终API 21设备上安装应用或使用支持库21-r1发布应用程序的方法。

使用

compile 'com.android.support:support-v4:19.1.0'

你正在使用“旧版”的支持库 19.1.0。


1
我理解了其中一半,并尝试在依赖项中输入“compile 'com.android.support:appcompat-v7:19.1.+'”,但它仍然编译了最新版本(出于某种原因)。TalkLittle的答案有效,尽管我怀疑这不是最佳解决方案。 - Thahzan
尝试清除缓存并重新同步项目。 - Gabriele Mariotti
编译'com.android.support:support-v4:20.+'似乎无法工作。 - IgorGanapolsky

9
compile('com.android.support:support-v4:19.1.0'){
    force = true
}

这对我有用。

1

我遇到了以下错误:

执行任务“:app:processDebugManifest”失败。

清单合并失败:uses-sdk:minSdkVersion 1不能小于库中声明的版本4 C:\Users\Igor\AppData\Local\Android\sdk\samples\android-21_1\legacy\ApiDemos\app\build\intermediates\exploded-aar\com.android.support\support-v4\21.0.3\AndroidManifest.xml 建议:使用tools:overrideLibrary="android.support.v4"强制使用

然后我通过在我的defaultConfig gradle块中添加以下内容来解决它:

minSdkVersion 15
targetSdkVersion 21

我也遇到了同样的错误,这对我没起作用。 - Silvia H

1

是的。新的支持库目前还不兼容旧版Android。

请将您的gradle更改为:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:19.1.+'
    compile 'com.android.support:support-v4:19.1.+'
}

我希望你仍然有像这样的东西:


android {
  compileSdkVersion 19
  buildToolsVersion '19.1.0'

  defaultConfig {
    minSdkVersion 14
    targetSdkVersion 19
 }
}

我已经按照你说的更改了,但是它出现了这个错误(我刚刚安装了AS Beta,所以它显示的错误略有不同):uses-sdk:minSdkVersion 14不能小于库com.android.support:support-v4:21.0.0-rc1中声明的版本L。 - Thahzan
是的,compileSdkVersion、minSdkVersion等都已正确定义。 - Thahzan
你修改了这个 com.android.support:appcompat-v7:19.+ 吗?之后同步了gradle文件吗? - Eugen Martynov
我修改后它要求同步,我进行了同步,但是它仍然显示相同的错误。我做错了吗?我需要手动同步吗? - Thahzan
我不认为我正确理解了Android Studio的系统。Eugen,你能看到我的更新(2)并给我一个答案吗? - Thahzan
显示剩余2条评论

0
在Android SDK管理器中,从“extra”组中安装“Android支持存储库”。它对我有帮助。当我添加了“exclude group: 'com.android.support', module:'support-v4'”后,构建已经完成,但是出现了一些其他错误。

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