95 votes

Erreur d'installation : INSTALL_FAILED_OLDER_SDK

Je suis nouveau dans le développement d'Android et je veux d'abord obtenir la Hello World L'application fonctionne. J'utilise l'IDE Eclipse et le SDK Android 4.0.3 version 15. J'ai tout copié à partir d'un site de didacticiels, mais lorsque j'essaie d'exécuter l'application sur l'ordinateur de l'utilisateur, je n'arrive pas à faire fonctionner l'application. virtual device Je reçois cette erreur :

[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!

Voici ma classe dans le com.maze.app paquet : paquet 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);

    }

}

et le 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>

Voici la configuration 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

Quel est le problème ?

EDIT : L'application ne fonctionne pas sur le dispositif virtuel : Voici ce que j'obtiens sur LogCat (quelques lignes) :

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 votes

Dans votre fichier manifiest, android:targetSdkVersion="@string/app_name" est mentionné. S'agit-il d'une faute de frappe ?

0 votes

@Karthik Non, ce n'est pas une faute de frappe. C'est ce que l'assistant a généré.

0 votes

Cela peut aussi être utile pour quelqu'un cela a fonctionné pour moi

119voto

Karthik Points 2261

Elle est due à android:targetSdkVersion="@string/app_name" dans votre fichier manifiest.
Changez-le en :

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

Le site targetSdkVersion devrait être un nombre entier, mais @string/app_name serait une chaîne. Je pense que c'est la cause de l'erreur.

EDIT :
Vous devez ajouter un intent-filter dans votre manifiest pour l'activité. Ensuite, seul Android peut lancer l'activité. Sinon, vous obtiendrez l'erreur ci-dessous dans votre fenêtre de console.

[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!

Ajoutez les éléments suivants à votre <activity> étiquette.

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

Merci ! Maintenant je n'ai plus l'erreur. Mais le dispositif virtuel démarre et il ne m'affiche pas Hello Android . Dois-je le faire démarrer d'une manière ou d'une autre ? Si oui, comment ? Si non, pourquoi ne fonctionne-t-il pas ?

0 votes

Si vous exécutez depuis eclipse, l'application sera automatiquement lancée après l'installation. L'activité devrait donc apparaître sur l'écran de l'AVD. Lorsque l'AVD démarre, il est en état verrouillé (verrouillage d'écran), une fois que vous déverrouillez l'écran, vous pouvez voir l'activité de l'AVD. Hello Android texte.

0 votes

Oui, il démarre en état de verrouillage, mais quand je le déverrouille, il me montre juste le fond d'écran et quelques icônes en bas. Il n'y a pas de Hello Android .

30voto

Rajdeep Dua Points 7911

Cela signifie que la version d'Android de votre ordinateur est plus ancienne que la version utilisée pour compiler le code.

0 votes

Vous construisez des AVD (Android Virtual Devices) avec un certain nombre de caractéristiques (taille de l'écran, version du code, état de la caméra). Construisez-en un qui correspond à la version de votre API cible. Construisez également un dispositif plus ancien pour tester la compatibilité.

17voto

AlexS Points 2072

Cette erreur se produit lorsque la version de sdk installée sur votre périphérique (périphérique réel ou virtuel) est inférieure à android:minSdkVersion dans votre manifeste Android.

Vous devez soit diminuer votre android:minSdkVersion ou vous devez spécifier une version d'api plus élevée pour votre AVD.

Gardez à l'esprit qu'il n'est pas toujours facile de réduire le nombre d'emplois. android:minSdkVersion car vous devez vous assurer que votre application se soucie de l'API réellement installée et utilise les méthodes correctes :

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!");
}

En utilisant la bibliothèque Android-support-library et/ou des bibliothèques telles que barre d'action-sherlock vous aidera à traiter en particulier les widgets des anciennes versions.

15voto

Omer Sonmez Points 128

J'utilise Android Studio 0.8.1. J'ai un fichier gradle du projet comme ci-dessous :

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'
        }
    }
}

Mon émulateur était Android 4.0. J'ai donc modifié mon émulateur et fait un api level 4.0.3 (apilevel 15). Cela a fonctionné.

1voto

julianromera Points 401

Dans mon cas, j'ai édité un projet ayant ceci dans le fichier AndroidManifest.xml, et qui me donnait l'erreur ci-dessus, au moment de l'exécution :

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

Ce que j'ai fait, c'est de remplacer minSdkVersion="17" par minSdkVersion="16". La balise que j'ai obtenue est la suivante :

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

Maintenant, je n'ai plus l'erreur

J'espère que cela vous aidera

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X