2014-06-27 11 views
39

Ich versuche, die neue CardView von Android L. I aktualisierte alles in dem SDK-Manager zu verwenden, aber ich erhalte die folgende Fehlermeldung erhalten:Fehler [INSTALL_FAILED_OLDER_SDK] Android-L

Failure [INSTALL_FAILED_OLDER_SDK]

Das ist mein build.gradle Datei:

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:+' 
} 

Antwort

54

Recently there was a post here regarding the L SDK's incompatibility with prior versions of Android. I've been digging in AOSP repositories for quite a few hours now, and determined that the tools behave this way because they are designed to treat preview platforms differently. If you compile against a preview SDK (android-L), the build tools will lock minSdkVersion and targetSdkVersion to that same API level. This results in the produced application being unable to be installed on devices running older releases of Android, even if your application isn't doing anything specific to L. To make matters worse, the new support libs (CardView, RecyclerView, Palette, etc.) are also locked into the L API level, even though--according to their repository names--they should work on API level 7 just fine (and they do!).

Meine Reddit Beitrag zu diesem here, mit einer Vermeidung des Problems.

+0

Danke für den tollen Artikel! Jetzt verstehe ich völlig :) – TomCB

+26

Während diese Antwort theoretisch die Frage beantworten kann, [es ist besser] (http://meta.stackexchange.com/a/8259/237685), die wesentlichen Teile der Antwort hier aufzunehmen, und zu liefern der Link als Referenz. – hichris123

+0

, also sollten Sie die Anleitung unter http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/ befolgen, und Sie können gleichzeitig auf älteren Geräten installieren, wenn Sie mit Android L kompilieren – Gabor

5

Sobald Sie die oben genannten Probleme gelöst haben, wie von Eddie erwähnt. Sie könnten auch in einen anderen Fehler geraten ;;

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

Dies wird in Ihrer styles.xml vorhanden sein. Die schnelle Lösung ist es mit dem unten folgenden zu ersetzen:

<?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> 

0

Wenn Sie mit L kompilieren es macht tatsächlich eine Änderung bei der Erstellung Ihrer minsdkversion L. Einstellung Wenn Sie RecyclerView oder CardView ich verwenden möchte würde empfehlen auschecken RecyclerViewLib. RecyclerView und CardView haben sich in diese Bibliothek verschoben, so dass es kein Min-Version-L-Problem gibt. Der Autor erklärte auch in seiner blog post, wie alle L verwandten Code entfernt wurde, um es sicher zu verwenden.

Um RecyclerViewLb zu einem Projekt fügen Sie einfach die folgende Zeile in Ihre Abhängigkeiten in Ihrer build.gradle Datei:

compile 'com.twotoasters.RecyclerViewLib:library:[email protected]' 

Sie dann wollen nicht die compile 'com.android.support:recyclerview-v7:+' zu Ihrem build.gradle hinzufügen, wie Sie bekommen das durch RecyclerViewLib.

2

ändern

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

zu

android { 
    compileSdkVersion 21 
    buildToolsVersion '21.0.2' 

Hinweis android-L ist in einfache Anführungszeichen aber 21 nicht. 21 ist eine Ganzzahl und keine Zeichenfolge.

0

Ich lief gerade in dieses Problem. Dies kann passieren, wenn Ihre min sdk-Version und die erstellten Ziele auf eine höhere Version von API level/OS eingestellt sind, als Ihr Telefon ausgeführt wird. Wenn Sie Android Studio verwenden, gehen Sie zu Datei> Projektstruktur> und bearbeiten Sie die Einstellungen für relavent, und führen Sie sie erneut aus.