Erreur d'installation: INSTALL_FAILED_OLDER_SDK

88

Je suis nouveau dans le développement Android et je souhaite d'abord lancer l' Hello Worldapplication. J'utilise Eclipse IDE et le SDK Android 4.0.3 version 15. J'ai tout copié à partir d'un site de tutoriel, mais lorsque j'essaie d'exécuter l'application sur le, virtual devicej'obtiens 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.apppackage: package 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 du 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 périphérique virtuel: voici ce que j'obtiens sur LogCat (certaines des 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
Dragos
la source
dans votre fichier le plus important, android:targetSdkVersion="@string/app_name"est mentionné. est-ce une faute de frappe?
Karthik
@Karthik Non, ce n'est pas une faute de frappe. C'est ce que l'assistant a généré.
Dragos
Cela peut également être utile pour quelqu'un qui a fonctionné pour moi
Joshua G

Réponses:

113

Cela est dû à android:targetSdkVersion="@string/app_name"dans votre fichier le plus important.
Changez-le en:

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

Le targetSdkVersiondevrait être un entier, mais @string/app_nameserait une chaîne. Je pense que cela cause l'erreur.

EDIT:
Vous devez ajouter une valeur intent-filterpar défaut dans votre manifiestfichier pour l'activité. Ensuite, seul Android peut lancer l'activité. sinon, vous obtiendrez l'erreur ci-dessous dans la fenêtre de votre 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 ce qui suit à votre <activity>balise.

<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>
Karthik
la source
Je vous remercie! Maintenant, je ne reçois plus l'erreur. Mais le périphérique virtuel démarre et il ne me montre pas Hello Android. Dois-je le démarrer d'une manière ou d'une autre? Si oui, comment? Sinon, pourquoi ne fonctionne-t-il pas?
Dragos
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 AVD. Lorsque l'AVD démarre, il est en état verrouillé (verrouillage de l'écran), une fois que vous déverrouillez l'écran, vous pouvez voir le Hello Androidtexte.
Karthik
Oui, il commence à l'état verrouillé, mais lorsque je le déverrouille, il me montre simplement le fond d'écran et quelques icônes en bas. Il n'y a pas Hello Android.
Dragos
des erreurs sur le Logcat? vous pouvez ajouter des instructions Log dans onCreate () et voir si elles sont affichées dans la fenêtre Logcat.
Karthik
Si Logcatvous entendez par ConsoleEclipse, la réponse est non. Je n'obtiens aucune erreur. Si ce n'est pas ce que vous entendez par Logcat, dites-moi où je peux le trouver.
Dragos
26

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

Rajdeep Dua
la source
Vous construisez des AVD (Android Virtual Devices) avec un certain ensemble de fonctionnalités (taille de l'écran, version du code, état de la caméra). Créez-en un qui est identique à votre version d'API cible. Construisez également un ancien pour les tests de compatibilité.
Bryce
15

Cette erreur se produit lorsque la version sdk installée sur votre appareil (appareil réel ou virtuel) est plus petite que android:minSdkVersiondans votre manifeste Android.

Soit vous devez diminuer votre android:minSdkVersionsoit vous devez spécifier une version d'API supérieure pour votre AVD.

Gardez à l'esprit qu'il n'est pas toujours trivial de diminuer android:minSdkVersioncar vous devez vous assurer que votre application se soucie de l'API réellement installée et utilise les bonnes méthodes:

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

L'utilisation de la bibliothèque android-support-library et / ou des bibliothèques comme actionbar-sherlock vous aidera à gérer en particulier les widgets d'anciennes versions.

AlexS
la source
13

J'utilise Android Studio 0.8.1. J'ai le fichier gradle d'un 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 mis au niveau de l'API 4.0.3 (apilevel 15). Ça a marché.

Omer Sonmez
la source
3

J'ai essayé toutes les réponses décrites ici mais ma solution changeait dans mon build.gradlefichier minSdkVersionde 8 à 9 parce que certaines bibliothèques de mon projet ne peuvent pas fonctionner avec l'API 8, c'est la raison du message 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"
        }
...
...
...
Jorgesys
la source
Cela semble se traduire par le SDK minimum de certaines bibliothèques incluses: 9.
methodsignature
1

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

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

Ce que je viens de faire, c'est de changer minSdkVersion = "17", en minSdkVersion = "16". Ma balise résultante était:

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

