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