Wie Anwendung mit Theme.Material auf älteren Geräten zu starten

? David Corsalini @ | Original: StackOverFlow
---

Wie kann ich meine Anwendung auf pre-v21 Geräten laufen ?

compileSdkVersion  'android-L'
minSdkVersion 14
targetSdkVersion 'L'

Ich bin nur mit dem Theme.Material auf v21 . Ich bin nicht mit dem v20 Support-Bibliothek, ich bin mit com.android.support:support-v4:19.+

Wenn die Anwendung von Android Studio, heißt es, dass das Gerät in nicht kompatibel:

{compatible=NO, reason=minSdk(API 20, L preview) != deviceSdk(API 16)}

Von wo wird er unter den minSdk 20 ?

EDIT:

Der Grund, warum dies passiert sein könnte (wenn überprüft ), dass

Wenn Sie gegen eine Vorschau SDK ( android -L) zu kompilieren, wird die Build-Tools   sperren minSdkVersion und targetSdkVersion zu gleichen API-Ebene . diese   Ergebnisse in dem erzeugten Anwendungs ​​unfähig zu installieren   Geräte, auf denen ältere Versionen von Android, selbst wenn die Anwendung   ist nicht etwas Bestimmtes zu tun, um L.

Quelle: http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/

---

Top 5 Antwort

1Egor N @

Wenn Sie kompilieren gegen eine Vorschau SDK ( android -L), die Build- Tools zu sperren minSdkVersion und targetSdkVersion auf der gleichen API-Ebene . Daraus ergibt sich die erzeugte Anwendung nicht in der Lage, um auf Geräten mit älteren Versionen von Android installiert werden, auch wenn Ihre Anwendung ist nicht etwas Bestimmtes zu tun, um L.

Version 0.11 des Android Gradle Plugin aktiviert ein neues Manifest Merger standardmäßig, und es erlaubt uns, einige tun http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger Zeug. Also muss man hinzufügen, yo Ihre AndroidManifest.xml Datei eine Verwendungs ​​-sdk -Knoten, einfach spezifiziert eine tools:node Attribut. Diese spezifische Konfiguration erzählt die manifest Prozessor keine Attribute von uses-sdk Knoten mit niedrigerer Priorität manifestiert ( wie Bibliotheksverzeichnisse) mit den Attributen in der uses-sdk Knoten mit dem tools:node="replace" Attribut zu ersetzen. Seit Gradle auch Einsätze minSdkVersion und targetSdkVersion aus Ihrem build.gradle in diesem uses-sdk Knoten, das ist alles, was Sie wirklich brauchen, um hinzuzufügen.

So Ihre Datei AndroidManifest.xml somehing sollte wie folgt aussehen:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="net.eringle.android.ldemo">

    <uses-sdk
        tools:node="replace" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Nun sollten Sie in der Lage, Ihre Anwendung auf jedem Gerät von Ihrem minSdkVersion unterstützt laufen, während die Vorteile der reinen neuen Ansichten und Versorgungsunternehmen in der Unterstützung lib !

Als nächstes habe ich die Android -Plattform L leicht modifiziert, um die Tatsache, dass es tatsächlich eine Vorschau -Plattform von den Build-Tools zu verstecken. Sie können es von einer der beiden Spiegel herunterladen :  https://docs.google.com/file/d/0B3kP5OEGFYUBZWxacV9jVjVKOGs, https://mega.co.nz/#!hlp1XTAC!seD3n0x9dkTyR29c7HxNE6XkHXtmpjfcbYrfntVOXmY .

Entpacken Sie das Archiv in das Verzeichnis, in dem Plattformen haben Sie Ihr Android- SDK installiert . Sie werden bemerken, ich habe es android-21 genannt und stellen Sie die API-Ebene auf 21 als gut. Statt Referenzieren L oder android-L in Ihrem build.gradle, einfach 21 :

android {
    compileSdkVersion 21
    buildToolsVersion '20.0.0'
    defaultConfig {
        applicationId 'net.eringle.android.ldemo'
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName '1.0'
    }
    ...
}

Nun, wenn Sie zu bauen und zu versuchen, die Anwendung auszuführen, sollten Sie in der Lage, es auf ältere Plattformen Geräte ohne Probleme zu versenden. Viel Spaß beim Spielen mit L unter Beibehaltung der Abwärtskompatibilität !

Offensichtlich sind die Workarounds oben vorgesehen sind Hacks am besten. Bitte Star https://code.google.com/p/android/issues/detail?id=72453&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars, Wie es scheint, die am nächsten an der Kern des Problems sein (wenn das Android-Team hält es sogar ein Problem überhaupt ) .

Alle Credits gehen http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/