2012-02-01 21 views
76

Soy nuevo en el desarrollo de Android y quiero que primero se ejecute la aplicación Hello World. Estoy usando Eclipse IDE y el Android 4.0.3 versión 15 SDK. He copiado todo, desde un sitio tutorial, pero cuando trato de ejecutar la aplicación en el virtual device consigo este error:Error de instalación: INSTALL_FAILED_OLDER_SDK

[2012-02-01 11:31:23 - Android_test] Installation error: INSTALL_FAILED_OLDER_SDK 
[2012-02-01 11:31:23 - Android_test] Please check logcat output for more details. 
[2012-02-01 11:31:23 - Android_test] Launch canceled! 

Aquí es mi clase en el paquete de com.maze.app: paquete com.maze.app;

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class HelloAndroid extends Activity{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     TextView tv = new TextView(this); 
     tv.setText("Hello, Android"); 
     setContentView(tv); 

    } 

} 

y la AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.maze.app" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="@string/app_name"/> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity android:name="HelloAndroid" android:launchMode="standard" android:enabled="true"></activity> 
</application> 

Aquí es la configuración de la Virtual Device:

Name: AndroidVD 
CPU/ABI: ARM(armeabi-v7a) 
Path: path\to\avd 
Target: Android 4.0.3(API level 15) 
Skin: WVGA800 
hw.lcd.density: 240 
hw.cpu.model: cortex-a8 
vm.heapSize: 48 
hw.ramSize:512 

¿Cuál es el problema?

EDIT: La aplicación no se ejecuta en el dispositivo virtual: Aquí es lo que me pasa en LogCat (algunas de las líneas):

D/PackageManager(92): New package installed in /data/app/com.maze.app-2.apk 
D/dalvikvm(92): GC_CONCURRENT freed 660K, 9% free 11935K/12999K, paused 18ms+72ms 
I/ActivityManager(92): Force stopping package com.maze.app uid=10040 
D/BackupManagerService(92): Received broadcast Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:com.maze.app flg=0x10000010 (has extras) } 
V/BackupManagerService(92): updatePackageParticipantsLocked: com.maze.app 
+0

en su archivo manifiest, 'android: targetSdkVersion =" @ string/app_name "' se menciona. ¿es un error tipográfico? – Karthik

+0

@Karthik No, no es un error tipográfico. Eso es lo que generó el asistente. – Dragos

+0

Esto también puede ser útil para alguien [esto funcionó para mí] (http://stackoverflow.com/a/24438395/754485) – b729sefc

Respuesta

100

Se debe a android:targetSdkVersion="@string/app_name" en su archivo manifiest.
Cambiar a:

<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="15"/> 

El targetSdkVersion debe ser un número entero, pero @string/app_name sería una cadena. Creo que esto está causando el error.

EDIT:
Hay que añadir un defecto en el archivo de intent-filtermanifiest para la actividad. Entonces solo Android puede iniciar la actividad. de lo contrario, aparecerá el siguiente error en la ventana de la consola.

[2012-02-02 09:17:39 - Test] No Launcher activity found! 
[2012-02-02 09:17:39 - Test] The launch will only sync the application package on the device! 

Agregue lo siguiente a su etiqueta <activity>.

<activity android:name="HelloAndroid" android:launchMode="standard" android:enabled="true"> 
    <intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
+0

¡Gracias! Ahora ya no consigo el error. Pero el dispositivo virtual se inicia y no me muestra 'Hello Android'. ¿Debo comenzar de alguna manera? Si es así, ¿cómo? Si no, ¿por qué no está funcionando? – Dragos

+0

si se ejecuta desde eclipse, la aplicación se iniciará automáticamente después de la instalación. Entonces la actividad debería aparecer en la pantalla AVD. Cuando el AVD se inicie, estará en estado Bloqueado (bloqueo de pantalla); una vez que desbloquee la pantalla, podrá ver el texto 'Hello Android'. – Karthik

+0

Sí, comienza en estado de bloqueo, pero cuando lo desbloqueo, simplemente me muestra el fondo de pantalla y algunos iconos en la parte inferior. No hay 'Hello Android'. – Dragos

21

Esto significa que la versión de Android de la AVD es más viejo que la versión que se utiliza para compilar el código

+3

Sí, eso suena bien, pero ¿cómo lo arreglo? – Dragos

+0

Crea AVD (dispositivos virtuales Android) con un cierto conjunto de características (tamaño de pantalla, versión de código, estado de cámara). Cree uno que sea igual a su versión de API objetivo. También construya uno más antiguo para pruebas de compatibilidad. – Bryce

0

Estoy en Android Studio. Obtuve este error cuando min/targetSDKVersion se establecieron en 17. Mientras miraba este hilo, traté de cambiar el minSDKVersion, voila..problem corregido. Vaya usted a saber .. :(

android:minSdkVersion="17" 
    android:targetSdkVersion="17" /> 
1

En mi caso he editado un proyecto que tiene esto en el archivo AndroidManifest.xml, y que me fue ginving el error anterior, en tiempo de ejecución:

<uses-sdk 
    android:minSdkVersion="17" 
    android:targetSdkVersion="17" /> 

Lo que . así lo hizo, era cambiar minSdkVersion = "17", a minSdkVersion = "16" Mi etiqueta resultante fue:

<uses-sdk 
    android:minSdkVersion="16" 
    android:targetSdkVersion="17" /> 

ahora no estoy recibiendo el error más ..

Esperanza esto ayuda

14

Este error se produce cuando el SDK versión instalada en el dispositivo (dispositivo real o virtual) es menor que android:minSdkVersion en su manifiesto de Android.

O bien tiene que disminuir su android:minSdkVersion o tiene que especificar una versión api más alta para su AVD.

Tenga en cuenta, que no siempre es trivial para disminuir android:minSdkVersion como usted tiene que asegurarse de que, su aplicación se preocupa por la API instalada actual y utiliza los métodos correctos:

AsyncTask<String, Object, String> task = new AsyncTask<String, Object, String>() { 
    @Override 
    protected Boolean doInBackground(String... params) { 
     if (params == null) return ""; 
     StringBuilder b = new StringBuilder(); 
     for (String p : params) { 
      b.append(p); 
     } 
     return b.toString(); 
    } 
}; 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,"Hello", " ", "world!"); 
} else { 
    task.execute("Hello", " ", "world!"); 
} 

