【问题标题】:Failure [INSTALL_FAILED_OLDER_SDK] Android-L失败 [INSTALL_FAILED_OLDER_SDK] Android-L
【发布时间】:2014-06-27 17:42:14
【问题描述】:

我正在尝试使用来自 Android L 的新 CardView。我更新了 SDK 管理器中的所有内容,但我不断收到以下错误:

失败 [INSTALL_FAILED_OLDER_SDK]

这是我的build.gradle 文件:

apply plugin: 'android'

android {
    compileSdkVersion 'android-L'
    buildToolsVersion '20.0.0'

    defaultConfig {
        applicationId "www.thomascbeerten.com.nieuwetests"
        minSdkVersion 8
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    // Support Libraries
    compile 'com.android.support:support-v4:19.1.0'
    compile 'com.android.support:appcompat-v7:19.1.0'
    compile 'com.android.support:gridlayout-v7:19.1.0'
    compile 'com.android.support:mediarouter-v7:19.1.0'
    // compile 'com.android.support:support-v13:19.1.0'
    compile 'com.android.support:recyclerview-v7:+'
}

【问题讨论】:

    标签: android android-5.0-lollipop


    【解决方案1】:

    最近这里有一篇关于 L SDK 不兼容的帖子 与早期版本的 Android。我一直在挖掘 AOSP 存储库 现在已经有好几个小时了,并确定这些工具的行为是这样的 方式,因为它们旨在以不同的方式对待预览平台。 如果您针对预览版 SDK (android-L) 进行编译,构建工具将 将 minSdkVersion 和 targetSdkVersion 锁定到相同的 API 级别。这 导致生成的应用程序无法安装 运行旧版本 Android 的设备,即使您的应用程序 没有针对 L 做任何事情。更糟糕的是,新的 支持库(CardView、RecyclerView、Palette 等)也被锁定 进入 L API 级别,即使 - 根据他们的存储库 名称——它们应该可以在 API 级别 7 上正常工作(而且确实如此!)。

    请参阅我关于此 here 的 Reddit 帖子以及解决方法。

    【讨论】:

    • 感谢您的精彩文章!现在我完全明白了:)
    • 虽然这个答案理论上可以回答这个问题,it is better 在此处包含答案的基本部分,并提供链接以供参考。
    • 所以您应该按照reddit.com/r/androiddev/comments/297xli/… 的指南进行操作,您将能够在使用 android L 编译的同时安装在旧设备上
    【解决方案2】:

    一旦您解决了 Eddie 提到的上述问题。您可能还会遇到另一个错误;;

    Error:Error retrieving parent for item: No resource found that matches the given name 'android:Theme.Material.Light'.
    

    这将出现在您的 styles.xml 中。快速解决方法是将其替换为以下内容:

    <?xml version="1.0" encoding="utf-8"?>
     <resources>
    <!--<style name="AppTheme" parent="android:Theme.Material.Light">-->
    <style name="AppTheme" parent="android:Theme.Holo.Light">
    </style>
    

    【讨论】:

      【解决方案3】:

      改变

      android {
          compileSdkVersion 'android-L'
          buildToolsVersion '20.0.0'
      

      android {
        compileSdkVersion 21
        buildToolsVersion '21.0.2'
      

      注意android-L 是单引号,但21 不是。 21 是整数而不是字符串。

      【讨论】:

        【解决方案4】:

        当您使用 L 编译时,它实际上会在编译期间将您的 minsdkversion 设置为 L。如果您想使用 RecyclerView 或 CardView,我建议您查看 RecyclerViewLib。 RecyclerView 和 CardView 已经移入这个库,所以没有最小版本 L 的问题。作者还在他的blog post 中解释了如何删除所有与 L 相关的代码以使其安全使用。

        要将 RecyclerViewLb 添加到您的项目中,只需将以下行添加到您的 build.gradle 文件中的依赖项中:

        compile 'com.twotoasters.RecyclerViewLib:library:1.0.+@aar'
        

        然后您不想将compile 'com.android.support:recyclerview-v7:+' 添加到您的 build.gradle,因为您将通过 RecyclerViewLib 获得。

        【讨论】:

          【解决方案5】:

          我刚刚遇到了这个问题。当您的最小 sdk 版本和构建目标设置为比您的手机运行的更高的 API 级别/操作系统版本时,可能会发生这种情况。如果您使用的是 Android Studio,请转到 File > Project Structure > 并编辑相关设置,然后再次运行。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-10-24
            相关资源
            最近更新 更多