Ошибка установки: INSTALL_FAILED_OLDER_SDK


88

Я новичок в разработке Android и хочу сначала запустить Hello Worldприложение. Я использую Eclipse IDE и Android 4.0.3 версии 15 SDK. Я скопировал все с учебного сайта, но когда я пытаюсь запустить приложение на нем, virtual deviceя получаю эту ошибку:

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

Вот мой класс в com.maze.appпакете: 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);

    }

}

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

Вот конфигурация 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

В чем проблема?

РЕДАКТИРОВАТЬ: приложение не запущено на виртуальном устройстве: вот что я получаю на LogCat (некоторые строки):

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

в вашем манифестном файле android:targetSdkVersion="@string/app_name"упоминается. это опечатка?
Karthik

@Karthik Нет, это не опечатка. Это то, что сгенерировал мастер.
Dragos

Это также может быть полезно для кого-то, что сработало для меня
Джошуа Г.

Ответы:


113

Это связано с android:targetSdkVersion="@string/app_name"вашим самым манифестным файлом.
Измените его на:

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

targetSdkVersionДолжно быть целым числом, но @string/app_nameбудет строка. Я думаю, это вызывает ошибку.

РЕДАКТИРОВАТЬ:
вы должны добавить значение intent-filterпо умолчанию в свой manifiestфайл для действия. Тогда только андроид сможет запустить активность. в противном случае вы получите ошибку, указанную ниже, в окне консоли.

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

Добавьте в свой <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>

Спасибо! Теперь я больше не получаю ошибку. Но виртуальное устройство запускается и не показывает мне Hello Android. Надо ли как-то его запускать? Если да, то как? Если нет, то почему не работает?
Dragos

если вы запустите eclipse, приложение будет автоматически запущено после установки. Таким образом, действие должно отображаться на экране AVD. Когда AVD запускается, он будет в заблокированном состоянии (блокировка экрана), после того как вы разблокируете экран, вы увидите Hello Androidтекст.
Karthik

Да, он запускается в состоянии блокировки, но когда я его разблокирую, он просто показывает мне обои и несколько значков внизу. Нет Hello Android.
Dragos

какие-либо ошибки в Logcat? вы можете добавить несколько операторов журнала в onCreate () и посмотреть, отображаются ли они в окне Logcat.
Karthik

Если Logcatвы имеете в виду ConsoleEclipse, то ответ отрицательный. Я не получаю ошибок. Если под Logcat вы имели в виду не это, скажите, пожалуйста, где я могу его найти.
Dragos

26

Это означает, что версия android вашего avd старше, чем версия, используемая для компиляции кода.


Вы создаете AVD (виртуальные устройства Android) с учетом определенного набора функций (размер экрана, версия кода, статус камеры). Создайте такую ​​же, как ваша целевая версия API. Также создайте более старую версию для тестирования совместимости.
Bryce

15

Эта ошибка возникает, когда sdk-версия, установленная на вашем устройстве (реальном или виртуальном), меньше, чем android:minSdkVersionв вашем манифесте Android.

Вам нужно либо уменьшить, android:minSdkVersionлибо указать более высокую версию api для вашего AVD.

Имейте в виду, что уменьшение не всегда тривиально, так android:minSdkVersionкак вы должны убедиться, что ваше приложение заботится о фактическом установленном API и использует правильные методы:

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

Использование android-support-library и / или библиотек, таких как actionbar-sherlock , поможет вам работать, особенно с виджетами более старых версий.


13

Я использую Android Studio 0.8.1. У меня есть файл Gradle проекта, как показано ниже:

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

Мой эмулятор был Android 4.0. Поэтому я изменил свой эмулятор и сделал уровень API 4.0.3 (apilevel 15). Это сработало.


3

Я попробовал все ответы, описанные здесь, но мое решение изменилось в моем build.gradleфайле minSdkVersionс 8 на 9, потому что некоторые библиотеки в моем проекте не могут работать с API 8, это было причиной сообщения 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"
        }
...
...
...