Maintenant, je n'obtiens plus l'erreur.

J'espère que cela t'aides

user9869932
la source
1

Reçu la même erreur, le problème était la différence dans la version du SDK Android qu'AVD utilisait et la version dans le fichier AndroidManifest. Je pourrais le résoudre en corrigeant le

android: minSdkVersion = "16"

pour correspondre avec AVD.

Hari Palappetty
la source
1

Vous verrez la même erreur si vous essayez d'installer un apk qui a été construit en utilisant

compileSdkVersion "android-L"

Même pour les appareils exécutant la version finale d'Android 5.0. Changez simplement ceci en

compileSdkVersion 21
friederbluemle
la source
1

Correctif pour le nouvel Android 6.0 Marshmallow Correction de mon problème lors de la mise à jour vers l'API 23 (Android 6.0 Marshmallow) en mettant à jour la version des outils de construction vers 23.0.0 comme suit:

android {
    buildToolsVersion '23.0.0'
...

Et est allé dans Fichier> Structure du projet , a choisi l' onglet Propriétés, puis mis à jour la version Compile Sdk à "API 23: Android 5.X (MNC)" et la version des outils de construction à "23.0.0"

yehyatt
la source
0

Je suis sur Android Studio. J'ai eu cette erreur lorsque min / targetSDKVersion était défini sur 17. En regardant ce fil, j'ai essayé de changer le minSDKVersion, voila..problem corrigé. Allez comprendre.. :(

    android:minSdkVersion="17"
    android:targetSdkVersion="17" />
Monsieur B
la source
0

Assurez-vous de vérifier votre build.gradle et qu'il n'utilise pas une version du SDK plus récente que celle installée sur votre AVD. Ce n'est que si vous utilisez Android Studio.

Janex
la source
0

Ma solution était de changer la liste déroulante des configurations d'exécution moduledewearable à android. (Cette erreur m'est arrivée lorsque j'ai essayé d'exécuter l'application open source I / O Sched de Google.) Cela faisait apparaître automatiquement les configurations à chaque fois que j'essayais d'exécuter jusqu'à ce que je changé le moduleen android.

Vous pouvez accéder aux configurations en allant dans Run-> Edit Configurations...-> Generalonglet ->Module: [drop-down-list-here]

Rock Lee
la source
0

J'ai constaté que le changement recommandé dans le manifeste ne résolvait pas mon problème.

Le correctif a été trouvé dans le dossier GradleScripts, dans le fichier build.gradle de l'application Module:.

Dans ce fichier (build.gradle), la ligne suivante a été modifiée. minSdkVersion 22 J'ai changé cette valeur '22' en '19' pour mon téléphone particulier et la construction s'est terminée sans erreur.

jdosser
la source
0

Mate, mon conseil est de changer d'appareil virtuel. Téléchargez l'application "Genimotion", c'est facile à utiliser et il y a beaucoup d'appareils dont vous avez besoin

Shell Scott
la source
0

Allez dans le build.cradlefichier de votre projet et ajoutez

defaultConfig {
    minSdkVersion versions.minSdk

} `

Cela signifie que votre application est conforme au SDK minimum que votre appareil exécute.

Nouru Muneza
la source
-1

Erreur de l'émulateur Ionic Android INSTALL_FAILED_OLDER_SDK

Donc, cela signifie fondamentalement que l'installation a échoué en raison d'une version de SDK plus ancienne que la targetSdkVersion spécifiée dans votre application (c'est un problème Gradle). Modifiez simplement le fichier AndroidManifest.xml et ajoutez le code suivant:

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

Après des jours à chercher la solution, c'est tout.

Fonctionne bien pour moi!

Tom Costa
la source
-1

Si l'erreur "Erreur d'installation: INSTALL_FAILED_OLDER_SDK" apparaît, vous devez changer la version de minSdkVersion dans AndroidManifest par celle spécifiée dans l'émulateur Android: voir Paramètres -> À propos du téléphone -> Version Android.

Cupoma58
la source
1
Salut @ cupoma58, bienvenue. En quoi est-ce différent que les autres répondent?
Tiago Martins Peres 李大仁
-2

J'ai changé mon android:minSdkVersionet android:targetSdkVersionà 18de 21:

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

Je peux maintenant installer mon application avec succès.

Veena
la source