2012-11-17 191 views
49

當試圖在最新的Android SDK包4​​.2上測試主題時,我有一個警告。不針對最新版本的Android

這裏是我的清單文件:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.themetest" 
    android:versionCode="1" 
    android:versionName="1.0" > 

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

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppBaseTheme" > 
     <activity 
      android:name="com.example.themetest.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

不針對Android系統的最新版本;兼容模式 適用。考慮測試和更新這個版本。詳情請參閱 android.os.Build.VERSION_CODES javadoc。 AndroidManifest.xml/ThemeTest line 7 Android Lint問題

我正在使用名爲'AppBaseTheme'的自定義主題。我的問題是什麼請參閱android.os.Build.VERSION_CODES javadoc。。我怎麼能解決這個問題?

回答

96

它說這是因爲targetSdkVersion="16"。 API 16傑利貝恩4.1和4.1.1,而4.2的Jellybean是API 17

嘗試使用:

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

另外,請記住,這是一個皮棉警告。這些警告旨在幫助您更好地使用代碼,並使其易於維護,同時兼容最新的Android更改。忽略這一點不會引起你任何直接的問題。

編輯:搭載Android 4.3,最新的SDK版本,現在是18,所以你應該使用:

... 
     android:targetSdkVersion="18" /> 

編輯2:在Android 4.4系統,最新的SDK版本,現在是19,所以你應該使用:

... 
     android:targetSdkVersion="19" /> 

EDIT 3:藉助Android L,則必須使用下面的值,如所描述here

compileSdkVersion="android-L" 
minSdkVersion="L" 
targetSdkVersion="L" 

編輯4:藉助Android L的公開發布,則必須使用21來代替:用於4.4W

... 
     android:targetSdkVersion="21" /> 

20,或Android Wear

編輯5:藉助Android M的公開發布,則必須使用23來代替:

... 
     android:targetSdkVersion="23" /> 

今後請諮詢​​以保持自己跟上時代的最新Android API級別。

+0

我應該怎樣目標L-? – b729sefc

+0

不工作的日食 – zaman

+7

+1。是不是編輯LOLLIPOP的時間? ; D – Suzi

2

我遇到了同樣的問題,事實證明,在清單中現在還有一個新的(通常未使用的)參數,您也將使用它。添加機器人:maxSdkVersion =「16」到您的用途-SDK像我有如下:

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

這會給你保存的時候(因爲版本17是SDK的當前最高版本)

沒有警告maxSdkVersion不是必需的,但會幫助修改版本17中的某些內容。如果您使用的是標準ADK平臺組件,則不需要maxSdkVersion。

+2

查看ClCfe爲什麼這是一個可怕的想法的答案。 – mhsmith

+0

很難定義一個max sdk! –

7

你不應該使用android:maxSdkVersion="17",因爲這意味着,如果使用你的應用程序有人更新了Android操作系統,以大於17的版本,您的應用程序將被刪除。

+3

確實,不應該使用這個屬性。但是,由於API 7(含),意味着Android 2.1及以上版本,系統不會檢查該屬性。 僅適用於Android 2.0。1以下,如果當前版本大於maxSdkVersion屬性,系統將刪除您的應用程序,否則將忽略它。 GooglePlay相當用於過濾顯示設備的應用程序,如[此處](http://developer.android.com/guide/topics/manifest/uses-sdk-element.html) – Leeeeeeelo

+0

此屬性所述是用來分割apk的目標,也就是說,如果平臺的API級別高於應用程序的targetSdkVersion聲明的版本,由於不同的播放服務sdk – sherpya

+0

,你想爲froyo和gigerbread +分發不同的apk,系統可以啓用兼容性行爲來確保您的應用繼續以您期望的方式工作。 –

0

它是一個警告消息,如果你想解決它,那麼你可以設置android:maxSdkVersion =「17」,但你必須注意的事實,如果有人目前使用你的應用程序和升級他的android操作系統的版本比那麼你的應用程序會自動的,因爲不支持的版本中刪除。所以照顧這個事實也..

3

這皮棉消息告訴你,兼容模式將被自動應用到你可能已經使用的任何功能在後來的版本比你宣佈16 targetSdkVersion不可用(並且,它也告訴你,有這樣以後的版本 - 例如,17)。

這些自動兼容模式調整可能不如您可以使用後來(比第16級)版本中添加的任何功能來替代您可能已使用的第16級功能的功能更加完美,已在更高版本中刪除(如果有的話)。但是,一切都還是要繼續在以後的版本中工作(由於是自動應用上比你宣佈targetSdkVersion的API級別更高版本上運行的兼容性代碼所做的調整);它只是可能不是自己的自定義檢測和使用,新功能以及工作(當你的應用程序檢測到它在以後的版本中有這些功能在運行)工作過。

這裏有一個討論,結合實例,minSdkLevel主場迎戰targetSdkLevel:

Android Min SDK Version vs. Target SDK Version

你將要考慮的另一件事是本項目的關係構建目標(SDK的使用水平編譯你的應用程序)的targetSdkLevel:

Difference between "Build Target SDK" in Eclipse and android:targetSdkVersion in AndroidManifest.xml?

0

添加xmlns:tools="http://schemas.android.com/tools" tools:ignore="OldTargetApi"

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.themetest" 
    android:versionCode="1" 
    android:versionName="1.0" xmlns:tools="http://schemas.android.com/tools" tools:ignore="OldTargetApi"> 

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

來源:Stuck on why my android app wont work?