Uso de Android-apoyo -library y/o bibliotecas como actionbar-sherlock le ayudarán a lidiar especialmente con widgets de versiones anteriores.

1

Recibido el mismo error, el problema era la diferencia en la versión de Android SDK que AVD estaba usando y la versión en el archivo AndroidManifest. Podría resolverlo mediante la corrección del androide

: minSdkVersion = "16"

para que coincida con AVD.

13

Estoy usando Android Studio 0.8.1. Tengo un archivo gradle de proyecto como a continuación:

android { 
    compileSdkVersion 19 
    buildToolsVersion "20.0.0" 

    defaultConfig { 
     applicationId "com.omersonmez.widgets.hotspot" 
     minSdkVersion 15 
     targetSdkVersion 19 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      runProguard false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

Mi emulador era Android 4.0. Así que modifiqué mi emulador e hice api level 4.0.3 (apilevel 15). Funcionó.

0

Asegúrese de comprobar su build.gradle y de que no utiliza una versión de SDK más nueva que la que está instalada en su AVD. Eso solo es así si usa Android Studio.

0

verá el mismo error si está intentando instalar un APK que fue construida usando

compileSdkVersion "android-L" 

Incluso para los dispositivos que ejecutan la versión final de Android 5.0. Simplemente cambiar esto a

compileSdkVersion 21 
3

Probé todas las respuestas describen aquí, pero mi solución estaba cambiando dentro de mi archivo minSdkVersionbuild.gradle de 8 a 9 debido a que algunas bibliotecas en mi proyecto no puede trabajar con la API 8, eso es fue la razón del mensaje INSTALL_FAILED_OLDER_SDK:

apply plugin: 'com.android.application' 

    android { 
     compileSdkVersion 22 
     buildToolsVersion "22.0.1" 

     defaultConfig { 
      applicationId "com.tuna.hello.androidstudioapplication" 
      minSdkVersion 9 
      targetSdkVersion 22 
      versionCode 1 
      versionName "1.0" 
     } 
... 
... 
... 
0

Mi solución era cambiar la module lista desplegable configuraciones de ejecución wearable-android. (Este error me sucedió cuando intenté correr I de Google/S Sched de código abierto ap p.) Aparecería automáticamente las configuraciones cada vez que intenté ejecutar hasta que cambie el module al android.

Puede acceder a las configuraciones por ir a Run ->Edit Configurations... - pestaña>General ->Module: [drop-down-list-here]

1

Arreglo para el nuevo Android 6.0 Marshmallow fijo mi problema cuando he actualizado a la API 23 (Android 6.0 malvavisco) mediante la actualización de la versión 23.0.0 a herramientas de construcción de la siguiente manera:

android { 
    buildToolsVersion '23.0.0' 
... 

Y fue a archivo> Estructura del proyecto, eligió Propiedades pestaña continuación, actualiza la versión de compilación SDK a "API 23: Android 5.X (MNC)" y la versión herramientas de construcción a "23.0.0"

0

me encontré con que hacer el cambio recomendado en el manifiesto no resolvió mi problema.

La corrección se encontró en la carpeta GradleScripts, en el archivo build.gradle para la aplicación Module :.

Dentro de este archivo (build.gradle) se modificó la siguiente línea. minSdkVersion 22 Cambié este valor '22' a '19' para mi teléfono en particular y la compilación se completó sin error.

0

Amigo, mi consejo es cambiar el dispositivo virtual. Descargar aplicación "Genimotion", es fácil de usar y hay un montón de cualquier dispositivo que necesita

-2

he cambiado de android:minSdkVersion y android:targetSdkVersion a 18 de 21:

uses-sdk android:minSdkVersion="18" android:targetSdkVersion="18" 

Ahora puedo instalar mi aplicación exitosamente.

0

iónico Android emulador de error INSTALL_FAILED_OLDER_SDK

Así que, básicamente, significa que la instalación ha fallado debido a tener una versión del SDK más antigua que la targetSdkVersion especificado en su aplicación (que es un problema Gradle). Simplemente edite el AndroidManifest.archivo XML y agregue el siguiente código:

<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="14"/>

Después de días en busca de la solución, eso es todo.

¡Funciona bien para mí!

Cuestiones relacionadas