Come avviare l'applicazione con Theme.Material sui vecchi dispositivi

? David Corsalini @ | Original: StackOverFlow
---

Come posso eseguire il mio app su dispositivi pre-v21 ?

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

Sto utilizzando solo il Theme.Material on v21 . Non sto usando il v20 libreria di supporto, sto usando com.android.support:support-v4:19.+

Quando si esegue l'applicazione da Android Studio si dice che il dispositivo non è compatibile in :

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

Da dove sta prendendo la minSdk 20 ?

EDIT:

La ragione per questo sta accadendo potrebbe essere ( se verificata ) che

Se si compila contro un'anteprima SDK ( android - L), gli strumenti di build   bloccare minSdkVersion e targetSdkVersion a quello stesso livello di API . questo   risultati nell'applicazione prodotto non siano in grado di essere installato su   dispositivi che eseguono versioni precedenti di Android, anche se l'applicazione   non sta facendo nulla di specifico a L.

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

---

Top 5 Risposta

1Egor N @

Se si compila contro un'anteprima SDK ( android - L), gli strumenti di compilazione si blocca minSdkVersion e targetSdkVersion per lo stesso livello di API . Ciò comporta l'applicazione prodotta sia in grado di essere installato su dispositivi con vecchie versioni di Android, anche se l'applicazione non sta facendo nulla di specifico a L.

La versione 0.11 di Android Gradle Plugin acceso un nuovo Fusione manifesto di default, e ci permette di fare un po ' http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger roba . Quindi bisogna aggiungere la tua yo AndroidManifest.xml presentare un nodo usi - sdk che specifica semplicemente un attributo tools:node . Questa configurazione specifica dice al processore manifesto di sostituire eventuali attributi da uses-sdk nodi manifesta a bassa priorità (come i manifesti di libreria ) con gli attributi nella uses-sdk nodo con l'attributo tools:node="replace" . Dal Gradle inserisce anche minSdkVersion e targetSdkVersion dal tuo build.gradle in questo uses-sdk nodo, che è tutto ciò che ha realmente bisogno di aggiungere .

Così il vostro file AndroidManifest.xml dovrebbe apparire somehing come questo :

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

Ora si dovrebbe essere in grado di eseguire l'applicazione su qualsiasi dispositivo supportato dal minSdkVersion, approfittando delle ordinate nuove viste e utilità nella lib sostegno !

Successivamente, ho modificato la piattaforma Android L poco per nascondere il fatto che in realtà è una piattaforma in anteprima dalle strumenti di compilazione . Potete scaricarlo da uno di questi due specchi :  https://docs.google.com/file/d/0B3kP5OEGFYUBZWxacV9jVjVKOGs, https://mega.co.nz/#!hlp1XTAC!seD3n0x9dkTyR29c7HxNE6XkHXtmpjfcbYrfntVOXmY .

Estrarre l'archivio nella directory piattaforme dove avete il vostro Android SDK installato . Noterete che ho chiamato lo android-21 e impostare il livello di API a 21 pure. Invece di riferimento L o android-L nel vostro build.gradle, basta usare 21 :

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

Ora, quando si costruisce e si tenta di eseguire l'applicazione, si dovrebbe essere in grado di inviare ai dispositivi più vecchi piattaforme senza problemi . Buon divertimento con L mantenendo la retrocompatibilità !

Ovviamente, le soluzioni alternative di cui sopra sono hack al meglio. Si prega di stella questo https://code.google.com/p/android/issues/detail?id=72453&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars, Come sembra essere il più vicino al cuore del problema (se il team di Android ritiene anche un problema a tutti ) .

Tutti i crediti vanno a http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/