Ошибка установки: 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.