Lỗi cài đặt: INSTALL_FAILED_OLDER_SDK


88

Tôi mới bắt đầu phát triển Android và trước tiên tôi muốn Hello Worldứng dụng chạy. Tôi đang sử dụng Eclipse IDE và SDK phiên bản 15 của Android 4.0.3. Tôi đã sao chép mọi thứ từ một trang web hướng dẫn, nhưng khi tôi cố chạy ứng dụng trên, virtual devicetôi gặp lỗi này:

[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!

Đây là lớp của tôi trong com.maze.appgói: 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>

Đây là cấu hình của 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

Vấn đề là gì?

CHỈNH SỬA: Ứng dụng không chạy trên Thiết bị ảo: Đây là những gì tôi nhận được trên LogCat (một số dòng):

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

trong tập tin điên rồ nhất của bạn, android:targetSdkVersion="@string/app_name"được đề cập. nó là một lỗi đánh máy?
Karthik

@Karthik Không, đó không phải là lỗi đánh máy. Đó là những gì trình hướng dẫn tạo ra.
Dragos

Điều này cũng có thể lên sử dụng cho người này làm việc cho tôi
Joshua G

Câu trả lời:


113

Đó là do android:targetSdkVersion="@string/app_name"trong tập tin điên rồ nhất của bạn.
Thay đổi nó thành:

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

Giá trị targetSdkVersionphải là một số nguyên, nhưng @string/app_namesẽ là một chuỗi. Tôi nghĩ rằng điều này gây ra lỗi.

CHỈNH SỬA:
Bạn phải thêm mặc định intent-filtervào manifiesttệp của mình cho hoạt động. Sau đó, chỉ android mới có thể khởi chạy hoạt động. nếu không bạn sẽ gặp lỗi bên dưới trong cửa sổ bảng điều khiển của mình.

[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!

Thêm phần sau vào <activity>thẻ của bạn .

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

Cảm ơn bạn! Bây giờ tôi không nhận được lỗi nữa. Nhưng Thiết bị ảo khởi động và nó không hiển thị cho tôi Hello Android. Tôi có phải bắt đầu nó bằng cách nào đó không? Nếu có, làm thế nào? Nếu không, tại sao nó không hoạt động?
Dragos

nếu bạn chạy từ nhật thực, ứng dụng sẽ tự động được khởi động sau khi cài đặt. Vì vậy, hoạt động sẽ hiển thị trên màn hình AVD. Khi AVD khởi động, nó sẽ ở trạng thái Đã khóa (khóa màn hình), khi bạn mở khóa màn hình, bạn có thể thấy Hello Androidvăn bản.
Karthik

Có, nó bắt đầu ở trạng thái Khóa, nhưng khi tôi mở khóa, nó chỉ hiển thị cho tôi hình nền và một số biểu tượng ở dưới cùng. Không có Hello Android.
Dragos

bất kỳ lỗi nào trên Logcat? bạn có thể thêm một số câu lệnh Nhật ký trong onCreate () và xem chúng có được hiển thị trong cửa sổ Logcat hay không.
Karthik

Nếu ý của Logcatbạn là Consoletrong Eclipse, thì câu trả lời là không. Tôi không nhận được bất kỳ lỗi nào. Nếu đó không phải là ý của bạn đối với Logcat, vui lòng cho tôi biết tôi có thể tìm thấy nó ở đâu.
Dragos

26

Điều này có nghĩa là phiên bản android trong avd của bạn cũ hơn phiên bản đang được sử dụng để biên dịch mã


Bạn xây dựng AVD (Thiết bị ảo Android) với một bộ tính năng nhất định (Kích thước màn hình, phiên bản mã, trạng thái máy ảnh). Tạo một phiên bản giống với phiên bản API mục tiêu của bạn. Cũng xây dựng một cái cũ hơn để kiểm tra tính tương thích.
Bryce

15

Lỗi này xảy ra khi phiên bản sdk được cài đặt trên thiết bị của bạn (thiết bị thực hoặc thiết bị ảo) nhỏ hơn android:minSdkVersiontrong tệp kê khai Android của bạn.

Bạn phải giảm android:minSdkVersionhoặc bạn phải chỉ định phiên bản api cao hơn cho AVD của mình.

Hãy nhớ rằng không phải lúc nào giảm android:minSdkVersioncũng là chuyện nhỏ vì bạn phải đảm bảo rằng, ứng dụng của bạn quan tâm đến API được cài đặt thực tế và sử dụng các phương pháp chính xác:

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!");
}

Sử dụng android-support-library và / hoặc các thư viện như actionbar-sherlock sẽ giúp bạn xử lý đặc biệt với các widget của các phiên bản cũ hơn.


13

Tôi đang sử dụng Android Studio 0.8.1. Tôi có một tệp gradle của dự án như dưới đây:

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

Trình giả lập của tôi là android 4.0. Vì vậy, tôi đã sửa đổi trình giả lập của mình và tạo api cấp 4.0.3 (apilevel 15). Nó đã làm việc.


3

Tôi đã thử tất cả các phản hồi được mô tả ở đây nhưng giải pháp của tôi đã thay đổi bên trong build.gradletệp của tôi minSdkVersiontừ 8 thành 9 vì một số thư viện trong dự án của tôi không thể hoạt động với API 8, đó là lý do cho thông báo 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"
        }
