Wie kann ich mein Projekt mit verschiedenen SDK-Versionen kompatibel machen, während ich Features für eine bestimmte Version verwende?

8

Ich entwickle ein Projekt, das ein Flash-Video in einer Webansicht verwendet. Ich löste alle meine Probleme bezüglich Code, aber arbeitete nur unter Honeycomb.

Lesen dies ich herausgefunden, wie man die Probleme für Android 3.0 und später (einschließlich ICS) löst, aber jetzt ist es die große Frage ... Wenn ich mein Projekt mit ICS kompatibel mache, muss ich die Direktive verwenden, aber dann würde ich nicht laufen auf Lebkuchen.

Um weitere Informationen zu geben ... ist das problematische Stück Code dieser:

%Vor%

Dies ist eine Eigenschaft, die in Android 3.0 enthalten war.

Also, gibt es etwas, was ich tun kann, um zu vermeiden, zwei verschiedene apks (etwas wie eine Vor-HoneyComb apk und post-HoneyComb apk) zu bauen?

Dies ist ein Teil meines Android-Manifests:     

%Vor%

Vielen Dank im Voraus.

Aktualisierung:  Ich habe bereits benutzt, was Mike erklärt hat, es ist zu sagen, minSdk und targetSdk richtig zu definieren, aber ich war von der folgenden Tatsache verwirrt. Bei einer solchen Projektkonfiguration wird beim Ausführen des Projekts in Eclipse das folgende Fenster angezeigt: Das rote Kreuz bedeutet, dass die Projekt-TargetSdk-Ebene über der Geräte-API-Ebene liegt. Also dachte ich, es funktionierte einfach nicht in diesem Gerät, aber die Sache ist, dass Sie es tatsächlich ausführen können und wie erwartet funktionieren.

    
mdelolmo 12.01.2012, 12:00
quelle

2 Antworten

8

Der Kommentar, den das OP unter seiner Frage geschrieben hat (im Grunde genommen, dass das targetSDK die Erstellung einer App nicht beeinflusst), ist völlig falsch! Entschuldigen Sie, um unverblümt zu sein.

Kurz gesagt, hier ist der Zweck, ein anderes targetSDK von der minSDK zu deklarieren: Es bedeutet, dass Sie Funktionen von einem höheren SDK als Ihr Minimum verwenden, aber Sie haben Abwärtskompatibilität sichergestellt. Stellen Sie sich vor, Sie möchten ein Feature verwenden, das erst kürzlich eingeführt wurde, aber für Ihre Anwendung nicht entscheidend ist. Sie würden dann targetSDK auf die Version setzen, in der diese neue Funktion eingeführt wurde, und das Minimum auf etwas niedriger setzen, damit alle Ihre App weiterhin verwenden können.

Nehmen wir zum Beispiel an, Sie schreiben eine App, die die Gestenerkennung ausgiebig nutzt. Jeder Befehl, der durch eine Geste erkannt wird, kann jedoch auch über eine Schaltfläche oder über das Menü ausgeführt werden. In diesem Fall sind Gesten ein "cooles Extra", werden aber nicht benötigt. Daher würden Sie das Ziel sdk auf 7 setzen ("Eclair", wenn die GestureDetection-Bibliothek eingeführt wurde), und das MinimumSDK auf Level 3 ("Cupcake"), damit auch Leute mit wirklich alten Handys Ihre App nutzen können. Sie müssen lediglich sicherstellen, dass Ihre App die Version von Android überprüft hat, auf der sie ausgeführt wurde, bevor Sie versuchen, die Gestenbibliothek zu verwenden, um zu versuchen, sie zu verwenden, wenn sie nicht existiert. (Zugegeben, das ist ein veraltetes Beispiel, da kaum jemand noch ein v1.5-Telefon hat, aber es war eine Zeit, in der die Kompatibilität mit v1.5 wirklich wichtig war.)

Um ein anderes Beispiel zu nennen, könnten Sie dies verwenden, wenn Sie ein Feature von Gingerbread oder Honeycomb verwenden möchten. Einige Leute werden die Updates bald bekommen, aber viele andere, besonders mit älterer Hardware, könnten mit Eclair stecken bleiben, bis sie ein neues Gerät kaufen. Dadurch können Sie einige der neuen Funktionen nutzen, ohne jedoch einen Teil Ihres möglichen Marktes auszuschließen.

Es gibt einen wirklich guten Artikel aus dem Blog des Android-Entwicklers über die Verwendung dieser Funktion, und insbesondere, wie man den oben erwähnten Code" check the feature exists before use it "erstellt.

Zum OP: Ich habe dies hauptsächlich zum Nutzen von jedem geschrieben, der zufällig über diese Frage in der Zukunft stolpert.

    
user647826 12.01.2012, 13:43
quelle
3

Ich habe ein ähnliches Problem mit der Versionsverwaltung des Android-Manifests. Für ältere Telefone möchte ich Widgets in einigen vordefinierten Größen haben, für neuere Telefone, die die Größenänderung unterstützen, möchte ich ein einziges veränderbares Widget haben. Konnte noch keinen Weg finden, es zu tun. Möglicherweise ist Google deshalb mit mehreren APK-Support gekommen .

Der oben erwähnte Artikel von Adam's Powell behandelt diese Versionierung nicht. (großer Artikel BTW).

Bearbeiten : eine Lösung gefunden. Die Widgets-Definition im Android-Manifest hat eine boolesche 'aktivierte' Eigenschaft, die aus booleschen Ressourcenwerten gesetzt werden kann. Die Ressourcenwerte können pro Version Werte haben, die die Standardversion der qualifizierten Ressourcenverzeichnisnamen verwenden. Problem gelöst.

    
user1076637 12.01.2012 17:43
quelle