Błąd instalacji: INSTALL_FAILED_OLDER_SDK

88

Jestem nowy w programowaniu na Androida i chcę najpierw Hello Worlduruchomić aplikację. Używam Eclipse IDE i zestawu SDK dla systemu Android 4.0.3 w wersji 15. Skopiowałem wszystko z witryny z samouczkami, ale kiedy próbuję uruchomić aplikację na stronie, pojawia virtual devicesię ten błąd:

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

Oto moja klasa w com.maze.apppakiecie: 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);

    }

}

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

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

Jaki jest problem?

EDYCJA: Aplikacja nie działa na urządzeniu wirtualnym: Oto, co otrzymuję w LogCat (niektóre linie):

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
źródło
w pliku manifestu android:targetSdkVersion="@string/app_name"jest wspomniany. czy to literówka?
Karthik
@Karthik Nie, to nie jest literówka. To właśnie wygenerował kreator.
Dragos
Może to być również przydatne dla kogoś, kto pracował dla mnie
Joshua G

Odpowiedzi:

113

Wynika to z android:targetSdkVersion="@string/app_name"twojego pliku manifestu.
Zmień to na:

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

targetSdkVersionPowinna być liczbą całkowitą, ale @string/app_namebędzie ciągiem. Myślę, że to powoduje błąd.

EDYCJA:
Musisz dodać domyślne intent-filterw swoim manifiestpliku dla działania. Wtedy tylko android może uruchomić aktywność. w przeciwnym razie w oknie konsoli pojawi się poniższy błąd.

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

Dodaj następujące elementy do swojego <activity>tagu.

<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
źródło
Dziękuję Ci! Teraz nie otrzymuję już błędu. Ale urządzenie wirtualne uruchamia się i mnie nie pokazuje Hello Android. Czy muszę to jakoś zacząć? Jeśli tak, w jaki sposób? Jeśli nie, dlaczego nie działa?
Dragos
jeśli uruchomisz z eclipse, aplikacja zostanie automatycznie uruchomiona po instalacji. Dlatego aktywność powinna pojawić się na ekranie AVD. Po uruchomieniu AVD będzie w stanie zablokowanym (blokada ekranu), po odblokowaniu ekranu można zobaczyć Hello Androidtekst.
Karthik
Tak, zaczyna się w stanie blokady, ale kiedy go odblokowuję, pokazuje mi tylko tapetę i kilka ikon na dole. Nie ma Hello Android.
Dragos
jakieś błędy w Logcat? możesz dodać kilka instrukcji Log w onCreate () i zobaczyć, czy są one wyświetlane w oknie Logcat.
Karthik
Jeśli Logcatmasz na myśli Consolew Eclipse, to odpowiedź brzmi: nie. Nie dostaję żadnych błędów. Jeśli nie to miałeś na myśli, mówiąc o Logcat, powiedz mi, gdzie mogę go znaleźć.
Dragos
26

Oznacza to, że wersja Androida twojego avd jest starsza niż wersja używana do kompilacji kodu

Rajdeep Dua
źródło
Tworzysz AVD (Android Virtual Devices) mając określony zestaw funkcji (rozmiar ekranu, wersja kodu, stan kamery). Utwórz taki sam, jak docelowa wersja interfejsu API. Zbuduj również starszą wersję do testów zgodności.
Bryce
15

Ten błąd występuje, gdy wersja sdk zainstalowana na urządzeniu (urządzenie rzeczywiste lub wirtualne) jest mniejsza niż android:minSdkVersionw manifeście systemu Android.

Musisz albo zmniejszyć swój, android:minSdkVersionalbo musisz określić wyższą wersję API dla swojego AVD.

Pamiętaj, że zmniejszenie nie zawsze jest trywialne, android:minSdkVersionponieważ musisz się upewnić, że Twoja aplikacja dba o faktycznie zainstalowany interfejs API i używa poprawnych metod:

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

Korzystanie z biblioteki wsparcia Androida i / lub bibliotek, takich jak actionbar-sherlock , pomoże ci radzić sobie szczególnie z widżetami starszych wersji.

AlexS
źródło
13

Używam Android Studio 0.8.1. Mam plik gradle projektu, jak poniżej:

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

Moim emulatorem był Android 4.0. Więc zmodyfikowałem mój emulator i utworzyłem poziom API 4.0.3 (apilevel 15). Zadziałało.

Omer Sonmez
źródło
3

Wypróbowałem wszystkie opisane tutaj odpowiedzi, ale moje rozwiązanie zmieniało się w moim build.gradlepliku minSdkVersionz 8 na 9, ponieważ niektóre biblioteki w moim projekcie nie mogą współpracować z API 8, to był powód tego komunikatu 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
źródło
Wygląda na to, że przekłada się na to, że min SDK niektórych dołączonych bibliotek to 9.
methodsignature,
1

