Ошибка установки: 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 , поможет вам работать, особенно с виджетами более старых версий.

AlexS
источник
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"
        }
...
...
...
Jorgesys
источник
Похоже, это означает, что минимальный 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" />

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

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

user9869932
источник
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».

Yehyatt
источник
0

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

    android:minSdkVersion="17"
    android:targetSdkVersion="17" />
Г-н Б.
источник
0

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

Janex
источник
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» для моего конкретного телефона, и сборка завершилась без ошибок.

jdosser
источник
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.

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

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

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

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

Вина
источник