Похоже, это означает, что минимальный SDK для некоторых включенных библиотек равен 9.
methodignature

1

В моем случае я редактировал проект, имеющий это в файле AndroidManifest.xml, и который во время выполнения выдавал мне указанную выше ошибку:

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

Я только что изменил minSdkVersion = "17" на minSdkVersion = "16". Мой результирующий тег был:

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

Теперь ошибка больше не появляется ..

Надеюсь это поможет


1

Получена та же ошибка, проблема заключается в разнице в версии Android SDK, которую использует AVD, и в версии в файле AndroidManifest. Я мог бы решить эту проблему, исправив

android: minSdkVersion = "16"

чтобы соответствовать AVD.


1

Вы увидите ту же ошибку, если попытаетесь установить apk, созданный с использованием

compileSdkVersion "android-L"

Даже для устройств под управлением последней версии Android 5.0. Просто измените это на

compileSdkVersion 21

1

Исправление для нового Android 6.0 Marshmallow. Исправлена ​​моя проблема, когда я обновился до API 23 (Android 6.0 Marshmallow), обновив версию инструментов сборки до 23.0.0 следующим образом:

android {
    buildToolsVersion '23.0.0'
...

И перешел в File> Project Structure , выбрал вкладку Properties, затем обновил версию Compile Sdk до «API 23: Android 5.X (MNC)» и версию инструментов сборки до «23.0.0».


0

Я использую Android Studio. Я получил эту ошибку, когда min / targetSDKVersion было установлено на 17. При просмотре этой темы я попытался изменить minSDKVersion, вуаля .. проблема исправлена. Иди разбери .. :(

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

0

Обязательно проверьте свой build.gradle и убедитесь, что он не использует более новую версию SDK, чем та, которая установлена ​​на вашем AVD. Это только если вы используете Android Studio.



0

Мое решение состояло в том, чтобы изменить moduleраскрывающийся список конфигураций запуска с wearableна android. (эта ошибка произошла со мной, когда я пытался запустить приложение с открытым исходным кодом Google I / O Sched). Конфигурации автоматически всплывали каждый раз, когда я пытался запустить, пока я изменил moduleк android.

Вы можете получить доступ к настройкам, перейдя Run-> Edit Configurations...-> Generalвкладка ->Module: [drop-down-list-here]


0

Я обнаружил, что внесение рекомендованного изменения в манифест не решило мою проблему.

Исправление было найдено в папке GradleScripts в файле build.gradle для приложения Module :.

Внутри этого файла (build.gradle) была изменена следующая строка. minSdkVersion 22 Я изменил это значение «22» на «19» для моего конкретного телефона, и сборка завершилась без ошибок.


0

Мате, мой совет - сменить виртуальное устройство. Скачайте приложение "Genimotion", оно простое в использовании и есть много любых устройств, которые вам нужны


0

Зайдите в build.cradleфайл вашего проекта и добавьте

defaultConfig {
    minSdkVersion versions.minSdk

} `

Это означает, что ваше приложение соответствует минимальному пакету SDK, на котором работает ваше устройство.


-1

Ошибка эмулятора Ionic Android INSTALL_FAILED_OLDER_SDK

Таким образом, в основном это означает, что установка не удалась из-за наличия более старой версии SDK, чем targetSdkVersion, указанной в вашем приложении (это проблема Gradle). Просто отредактируйте файл AndroidManifest.xml и добавьте следующий код:

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

После нескольких дней поиска решения, вот и все.

У меня отлично работает!


-1

Если появляется ошибка «Ошибка установки: INSTALL_FAILED_OLDER_SDK», необходимо изменить версию minSdkVersion в AndroidManifest на ту, которая указана в эмуляторе Android: см. Настройки -> О телефоне -> Версия Android.


1
Привет, @ cupoma58, добро пожаловать. Чем это отличается от других ответов?
Тьяго Мартинс Перес 李大仁

-2

Я изменил свой android:minSdkVersionи android:targetSdkVersionна 18с 21:

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

Теперь я могу успешно установить свое приложение.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.