Errore di installazione: INSTALL_FAILED_OLDER_SDK


88

Sono nuovo nello sviluppo di Android e desidero prima eseguire l' Hello Worldapplicazione. Sto usando Eclipse IDE e Android 4.0.3 versione 15 SDK. Ho copiato tutto da un sito di tutorial, ma quando provo a eseguire l'applicazione su virtual deviceottengo questo errore:

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

Ecco la mia classe nel com.maze.apppacchetto: 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);

    }

}

e il 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>

Ecco la configurazione di 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

Qual è il problema?

EDIT: l'applicazione non è in esecuzione sul dispositivo virtuale: ecco cosa ottengo su LogCat (alcune delle linee):

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

nel tuo file più maniacale, android:targetSdkVersion="@string/app_name"è menzionato. è un errore di battitura?
Karthik

@ Karthik No, non è un errore di battitura. Questo è ciò che ha generato la procedura guidata.
Dragos

Questo potrebbe anche essere utile per qualcuno che ha funzionato per me
Joshua G

Risposte:


113

È dovuto a android:targetSdkVersion="@string/app_name"nel tuo file più maniacale.
Modificalo in:

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

Il targetSdkVersiondovrebbe essere un intero, ma @string/app_namesarebbe una stringa. Penso che questo causi l'errore.

EDIT:
devi aggiungere un valore predefinito intent-filternel tuo manifiestfile per l'attività. Quindi solo Android può avviare l'attività. altrimenti otterrai il seguente errore nella finestra della tua 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!

Aggiungi quanto segue al tuo <activity>tag.

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

Grazie! Ora non ricevo più l'errore. Ma il dispositivo virtuale si avvia e non me lo mostra Hello Android. Devo avviarlo in qualche modo? Se sì, come? In caso contrario, perché non funziona?
Dragos

se esegui da eclipse, l'app verrà avviata automaticamente dopo l'installazione. Quindi l'attività dovrebbe apparire sullo schermo AVD. Quando l'AVD si avvia, sarebbe in stato bloccato (blocco dello schermo), una volta sbloccato lo schermo è possibile vedere il Hello Androidtesto.
Karthik

Sì, si avvia nello stato di blocco, ma quando lo sblocco, mi mostra solo lo sfondo e alcune icone in basso. Non c'è Hello Android.
Dragos

eventuali errori sul Logcat? puoi aggiungere alcune istruzioni Log in onCreate () e vedere se vengono mostrate nella finestra Logcat.
Karthik

Se Logcatintendi ConsoleEclipse, la risposta è no. Non ricevo errori. Se non è quello che intendevi con Logcat, dimmi dove posso trovarlo.
Dragos

26

Ciò significa che la versione di Android del tuo avd è precedente alla versione utilizzata per compilare il codice


Crei AVD (dispositivi virtuali Android) con un certo insieme di funzionalità (dimensioni dello schermo, versione del codice, stato della fotocamera). Creane uno uguale alla versione dell'API di destinazione. Crea anche uno più vecchio per i test di compatibilità.
Bryce

15

Questo errore si verifica quando la versione sdk installata sul dispositivo (dispositivo reale o virtuale) è più piccola rispetto android:minSdkVersional manifest di Android.

O devi diminuire il tuo android:minSdkVersiono devi specificare una versione API più alta per il tuo AVD.

Tieni presente che non è sempre banale diminuire android:minSdkVersionpoiché devi assicurarti che la tua app si preoccupi dell'API effettivamente installata e utilizzi i metodi corretti:

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'uso della libreria di supporto Android e / o di librerie come actionbar-sherlock ti aiuterà a gestire soprattutto i widget delle versioni precedenti.


13

Sto usando Android Studio 0.8.1. Ho il file gradle di un progetto come di seguito:

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

Il mio emulatore era Android 4.0. Quindi ho modificato il mio emulatore e ho creato il livello API 4.0.3 (apilevel 15). Ha funzionato.


3

Ho provato tutte le risposte descritte qui ma la mia soluzione stava cambiando all'interno del mio build.gradlefile minSdkVersionda 8 a 9 perché alcune librerie nel mio progetto non possono funzionare con l'API 8, ecco il motivo del messaggio 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"
        }
...
...
...