W moim przypadku edytowałem projekt mający to w pliku AndroidManifest.xml i który powodował powyższy błąd, w czasie wykonywania:

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

Właśnie zmieniłem minSdkVersion = "17" na minSdkVersion = "16". Mój wynikowy tag to:

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

Teraz nie otrzymuję już błędu ...

Mam nadzieję że to pomoże

user9869932
źródło
1

Otrzymałem ten sam błąd, problemem była różnica w wersji Android SDK, z której korzystał AVD, a wersją w pliku AndroidManifest. Mogłem to rozwiązać, poprawiając plik

android: minSdkVersion = "16"

pasujące do AVD.

Hari Palappetty
źródło
1

Zobaczysz ten sam błąd, jeśli próbujesz zainstalować apk, który został zbudowany przy użyciu

compileSdkVersion "android-L"

Nawet na urządzeniach z ostateczną wersją Androida 5.0. Po prostu zmień to na

compileSdkVersion 21
friederbluemle
źródło
1

Poprawka dla nowego Androida 6.0 Marshmallow Naprawiono mój problem, kiedy zaktualizowałem do API 23 (Android 6.0 Marshmallow), aktualizując wersję narzędzi do kompilacji do 23.0.0 w następujący sposób:

android {
    buildToolsVersion '23.0.0'
...

I poszedł do Plik> Struktura projektu , wybrał zakładkę Właściwości , a następnie zaktualizował wersję Compile Sdk do „API 23: Android 5.X (MNC)” i wersję narzędzi do kompilacji do „23.0.0”

yehyatt
źródło
0

Jestem na Android Studio. Otrzymałem ten błąd, gdy min / targetSDKVersion były ustawione na 17. Patrząc przez ten wątek, próbowałem zmienić minSDKVersion, voila..problem naprawiony. Domyśl.. :(

    android:minSdkVersion="17"
    android:targetSdkVersion="17" />
Pan B.
źródło
0

Upewnij się, że sprawdziłeś plik build.gradle i że nie używa nowszej wersji SDK niż ta, która jest zainstalowana w AVD. Dzieje się tak tylko wtedy, gdy używasz Android Studio.

janex
źródło
0

Moim rozwiązaniem była zmiana listy modulerozwijanej konfiguracji uruchamiania z wearablena android. (Ten błąd przydarzył mi się, gdy próbowałem uruchomić aplikację open source Google I / O Schedule). Konfiguracje pojawiały się automatycznie za każdym razem, gdy próbowałem uruchomić, dopóki nie zmienił modulesię android.

Możesz uzyskać dostęp do konfiguracji, przechodząc do Run-> Edit Configurations...-> Generalzakładka ->Module: [drop-down-list-here]

Rock Lee
źródło
0

Okazało się, że wprowadzenie zalecanej zmiany w manifeście nie rozwiązało mojego problemu.

Poprawka została znaleziona w folderze GradleScripts, w pliku build.gradle dla aplikacji Module:.

W tym pliku (build.gradle) zmodyfikowano następujący wiersz. minSdkVersion 22 Zmieniłem tę wartość „22” na „19” dla mojego konkretnego telefonu i kompilacja zakończyła się bez błędów.

jdosser
źródło
0

Stary, radzę zmienić urządzenie wirtualne. Pobierz aplikację „Genimotion”, jest łatwa w użyciu i istnieje wiele różnych urządzeń, których potrzebujesz

Shell Scott
źródło
0

Przejdź do build.cradlepliku swojego projektu i dodaj

defaultConfig {
    minSdkVersion versions.minSdk

} `

To sprawia, że ​​Twoja aplikacja jest zgodna z minimalnym zestawem SDK, na którym działa Twoje urządzenie.

Nouru Muneza
źródło
-1

Błąd emulatora Ionic Android INSTALL_FAILED_OLDER_SDK

Zasadniczo oznacza to, że instalacja nie powiodła się z powodu posiadania starszej wersji SDK niż targetSdkVersion określona w aplikacji (jest to problem z Gradle). Po prostu edytuj plik AndroidManifest.xml i dodaj następujący kod:

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

Po dniach szukania rozwiązania, to wszystko.

U mnie działa dobrze!

Tom Costa
źródło
-1

Jeśli pojawi się błąd „Błąd instalacji: INSTALL_FAILED_OLDER_SDK”, musisz zmienić wersję minSdkVersion w AndroidManifest na tę określoną w emulatorze Androida: zobacz Ustawienia -> Informacje o telefonie -> Wersja Androida.

cupoma58
źródło
1
Cześć @ cupoma58, witaj. Czym się to różni od odpowiedzi innych?
Tiago Martins Peres 李大仁
-2

Zmieniłem moje android:minSdkVersioni android:targetSdkVersionna 18z 21:

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

Teraz mogę pomyślnie zainstalować moją aplikację.

Veena
źródło