2012-11-17 2 views
49

Ich habe eine Warnung, wenn Sie versuchen, Thema auf dem neuesten Android SDK-Paket 4.2 zu testen.Nicht auf die neuesten Versionen von Android ausgerichtet

Hier ist meine Manifest-Datei:

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

nicht die neuesten Versionen von Android-Targeting; Kompatibilitätsmodi gelten. Überlegen Sie, diese Version zu testen und zu aktualisieren. Weitere Informationen finden Sie unter android.os.Build.VERSION_CODES javadoc für . AndroidManifest.xml/ThemeTest Linie 7 Android Lint Problem

Ich verwende ein benutzerdefiniertes Thema namens "AppBaseTheme". Meine Frage ist was genau Konsultieren Sie die android.os.Build.VERSION_CODES Javadoc.. Wie kann ich dieses Problem lösen?

Antwort

96

Es sagt dies wegen targetSdkVersion="16". 16 API ist Jellybean 4.1 und 4.1.1, während Jellybean 4.2 API ist 17.

Versuchen Sie es mit:

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

Auch bedenken Sie, dass dies ein Lint Warnung. Diese Warnung soll Ihnen helfen, Ihren Code zu verbessern und die Wartung zu vereinfachen, während Sie gleichzeitig mit den neuesten Android-Änderungen kompatibel sind. Wenn Sie dies ignorieren, werden Sie keine unmittelbaren Probleme haben.

EDIT: Mit Android 4.3, die neueste SDK-Version ist jetzt 18, so sollten Sie verwenden:

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

EDIT 2: Mit Android 4.4, die neueste SDK-Version 19 ist jetzt, so dass Sie verwenden sollten:

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

EDIT 3: Mit Android L, müssen Sie die folgenden Werte verwendet werden, wie here beschrieben:

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

EDIT 4: Mit Android L's öffentliche Version, Sie 21 statt verwenden müssen:

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

20 für 4.4W verwendet wurde, oder für Android Wear.

EDIT 5:

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

In Zukunft konsultieren Sie bitte die official Android documentation für sich behalten up-to-date mit den neuesten Android API-Ebenen: Mit dem öffentlichen Release von Android M, Sie 23 statt verwenden.

+0

Wie soll ich L Ziel? – b729sefc

+0

Nicht für die Finsternis – zaman

+7

+1. Ist es nicht Zeit für LOLLIPOP zu editieren? ; D – Suzi

2

Ich hatte das gleiche Problem mit mir passieren, es stellt sich heraus, dass es jetzt einen neuen (in der Regel nicht verwendeten) Parameter im Manifest, die Sie auch verwenden möchten.In android: maxSdkVersion = "16" zu Ihrer uses-sdk wie ich unten haben:

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

Dies wird Ihnen keine Warnung beim Speichern (ab Version 17 die aktuelle maximale Version des SDK ist)

Die maxSdkVersion ist nicht notwendig, wird aber helfen, falls etwas in Version 17 geändert wird. Wenn Sie Standard-ADK-Plattformkomponenten verwenden, benötigen Sie die maxSdkVersion nicht.

+2

Siehe ClCfe's Antwort, warum dies eine schreckliche Idee ist. – mhsmith

+0

Sehr schlecht, um eine maximale SDK zu definieren! –

7

Sie sollten android:maxSdkVersion="17" nicht verwenden, da dies bedeutet, dass wenn Ihre App Ihr ​​Android-Betriebssystem auf eine Version größer als 17 aktualisiert, Ihre App entfernt wird.

+3

In der Tat sollte dieses Attribut nicht verwendet werden. Seit API 7 (enthalten), also für Android 2.1 und höher, wird vom System keine Überprüfung für dieses Attribut durchgeführt. Nur für Android 2.0.1 und weniger, Ihre Anwendung wird vom System entfernt, wenn die aktuelle Version größer als das maxSdkVersion-Attribut ist, andernfalls wird sie ignoriert. Es wird eher von GooglePlay verwendet, um zu filtern, welche Anwendungen für ein Gerät angezeigt werden, wie [hier] (http://developer.android.com/guide/topics/manifest/uses-sdk-element.html) – Leeeeeeelo

+0

dieses Attribut erläutert wird verwendet, um Ziele für apk zu teilen, dh Sie wollen verschiedene apk für Froyo und Gigerbread + wegen der verschiedenen Spieldienste sdk – sherpya

+0

verteilen, wenn die API-Ebene der Plattform höher ist als die von Ihrer App targetSdkVersion deklarierte Version, kann das System Kompatibilität aktivieren Verhaltensweisen, um sicherzustellen, dass Ihre App weiterhin so funktioniert, wie Sie es erwarten. –

0

Es ist eine Warnmeldung, wenn Sie es lösen möchten, dann können Sie Android: maxSdkVersion = "17" aber Sie müssen sich um die Tatsache kümmern, wenn jemand Ihre App derzeit verwendet und sein Android-Betriebssystem auf größere Version als aktualisieren dann Ihre App wird wegen nicht unterstützte Version automatisch entfernen .. So auch dieser Tatsache kümmern ..

3

Diese Flusen Nachricht, die Sie, dass Kompatibilitätsmodus erzählt wird auf alle Funktionen automatisch angewendet werden Sie verwendet haben, die nicht verfügbar in späteren Versionen als Ihre erklärte targetSdkVersion von 16 (und es teilt Ihnen auch mit, dass solche späteren Versionen sind - zB 17). Diese automatischen Kompatibilitätsmodusanpassungen sind möglicherweise nicht so ideal wie das, was Sie selbst erreichen könnten, indem Sie Funktionen verwenden, die in späteren (als Stufe 16) Versionen hinzugefügt wurden, um die Funktionalität der Stufe 16, die Sie möglicherweise verwendet haben, zu ersetzen wurden in späteren Versionen entfernt (falls vorhanden). Aber in späteren Versionen sollte alles weiterhin funktionieren (aufgrund der Anpassungen, die durch den Kompatibilitätscode vorgenommen wurden, der automatisch auf Versionen höher als die API-Ebene Ihrer targetSdkVersion angewendet wird); Es funktioniert möglicherweise nicht so gut wie Ihre eigene benutzerdefinierte Erkennung und Verwendung der neuen Funktionen (wenn Ihre App erkennt, dass sie in den späteren Versionen mit diesen Funktionen ausgeführt wird) hätte funktioniert. Hier

ist eine Diskussion mit Beispielen von minSdkLevel vs. targetSdkLevel:

Android Min SDK Version vs. Target SDK Version

Eine andere Sache, die Sie betrachten wollen, wird die Beziehung des Projekts Ziel erstellen (das Niveau des SDK verwendet kompilieren Ihre app) zum 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" hinzufügen.

<?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" /> 

Von: Stuck on why my android app wont work?

Verwandte Themen