Questo suona come se si traducesse in un SDK minimo di alcune librerie incluse che è 9.
firma del metodo

1

Nel mio caso ho modificato un progetto con questo nel file AndroidManifest.xml e che mi ha generato l'errore precedente, in fase di esecuzione:

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

Quello che ho fatto è stato cambiare minSdkVersion = "17" in minSdkVersion = "16". Il tag risultante era:

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

Ora non ricevo più l'errore ..

Spero che sia di aiuto


1

Ricevuto lo stesso errore, il problema era la differenza nella versione di Android SDK che AVD stava utilizzando e la versione nel file AndroidManifest. Potrei risolverlo correggendo il file

android: minSdkVersion = "16"

per abbinare con AVD.


1

Vedrai lo stesso errore se stai tentando di installare un apk che è stato creato utilizzando

compileSdkVersion "android-L"

Anche per i dispositivi che eseguono la versione finale di Android 5.0. Basta cambiarlo in

compileSdkVersion 21

1

Correzione per il nuovo Android 6.0 Marshmallow Risolto il problema quando aggiornavo all'API 23 (Android 6.0 Marshmallow) aggiornando la versione degli strumenti di build alla 23.0.0 come segue:

android {
    buildToolsVersion '23.0.0'
...

Andato su File> Struttura del progetto , ha scelto la scheda Proprietà, quindi ha aggiornato la versione Compile Sdk a "API 23: Android 5.X (MNC)" e la versione degli strumenti di compilazione a "23.0.0"


0

Sono su Android Studio. Ho ricevuto questo errore quando min / targetSDKVersion erano impostati su 17. Mentre guardavo attraverso questo thread, ho provato a cambiare il minSDKVersion, voilà..problem fixed. Vai a capire.. :(

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

0

Assicurati di controllare il tuo build.gradle e che non utilizzi una versione dell'SDK più recente di quella installata sul tuo AVD. Questo è solo se usi Android Studio però.



0

La mia soluzione era cambiare l' moduleelenco a discesa delle configurazioni di esecuzione da wearablea android. (Questo errore mi è accaduto quando ho provato a eseguire l'app open source I / O Sched di Google.) Si apriva automaticamente le configurazioni ogni volta che ho provato a eseguire fino a cambiato il modulea android.

È possibile accedere alle configurazioni andando su Run-> Edit Configurations...-> Generalscheda ->Module: [drop-down-list-here]


0

Ho scoperto che apportare la modifica consigliata nel manifest non ha risolto il mio problema.

La correzione è stata trovata nella cartella GradleScripts, nel file build.gradle per Module: app.

All'interno di questo file (build.gradle) è stata modificata la riga seguente. minSdkVersion 22 Ho cambiato questo valore "22" in "19" per il mio telefono specifico e la build è stata completata senza errori.


0

Amico, il mio consiglio è di cambiare dispositivo virtuale. Scarica l'applicazione "Genimotion", è facile da usare e ci sono molti dispositivi di cui hai bisogno


0

Vai nel build.cradlefile del tuo progetto e aggiungi

defaultConfig {
    minSdkVersion versions.minSdk

} "

In questo modo l'applicazione è conforme all'SDK minimo in esecuzione sul dispositivo.


-1

Errore dell'emulatore Android ionico INSTALL_FAILED_OLDER_SDK

Quindi, in pratica significa che l'installazione non è riuscita a causa di una versione SDK precedente rispetto a targetSdkVersion specificata nella tua app (è un problema di Gradle). Basta modificare il file AndroidManifest.xml e aggiungere il codice seguente:

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

Dopo giorni alla ricerca della soluzione, il gioco è fatto.

Funziona bene per me!


-1

Se viene visualizzato l'errore "Errore di installazione: INSTALL_FAILED_OLDER_SDK", è necessario modificare la versione di minSdkVersion in AndroidManifest con quella specificata nell'emulatore Android: vedere Impostazioni -> Informazioni sul telefono -> Versione Android.


1
Ciao @ cupoma58, benvenuto. In che modo è diverso che l'altro risponde?
Tiago Martins Peres 李大仁

-2

Ho cambiato la mia android:minSdkVersione android:targetSdkVersionper 18da 21:

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

Ora posso installare correttamente la mia app.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.