清单合并失败:uses-sdk:minSdkVersion 10不能小于库com.android.support:appcompat-v7:21.0.0-rc1中声明的版本L。

43

在下载了L预览版本的Android Studio之后,当我的项目有minSdkVersion为19时,出现了上述错误。

此外,在将mindSdkVersion设置为以下内容时:

defaultConfig {
....
          minSdkVersion 'L'
....
    }

我得到了很多错误,如下所示,涉及来自 AppCompat-v7-21 的资源:

/home/user/workspace/project/build/intermediates/exploded-aar/com.android.support/appcompat-v7/21.0.0-rc1/res/values-v21/values.xml
Error:Error retrieving parent for item: No resource found that matches the given name '@android:TextAppearance.Material.SearchResult.Subtitle'.

所以我有两个问题:

  1. 为什么 AS 抱怨 minSdkVersion?我猜想是因为 AppCompat-v7 21 只支持 L 版本;但为什么呢?它在秋季正式发布时也只会支持 L 版本吗?因为那将是一个问题...还是说这只是暂时的限制,为了防止应用被推送到 Play Store,就像在 Google I/O 2014 Keynote 中指定的那样?
  2. 既然我已经将 mindSdkVersion 设置为 L,为什么 AppCompat-v7 21 还会抱怨这些错误?

在build.gradle中包含支持库的版本号,例如: compile 'com.android.support:appcompat-v7:19.+' - Deniz
6个回答

56
compileSdkVersion 'android-L'

BOOM. Done.

最后编辑: 自Android 5.0发布以来,这已不再是问题,直接针对API级别21进行目标设置即可。

为了更清晰明确地表达:正如下面的David_E所指定的,这个解决方案只适用于L版本,如果你试图在低于L版本的设备上部署应用程序(例如<=4.4.4),它将抱怨OLD_SDK。为了使应用程序在L之前的版本中工作,仍然需要使用旧版的v20支持库+appcompat+targetVersionSdk和compileVersionSdk。

dependencies {

        compile 'com.android.support:appcompat-v7:20.+'
        compile 'com.android.support:support-v4:20.+'
    }

    android {
        compileSdkVersion 20
        buildToolsVersion '20'

        defaultConfig {
            applicationId "com.example.application"
            minSdkVersion 10
            targetSdkVersion 20
            versionCode 1
            versionName "1.0"
        }
}

2
我可以使用L SDK进行编译并针对Android 4.X目标吗? - Dimillian
1
仍然在Android 4.2设备上遇到“Failure [INSTALL_FAILED_OLDER_SDK]”错误。 - Dimillian
糟糕,我读错了,抱歉。不,我在升级我的N5之前尝试过那个方法,但它没有起作用。但我更关心我的应用程序能够在所有版本上运行,而不是针对或编译在L上。我想这正如他们在主题演讲中所描述的一样(你还不能在Play上使用L应用程序)。 - Bogdan Zurac
好的,我所做的是回退到19,现在我不再收到放大的错误信息了,并且它可以在Android L和之前的版本上启动。听起来像是缓存错误或其他问题。 - Dimillian
1
有没有关于Google何时修复com.android.support:appcompat-v7:21.0.0-rc1的消息?如果没有,那么当信息可用时应该在哪里寻找?提前致谢! - Forrest Bice
显示剩余7条评论

32

答案中提到的这里可能无法正常工作,因为它会使您的应用程序仅适用于Android L。

为了保持与旧版Android操作系统的向后兼容性,请更改gradle依赖项。

从:

compile 'com.android.support:appcompat-v7:+'

To:

compile 'com.android.support:appcompat-v7:20.+'

请注意错误信息中提到的com.android.support:appcompat-v7:21.0.0-rc1,问题出在使用appcompat-v7:+会告诉gradle导入最新版本的appcompat-v7库依赖,不幸的是,这个最新版本只适用于Android L,因此我们需要指向先前的版本。希望Google能在不久的将来解决这个问题。

这个问题在Google Code上:http://code.google.com/p/android/issues/detail?id=72991 ,标记为“已发布”,日期为2012年7月28日。 - Mixaz

4

如果想要使用一个可用版本进行工作,只需按以下方式更改gradle依赖项:

dependencies {
    compile 'com.android.support:gridlayout-v7:19.0.1'
    compile 'com.android.support:appcompat-v7:19+'
    ...
}

was:

compile 'com.android.support:appcompat-v7:+'

请注意。

我在SDK管理器中更新了工具和附加组件。

当项目损坏后,我按照上述方法进行修复。

目前,我不更新Android L和4.4W(今天已经有足够的错误了 :-( )


4
我使用的方法是安装Android Studio Beta(不是预览版本,这个Beta版是在IO大会发布的)。先卸载预览版然后安装Beta版,再打开你的项目。它会问你要使用项目SDK还是Studio SDK,请使用Android Studio的SDK。然后进入你的项目中的local.properties文件,在sdk.dir处确保任何反斜杠()都被加倍。接着进入Project Structure > SDK,并确保指向Android SDK。在我的电脑上是C:\Program Files(x86)\Android\android-studio\SDK。然后在你的项目和任何库中的build.gradle文件中,需要将下面的代码:compile 'com.android.support:support-v4' 改为 compile 'com.android.support:support-v4:20+'。重新同步gradle文件即可解决问题。

Android Studio Beta 0.8.1 可在此处下载:http://tools.android.com/recent/androidstudiobetareleased。 - Stuartsoft

2

感谢David的回答!

我必须进行更改

compile 'com.android.support:support-v13:+'

To:

compile 'com.android.support:support-v13:20.+'

现在一切都运行完美。

0

仅作补充:这里的其他答案没有解决我的问题,但我找到了Android Studio 0.8.0中修复android-l问题的另一种方法。在我修改了build.gradle中的依赖项之后,问题仍然不幸地发生,代码会显示OLD_SKD。我正在使用Galaxy S2。

除了将所有事物更改为:19+:

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

它仍然无法正常工作,所以我不得不尽可能地回到原点:

android {
    compileSdkVersion 19
    buildToolsVersion '19.1'
    defaultConfig {
        minSdkVersion 11
        targetSdkVersion 19
        versionCode 1
        versionName '1.0'
    }

现在应用程序在手机上又可以使用了。 我可能应该换一部新手机,但现在,我希望这可以帮助到某些人。


你仍然遇到问题的原因是因为你的一个依赖项有一个子依赖项,它正在获取支持库的最新版本。 - Jason Robinson

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