Como iniciar o aplicativo com Theme.Material em dispositivos mais antigos

? David Corsalini @ | Original: StackOverFlow
---

Como posso executar meu aplicativo em dispositivos pre-v21 ?

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

Eu só estou usando o Theme.Material on v21 . Eu não estou usando o v20 biblioteca de suporte, eu estou usando com.android.support:support-v4:19.+

Ao executar o aplicativo do Android Estúdio diz que o dispositivo em não compatível :

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

De onde está a tomar o minSdk 20 ?

EDIT:

A razão pela qual isso está acontecendo pode ser (se verificado) que

Se você compilar contra um SDK visualização ( android- L), as ferramentas de compilação vai   bloquear minSdkVersion e targetSdkVersion ao mesmo nível API. este   resulta na aplicação produzido sendo incapaz de ser instalado sobre   dispositivos que executam versões mais antigas do Android, mesmo se o seu aplicativo   não está fazendo nada específico para L.

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

---

Top 5 Responder

1Egor N @

Se você compilar contra um SDK visualização ( android- L), as ferramentas de compilação irá travar minSdkVersion e targetSdkVersion para o mesmo nível API. Isso resulta na aplicação produzido sendo incapaz de ser instalado em dispositivos que executam versões mais antigas do Android, mesmo se a sua aplicação não está fazendo nada específico para L.

Versão 0.11 do Android Gradle Plugin transformou em um novo Incorporação Manifest por padrão, e isso nos permite fazer algumas http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger stuff. Então você tem que adicionar o seu yo AndroidManifest.xml apresentar um nó uses- sdk que simplesmente especifica um tools:node atributo. Esta configuração específica informa ao processador manifesto para substituir os atributos de uses-sdk nós em manifestos de menor prioridade (como manifestos biblioteca) com os atributos no uses-sdk nó com o tools:node="replace" atributo. Desde Gradle também insere minSdkVersion e targetSdkVersion de seu build.gradle para este uses-sdk nó, isso é tudo que você realmente precisa adicionar .

Portanto, o seu arquivo AndroidManifest.xml deve olhar somehing como este:

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

Agora você deve ser capaz de executar o aplicativo em qualquer dispositivo compatível com o seu minSdkVersion, enquanto aproveitando os puros novos pontos de vista e utilitários no lib apoio!

Em seguida, eu tenha modificado a plataforma Android L um pouco para esconder o fato de que ele é realmente uma plataforma de visualização a partir das ferramentas de compilação . Você pode baixá-lo a partir de qualquer um destes dois espelhos :  https://docs.google.com/file/d/0B3kP5OEGFYUBZWxacV9jVjVKOGs, https://mega.co.nz/#!hlp1XTAC!seD3n0x9dkTyR29c7HxNE6XkHXtmpjfcbYrfntVOXmY .

Extraia o arquivo para o diretório de plataformas onde você tem o seu SDK Android instalado. Você vai notar que eu nomeei -o android-21 e definir o nível de API para 21 também. Em vez de fazer referência a L ou android-L em sua build.gradle, basta usar 21 :

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

Agora, quando você construir e tentar executar o aplicativo, você deve ser capaz de enviá-lo para dispositivos mais antigos de plataforma sem quaisquer problemas. Se divertir jogando com L, mantendo compatibilidade com versões anteriores !

Obviamente, as soluções fornecidas acima são hacks na melhor das hipóteses . Por favor estrelar esta https://code.google.com/p/android/issues/detail?id=72453&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars, Como parece ser o mais próximo do centro do problema ( se a equipe Android ainda considerar um problema de todos ) .

Todos os créditos vão para http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/