Помилка встановлення: 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пакунку: пакет 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

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

EDIT: Додаток не працює на віртуальному пристрої: ось що я отримую на 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 Ні, це не друкарська помилка. Це те, що створив майстер.
Драгос

Це також може бути використано для когось, що це працювало на мене
Джошуа Г

Відповіді:


113

Це пов’язано з android:targetSdkVersion="@string/app_name"вашим найбільш маніфестним файлом.
Змініть його на:

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

targetSdkVersionПовинно бути цілим числом, але@string/app_name буде рядок. Я думаю, що це спричинило помилку.

РЕДАГУВАТИ:
Ви повинні додати за замовчуванням intent-filterу своєму manifiestфайлі для дії. Тоді лише android може запустити активність. інакше ви отримаєте помилку нижче у вікні консолі.

[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. Чи треба це якось починати? Якщо так, то як? Якщо ні, чому це не працює?
Драгос

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

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

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

Якщо Logcatви маєте на увазі значення Consoleв Eclipse, тоді відповідь - ні. Я не отримую жодних помилок. Якщо це не те, що ви мали на увазі під Logcat, скажіть мені, де я його можу знайти.
Драгос

26

Це означає, що версія android вашого avd старіша за версію, яка використовується для компіляції коду


Ви створюєте AVD (віртуальні пристрої Android) з урахуванням певного набору функцій (розмір екрану, версія коду, стан камери). Створіть такий, що відповідає цільовій версії API. Також створіть старіший для тестування на сумісність.
Брайс

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

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

І перейшов до Файл> Структура проекту , вибрав вкладку Властивості , а потім оновив версію Compile Sdk до «API 23: Android 5.X (MNC)» та версію інструментів побудови до «23.0.0»


0

Я працюю в Android Studio. Я отримав цю помилку, коли min / targetSDKVersion було встановлено на 17. Під час перегляду цього потоку я спробував змінити minSDKVersion, виправлена ​​проблема voila..problem. Піди розберися.. :(

    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

Помилка іонного емулятора 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.