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.+
- Cómo cambiar los iconos de los iconos del menú de navegación y desbordamiento de la barra de herramientas (appcompat v7)?
- ¿Cómo implementar WhatsApp como el diseño de materiales SearchView?
- Espacio en blanco debajo de CoordinatorLayout en DrawerLayout
- ¿Cómo evitar que Snackbar se cierre?
- Botón de inicio de Android en la barra de herramientas de contracción con imagen
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
- Diseño de material Android: eliminar animación de sugerencias
- Android Material Design en los dispositivos KitKat (e inferior)
- Cómo crear una barra de herramientas de la tarjeta usando appcompat v7
- ¿Por qué mi vista de barra de acciones personalizadas no coincide con "parent" cuando se utiliza appcompat y Toolbar?
- Cómo crear un submenú para el botón de acción flotante en Android Material Design?
- Fragmento de diálogo de pantalla completa de Android como aplicación de calendario
- Cómo insertar ListView en CardView con barra de desplazamiento fuera de CardView?
- Android Material recolorado Subtexto de EditText
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
- MediaPlayer error (1, -1004) también conocido como MEDIA_ERROR_IO intentando transmitir música en Samsung S3
- Consulta en ParseObject