Cómo iniciar la aplicación con Theme.Material en dispositivos antiguos

¿Cómo puedo ejecutar mi aplicación en dispositivos pre-v21 ?

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

Sólo estoy usando el Theme.Material en v21 . No estoy usando la biblioteca de soporte v20 , estoy usando com.android.support:support-v4:19.+

Al ejecutar la aplicación de Android Studio se dice que el dispositivo no es compatible:

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

¿De dónde está tomando el minSdk 20 ?

EDITAR:

La razón por la que esto sucede podría ser (si se verifica) que

Si compila un SDK de vista previa (android-L), las herramientas de construcción bloquearán minSdkVersion y targetSdkVersion a ese mismo nivel de API. Esto hace que la aplicación producida no pueda instalarse en dispositivos que ejecutan versiones anteriores de Android, incluso si su aplicación no está haciendo nada específico para L.

Fuente: Reddit

Si compila un SDK de vista previa (android-L), las herramientas de construcción bloquearán minSdkVersion y targetSdkVersion a ese mismo nivel de API. Esto hace que la aplicación producida no pueda instalarse en dispositivos que ejecutan versiones anteriores de Android, incluso si su aplicación no está haciendo nada específico para L.

La versión 0.11 del complemento Android Gradle activó una nueva fusión de manifiesto por defecto y nos permite hacer algunas cosas ingeniosas . Así que tienes que agregar tu archivo AndroidManifest.xml un nodo uses-sdk que simplemente especifica un atributo tools:node .
Esta configuración específica le dice al procesador de manifiesto que reemplace cualquier atributo de uses-sdk nodos uses-sdk en los manifiestos de menor prioridad (como los manifiestos de la biblioteca) con los atributos en el nodo uses-sdk con las tools:node="replace" . Puesto que Gradle también inserta minSdkVersion y targetSdkVersion desde tu build.gradle en este nodo uses-sdk , eso es todo lo que realmente necesitas agregar.

Por lo tanto, su archivo AndroidManifest.xml debería parecer algo así:

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

Ahora deberías poder ejecutar tu aplicación en cualquier dispositivo compatible con su minSdkVersion, mientras aprovechas las nuevas vistas y utilidades en la lib de soporte!


A continuación, he modificado ligeramente la plataforma Android L para ocultar el hecho de que en realidad es una plataforma de vista previa de las herramientas de compilación. Puede descargarlo de cualquiera de estos dos espejos: espejo # 1 , espejo # 2 .

Extraiga el archivo en el directorio de plataformas donde tiene instalado su SDK de Android. Te darás cuenta de que he llamado android-21 y establecer el nivel de la API a 21 también. En lugar de hacer referencia a L o android-L en su build.gradle , simplemente use 21 :

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

Ahora, cuando cree e intente ejecutar la aplicación, debería poder enviarla a dispositivos de la plataforma más antigua sin ningún problema. Diviértete jugando con L mientras conservas la compatibilidad hacia atrás.


Obviamente, las soluciones proporcionadas anteriormente son hacks en el mejor de los casos. Por favor protagonice este problema , ya que parece ser el más cercano al corazón del problema (si el equipo de Android incluso lo considera un problema en absoluto).

Todos los créditos van a EddieRingle

  • Crear circular revelar para los dispositivos pre-Lollipop (Android)
  • ¿Por qué GoogleMaterial.Icon no tiene el icono de cierre de sesión en la biblioteca de Android?
  • Colorear botones en Android con Material Design y AppCompat
  • ¿Cómo llenar una vista con otra con Material Design Animation?
  • LinearLayout superpuesto Coordinador de ApoyoLayout
  • Diseño de material: cómo establecer transparencia para el botón de acción flotante de Android
  • Android Design Navigation Drawer - ¿Cómo agregar un conmutador en el navegador xml?
  • Cómo establecer el comportamiento de comprobación compartida en todos los grupos en NavigationView?
  • ¿Cómo mover el icono de búsqueda de SearchView a la derecha?
  • TranslateAnimación en un ImageView no funciona
  • Animación de la actividad de capa deslizante android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.