...
...
...

Điều này nghe có vẻ như nó được dịch sang SDK tối thiểu của một số thư viện được bao gồm là 9.
methodignature

1

Trong trường hợp của tôi, tôi đã chỉnh sửa một dự án có điều này trong tệp AndroidManifest.xml và điều này gây ra cho tôi lỗi ở trên, trong thời gian chạy:

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

Những gì tôi vừa làm là thay đổi minSdkVersion = "17", thành minSdkVersion = "16". Thẻ kết quả của tôi là:

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

Bây giờ tôi không nhận được lỗi nữa ..

Hi vọng điêu nay co ich


1

Gặp lỗi tương tự, vấn đề là sự khác biệt trong phiên bản Android SDK mà AVD đang sử dụng và phiên bản trong tệp AndroidManifest. Tôi có thể giải quyết nó bằng cách sửa

android: minSdkVersion = "16"

để phù hợp với AVD.


1

Bạn sẽ thấy lỗi tương tự nếu bạn đang cố gắng cài đặt một gói ứng dụng được tạo bằng

compileSdkVersion "android-L"

Ngay cả đối với các thiết bị chạy phiên bản Android 5.0 cuối cùng. Chỉ cần thay đổi điều này thành

compileSdkVersion 21

1

Sửa lỗi cho Android 6.0 Marshmallow mới Đã khắc phục sự cố của tôi khi tôi cập nhật lên API 23 (Android 6.0 Marshmallow) bằng cách cập nhật phiên bản công cụ xây dựng lên 23.0.0 như sau:

android {
    buildToolsVersion '23.0.0'
...

Và đi tới Tệp> Cấu trúc dự án , chọn tab Thuộc tính sau đó cập nhật phiên bản Biên dịch Sdk thành "API 23: Android 5.X (MNC)" và phiên bản Công cụ xây dựng thành "23.0.0"


0

Tôi đang sử dụng Android Studio. Tôi gặp lỗi này khi min / targetSDKVersion được đặt thành 17. Trong khi tìm kiếm luồng này, tôi đã cố gắng thay đổi minSDKVersion, thì đấy..có vấn đề đã được khắc phục. Xem hình .. :(

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

0

Đảm bảo kiểm tra build.gradle của bạn và nó không sử dụng phiên bản SDK mới hơn phiên bản được cài đặt trên AVD của bạn. Đó là chỉ khi bạn sử dụng Android Studio.



0

Giải pháp của tôi là thay đổi moduledanh sách thả xuống cấu hình chạy từ wearablethành android. (Lỗi này đã xảy ra với tôi khi tôi thử chạy ứng dụng nguồn mở Lập lịch I / O của Google.) Nó sẽ tự động bật lên các cấu hình mỗi khi tôi cố gắng chạy cho đến khi tôi đã thay đổi modulethành android.

Bạn có thể truy cập các cấu hình bằng cách đi tới Run-> Edit Configurations...-> Generaltab ->Module: [drop-down-list-here]


0

Tôi thấy rằng việc thực hiện thay đổi được đề xuất trong tệp kê khai không giải quyết được vấn đề của tôi.

Bản sửa lỗi được tìm thấy trong thư mục GradleScripts, trong tệp build.gradle cho ứng dụng Module:.

Bên trong tệp này (build.gradle), dòng sau đã được sửa đổi. minSdkVersion 22 Tôi đã thay đổi giá trị '22' này thành '19' cho điện thoại cụ thể của mình và quá trình xây dựng đã hoàn thành mà không có lỗi.


0

Bạn ơi, lời khuyên của tôi là thay đổi thiết bị ảo. Tải xuống ứng dụng "Genimotion", nó dễ sử dụng và có rất nhiều thiết bị bạn cần


0

Đi vào build.cradletệp dự án của bạn và thêm

defaultConfig {
    minSdkVersion versions.minSdk

} '

Điều này làm cho ứng dụng của bạn tuân theo SDK tối thiểu mà thiết bị của bạn đang chạy.


-1

Lỗi trình giả lập Android Ionic INSTALL_FAILED_OLDER_SDK

Vì vậy, về cơ bản, điều đó có nghĩa là quá trình cài đặt đã không thành công do có phiên bản SDK cũ hơn targetSdkVersion được chỉ định trong ứng dụng của bạn (đó là vấn đề Gradle). Chỉ cần chỉnh sửa tệp AndroidManifest.xml và thêm mã sau:

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

Sau nhiều ngày tìm kiếm giải pháp, vậy là xong.

Hoạt động tốt cho tôi!


-1

Nếu lỗi "Lỗi cài đặt: INSTALL_FAILED_OLDER_SDK" xuất hiện, bạn phải thay đổi phiên bản minSdkVersion trong AndroidManifest thành phiên bản được chỉ định trong trình giả lập android: xem Cài đặt -> Giới thiệu về điện thoại -> Phiên bản Android.


1
Chào bạn @ cupoma58, chào bạn. Câu trả lời này khác với câu trả lời kia như thế nào?
Tiago Martins Peres 李大仁

-2

Tôi đã thay đổi tôi android:minSdkVersionandroid:targetSdkVersionđể 18từ 21:

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

Bây giờ tôi có thể cài đặt ứng dụng của mình thành công.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.