ข้อผิดพลาดในการติดตั้ง: 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

อะไรคือปัญหา?

แก้ไข: แอปพลิเคชันไม่ทำงานบนอุปกรณ์เสมือน: นี่คือสิ่งที่ฉันได้รับจาก 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

สิ่งนี้อาจใช้สำหรับคนที่ทำงานให้ฉันด้วย
Joshua G

คำตอบ:


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แต่อุปกรณ์เสมือนเริ่มต้นและมันไม่ได้แสดงให้ฉัน ฉันต้องเริ่มเลยไหม? ถ้าใช่อย่างไร ถ้าไม่ทำไมถึงไม่ทำงาน
Dragos

หากคุณเรียกใช้จาก eclipse แอปจะเริ่มทำงานโดยอัตโนมัติหลังการติดตั้ง ดังนั้นกิจกรรมควรปรากฏบนหน้าจอ AVD เมื่อ AVD เริ่มทำงานจะอยู่ในสถานะ Locked (ล็อกหน้าจอ) เมื่อคุณปลดล็อกหน้าจอคุณจะเห็นHello Androidข้อความ
คาร์ทิค

ใช่มันเริ่มในสถานะล็อค แต่เมื่อฉันปลดล็อกมันจะแสดงภาพพื้นหลังและไอคอนบางส่วนที่ด้านล่าง ไม่มีHello Android.
Dragos

ข้อผิดพลาดใด ๆ ใน Logcat? คุณสามารถเพิ่มคำสั่งLogใน onCreate () และดูว่ามีการแสดงในหน้าต่าง Logcat หรือไม่
Karthik

ถ้าLogcatคุณหมายถึงConsoleใน Eclipse คำตอบคือไม่ ฉันไม่ได้รับข้อผิดพลาดใด ๆ ถ้านั่นไม่ใช่สิ่งที่คุณหมายถึง Logcat โปรดบอกฉันว่าฉันจะหามันได้ที่ไหน
Dragos

26

ซึ่งหมายความว่าเวอร์ชัน Android ของ avd ของคุณเก่ากว่าเวอร์ชันที่ใช้ในการคอมไพล์โค้ด


คุณสร้าง AVD (อุปกรณ์เสมือน Android) ของ AVD โดยมีคุณสมบัติบางอย่าง (ขนาดหน้าจอรุ่นรหัสสถานะกล้อง) สร้างเวอร์ชันที่เหมือนกับเวอร์ชัน API เป้าหมายของคุณ สร้างเวอร์ชันเก่าสำหรับการทดสอบความเข้ากันได้
Bryce

16

ข้อผิดพลาดนี้เกิดขึ้นเมื่อเวอร์ชัน 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
วิธีการออกแบบ

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 fixed ไปรูป .. :(

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

0

อย่าลืมตรวจสอบ build.gradle ของคุณและไม่ได้ใช้ SDK เวอร์ชันใหม่กว่าที่ติดตั้งบน AVD ของคุณ นั่นก็ต่อเมื่อคุณใช้ Android Studio เท่านั้น


0

หากคุณยังใหม่เหมือนฉันคุณต้องติดตั้ง SDK ขั้นต่ำในตอนแรก ตรวจสอบลิงค์

สิ่งนี้ได้ผลอย่างสมบูรณ์แบบสำหรับฉัน:

ปัญหาเดียวกันโพสต์อื่น ๆ พร้อมทางออกที่ดี

ความนับถือ,

Khaled.


0

วิธีแก้ปัญหาของฉันคือเปลี่ยนรายการmoduleแบบเลื่อนลงการกำหนดค่าการเรียกใช้จากwearableเป็นandroid. (ข้อผิดพลาดนี้เกิดขึ้นกับฉันเมื่อฉันพยายามเรียกใช้แอปโอเพนซอร์ส I / O Sched ของ Google) มันจะปรากฏการกำหนดค่าโดยอัตโนมัติทุกครั้งที่ฉันพยายามเรียกใช้จนกว่าฉันจะ เปลี่ยนแปลงไปmoduleandroid

คุณสามารถเข้าถึงการกำหนดค่าได้โดยไปที่Run-> Edit Configurations...-> Generalแท็บ ->Module: [drop-down-list-here]


0

ฉันพบว่าการเปลี่ยนแปลงที่แนะนำในไฟล์ Manifest ไม่ได้ช่วยแก้ปัญหาของฉัน

พบการแก้ไขในโฟลเดอร์ GradleScripts ในไฟล์ build.gradle สำหรับแอป Module:

ภายในไฟล์นี้ (build.gradle) มีการแก้ไขบรรทัดต่อไปนี้ minSdkVersion 22 ฉันเปลี่ยนค่า '22' นี้เป็น '19' สำหรับโทรศัพท์เฉพาะของฉันและการสร้างเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาด


0

Mate คำแนะนำของฉันคือเปลี่ยนอุปกรณ์เสมือน ดาวน์โหลดแอปพลิเคชัน "Genimotion" ใช้งานง่ายและมีอุปกรณ์มากมายที่คุณต้องการ


0

ไปที่build.cradleไฟล์โครงการของคุณและเพิ่ม

defaultConfig {
    minSdkVersion versions.minSdk

}“

ทำให้แอปพลิเคชันของคุณสอดคล้องกับ SDK ขั้นต่ำที่อุปกรณ์ของคุณกำลังทำงานอยู่


-1

ข้อผิดพลาด Ionic Android emulator 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 ยินดีต้อนรับ คำตอบอื่น ๆ แตกต่างกันอย่างไร?
Tiago Martins Peres 李大仁

-2

ฉันได้เปลี่ยนของฉันandroid:minSdkVersionและandroid:targetSdkVersionการ18จาก21:

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

ตอนนี้ฉันสามารถติดตั้งแอปของฉันได้สำเร็จ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.