Mehrere APKs für verschiedene API-Ebenen erstellen

Wenn Sie Ihre App bei Google Play veröffentlichen, sollten Sie eine Android App Bundle: In diesem Fall wird Google Play automatisch optimierte APKs für die Gerätekonfiguration der einzelnen Nutzer generiert und bereitgestellt, sodass sie nur den Code und die Ressourcen, die sie zum Ausführen Ihrer App benötigen. Das Veröffentlichen mehrerer APKs ist nützlich, wenn Sie Sie dürfen keine APKs bei Google Play veröffentlichen. Sie müssen aber jedes APK selbst erstellen, signieren und verwalten.

Wenn Sie bei der Entwicklung Ihrer Android-App die Vorteile mehrerer APKs bei Google Play nutzen möchten, ist es wichtig, von Anfang an einige bewährte Vorgehensweisen anzuwenden und unnötige Kopfschmerzen zu vermeiden. in den Entwicklungsprozess einfließen. In dieser Lektion erfährst du, wie du mehrere APKs deiner App, die jeweils einen etwas anderen Bereich von API-Levels abdeckt. Außerdem lernen Sie einige Tools kennen, erforderlich, um die Verwaltung einer Codebasis mit mehreren APK-Dateien so einfach wie möglich zu gestalten.

Bestätigen, dass Sie mehrere APKs benötigen

Wenn Sie versuchen, eine App zu entwickeln, die für mehrere Android-Generationen funktioniert Natürlich möchten Sie, dass Ihre Anwendung neue Funktionen auf neuen Geräten nutzt, ohne Abstriche bei der Abwärtskompatibilität. Es mag anfangs so wirken, als wären mehrere APKs ist Support die beste Lösung, aber das ist oft nicht der Fall. Die Verwendung eines einzelnen APK Stattdessen des Entwicklerhandbuchs für mehrere APKs finden Sie nützliche Informationen dazu, wie Sie Dazu benötigen Sie nur ein einziges APK, einschließlich der Nutzung unserer Support-Bibliothek. Sie können auch lernen, Schreiben Sie Code, der nur auf bestimmten API-Levels in einem einzigen APK ausgeführt wird, ohne auf rechenintensive Techniken wie Reflexion von in diesem Artikel.

Die Begrenzung Ihrer App auf ein einzelnes APK hat mehrere Vorteile, einschließlich:

  • Einfacheres Veröffentlichen und Testen
  • Es muss nur eine Codebasis verwaltet werden
  • Deine App kann sich an Änderungen der Gerätekonfiguration anpassen
  • Die geräteübergreifende App-Wiederherstellung funktioniert ganz einfach
  • Sie müssen sich keine Gedanken über Marktpräferenzen, das Verhalten von „Upgrades“ von einem APK in den oder welches APK zu welcher Geräteklasse gehört

Im weiteren Verlauf dieser Lektion wird davon ausgegangen, dass Sie das Thema recherchiert und das und haben festgestellt, dass mehrere APKs der richtige Weg für Ihr .

Anforderungen grafisch darstellen

Erstellen Sie zuerst ein einfaches Diagramm, um schnell zu ermitteln, wie viele APKs Sie benötigen und welche API Sie benötigen. Bereich, den jedes APK abdeckt. Eine praktische Referenz finden Sie auf der Seite Plattformversionen des Die Website für Android-Entwickler bietet Daten über die relative Anzahl aktiver Geräte, auf denen eine bestimmte Version der Android-Plattform. Auch wenn es anfangs einfach klingt, ist es wichtig, den Überblick der API-Levels, auf die ein APK ausgerichtet ist, sehr schnell schwierig zu werden, Überschneidungen aufweisen, was häufig der Fall ist. Zum Glück können Sie Ihre Anforderungen schnell skizzieren, und haben eine Referenz für später.

Um Ihr Diagramm mit mehreren APKs zu erstellen, beginnen Sie mit einer Zeile von Zellen, die die verschiedene API-Level der Android-Plattform. Eine zusätzliche Zelle am Ende platzieren, um die Zukunft darzustellen Versionen von Android.

3 4 5 6 7 8 9 10 11 12 13 +

Jetzt müssen Sie nur noch das Diagramm farbig markieren, sodass jede Farbe für ein APK steht. Hier ist ein Beispiel dafür, können Sie jedes APK auf einen bestimmten Bereich von API-Ebenen anwenden.

3 4 5 6 7 8 9 10 11 12 13 +

Sobald Sie dieses Diagramm erstellt haben, verteilen Sie es an Ihr Team. Teamkommunikation zu Ihrem Projekt ist jetzt einfacher geworden. Statt zu fragen "Wie sieht es mit dem APK für die API-Ebenen 3 bis 6, ähm, mit Android 1.x. Wie läuft das weiter?“ Ihr könnt ganz einfach sagen: „Wie wird das Blue APK ?

Alle gängigen Codes und Ressourcen in einem Bibliotheksprojekt speichern

Ganz gleich, ob Sie eine bestehende Android-App ändern oder eine ganz neue App erstellen möchten: was Sie als Erstes an der Codebasis tun sollten. Alles das in das Bibliotheksprojekt geht, nur einmal aktualisiert werden muss. Farbthemen und Fehler, die im freigegebenen Code behoben wurden), wodurch die Entwicklungszeit verkürzt und die die leicht vermieden werden können.

Hinweis:Die Implementierungsdetails zum Erstellen und Bibliotheksprojekte zu integrieren, geht es in dieser Lektion nicht. findest du unter Android-Mediathek erstellen.

Wenn Sie eine vorhandene App konvertieren, um mehrere APK-Dateien zu unterstützen, durchforsten Sie Ihre Codebasis nach jeder lokalisierten Zeichenfolgendatei, Liste von Werten, Designs sowie die Farben, Menüsymbole und das Layout, das sich in den APKs nicht ändert, im Bibliotheksprojekt an. Code, der sich kaum verändert, sollte auch im Bibliotheksprojekt. Sie werden diese Funktionen wahrscheinlich -Klassen hinzufügen, um eine oder zwei Methoden vom APK zu APK hinzuzufügen.

Wenn Sie die Anwendung jedoch von Grund auf neu erstellen, versuchen Sie Folgendes: so viel wie möglich, Code zuerst in das Bibliotheksprojekt zu schreiben und ihn dann nur einzelne APK. Langfristig ist dies viel einfacher zu verwalten, dann noch einmal, dann noch einmal und Monate später, um herauszufinden, ohne etwas zu verschrauben.

Neue APK-Projekte erstellen

Für jedes APK, das Sie veröffentlichen möchten, sollte es ein separates Android-Projekt geben. Einfach Organisation erstellt haben, legen Sie das Bibliotheksprojekt und alle zugehörigen APK-Projekte im selben übergeordneten Ordner ab. Denken Sie auch daran, dass jedes APK denselben Paketnamen haben muss, auch wenn dies nicht zwangsläufig den Paketnamen mit der Bibliothek teilen müssen. Wenn Sie 3 APKs nach dem Schema haben müssten, wie oben beschrieben, könnte Ihr Stammverzeichnis wie folgt aussehen:

alexlucas:~/code/multi-apks-root$ ls
foo-blue
foo-green
foo-lib
foo-red

Fügen Sie nach dem Erstellen der Projekte das Bibliotheksprojekt als Referenz zu jedem APK-Projekt hinzu. Wenn Definieren Sie nach Möglichkeit Ihre Ausgangsaktivität im Bibliotheksprojekt und erweitern Sie diese Aktivität in Ihrem APK. Projekt arbeiten. Wenn Sie eine Anfangsaktivität im Bibliotheksprojekt definiert haben, die Initialisierung deiner App an einem Ort, damit die einzelnen APK-Dateien „universelle“ wie die Initialisierung von Analytics, die Durchführung von Lizenzprüfungen und andere Initialisierungsverfahren, die sich von APK zu APK kaum ändern.

Manifeste anpassen

Wenn ein Nutzer über Google Play eine App herunterlädt, die mehrere APKs verwendet, Das zu verwendende APK wird anhand von zwei einfachen Regeln ausgewählt:

  • Das Manifest muss anzeigen, dass ein bestimmtes APK zulässig ist
  • Von den zulässigen APKs gewinnt die höchste Versionsnummer.

Nehmen wir beispielsweise die zuvor beschriebenen APKs und gehen wir davon aus, dass wir ein maximales API-Level für eines der APKs festlegen Für jedes einzelne APK wäre die mögliche Reichweite so aussehen:

3 4 5 6 7 8 9 10 11 12 13 +
3 4 5 6 7 8 9 10 11 12 13 +
3 4 5 6 7 8 9 10 11 12 13 +

Da ein APK mit einer höheren minSdkVersion auch ein höhere Versionscodes haben, wissen wir, dass hinsichtlich der versionCode-Werte Rot ≥ Grün ≥ Blau. Daher können wir das Diagramm effektiv so minimieren:

3 4 5 6 7 8 9 10 11 12 13 +

Nehmen wir nun weiter an, dass das Red APK Anforderungen hat, die die anderen beiden nicht haben. Seite Filter bei Google Play von enthält der Android-Entwicklerleitfaden eine ganze Liste der möglichen Fehler. Für die Nehmen wir als Beispiel an, dass für Rot eine Frontkamera erforderlich ist. Der Sinn und Zweck der Das rote APK ist die Kombination der Frontkamera mit süßen neuen Funktionen, die in der API hinzugefügt wurden. 11. Es hat sich jedoch herausgestellt, dass nicht alle Geräte, die API 11 unterstützen, auch Frontkameras haben! Die fürchterlich!

Wenn ein Nutzer Google Play auf einem solchen Gerät aufruft, dass Red die Frontkamera als Anforderung auflistet, und ignoriere sie ganz leise. hat festgestellt, dass Red und dieses Gerät kein digitaler Himmel sind. Dann erkennt das System, Grün ist nicht nur aufwärtskompatibel mit Geräten mit API 11 (da kein maxSdkVersion definiert wurde), Aber es spielt auch keine Rolle, ob es eine Frontkamera gibt! Die App kann weiterhin heruntergeladen werden bei Google Play durch den Nutzer, denn trotz des Missgeschicks der Frontkamera gab APK, das dieses bestimmte API-Level unterstützt hat.

Damit Sie alle APKs in separaten „Tracks“ verwalten können, ist es wichtig, einen guten Versionscode zu haben. . Den empfohlenen Code finden Sie im Bereich Versionscodes der in unserem Entwicklerleitfaden. Da es bei den Beispiel-APKs nur um eine von drei möglichen ab, wäre es ausreichend, die einzelnen APK-Dateien durch 1000 zu trennen. Setzen Sie die ersten Ziffern auf die minSdkVersion für das jeweilige APK hinzu und erhöhen Sie von dort aus. Dies könnte etwa so aussehen:

Blau: 03001, 03002, 03003, 03004...
Grün: 07001, 07002, 07003, 07004...
Rot:11001, 11002, 11003, 11004...

Zusammengenommen würden Ihre Android-Manifeste wahrscheinlich so aussehen:

Blau:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="03001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="3" />
    ...

Grün:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="07001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="7" />
    ...

Rot:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="11001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="11" />
    ...

Checkliste vor der Veröffentlichung ansehen

Überprüfen Sie die folgenden Punkte, bevor Sie sie bei Google Play hochladen. Denken Sie daran, dass diese für mehrere APKs relevant sind und keinesfalls eine vollständige Checkliste für alle Apps darstellen, die auf Google Play hochgeladen werden.

  • Alle APKs müssen denselben Paketnamen haben
  • Alle APKs müssen mit demselben Zertifikat signiert sein
  • Wenn sich die APKs in der Plattformversion überschneiden, muss das APK mit der höheren minSdkVersion einen höheren Versionscode haben
  • Überprüfe deine Manifestfilter auf widersprüchliche Informationen. Ein APK, das Cupcake auf XLARGE-Bildschirmen nur unterstützt, wird von niemandem gesehen werden.
  • Das Manifest jedes APK muss für mindestens einen unterstützten Bildschirm, eine unterstützte OpenGL-Textur oder eine Plattformversion eindeutig sein
  • Testen Sie jedes APK auf mindestens einem Gerät. Ansonsten ist auf Ihrem Entwicklungscomputer einer der am besten anpassbaren Geräteemulatoren der Branche installiert. Verrückt!

Es lohnt sich auch, das kompilierte APK zu überprüfen, bevor Sie es auf den Markt bringen, um sicherzustellen, dass eventuelle Überraschungen, die Ihre App bei Google Play verstecken könnten. Das geht ganz einfach über die „aapt“ . Aapt (das Android Asset Packaging Tool) ist Teil des Build-Prozesses zur Erstellung und und ist auch ein sehr praktisches Tool zur Überprüfung.

>aapt dump badging
package: name='com.example.hello' versionCode='1' versionName='1.0'
sdkVersion:'11'
uses-permission:'android.permission.SEND_SMS'
application-label:'Hello'
application-icon-120:'res/drawable-ldpi/icon.png'
application-icon-160:'res/drawable-mdpi/icon.png'
application-icon-240:'res/drawable-hdpi/icon.png'
application: label='Hello' icon='res/drawable-mdpi/icon.png'
launchable-activity: name='com.example.hello.HelloActivity'  label='Hello' icon=''
uses-feature:'android.hardware.telephony'
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'small' 'normal' 'large' 'xlarge'
supports-any-density: 'true'
locales: '--_--'
densities: '120' '160' '240'

Achten Sie bei der Überprüfung der aapt-Ausgabe darauf, dass Sie keine widersprüchlichen Werte für "unterstützt-Bildschirme" und "Kompatible Bildschirme" enthält und dass es keine unbeabsichtigten Werte die aufgrund von Berechtigungen hinzugefügt wurden, die du im Manifest festgelegt hast. Im obigen Beispiel hat das APK auf sehr vielen Geräten nicht sichtbar.

Was steckt dahinter? Durch das Hinzufügen der erforderlichen Berechtigung SEND_SMS wurde die Funktionsanforderung von „android.hardware.telephony“ implizit hinzugefügt. Da es sich bei API 11 um Honeycomb handelt (die speziell für Tablets optimierte Android-Version) und keine Honeycomb-Geräte über Telefoniehardware verfügen, filtert Google Play dieses APK in allen Fällen heraus, bis zukünftige Geräte kommen, die ein höheres API-Level haben UND über Telefoniehardware verfügen.

Dieses Problem lässt sich leicht beheben, indem du Folgendes zu deinem Manifest hinzufügst:

<uses-feature android:name="android.hardware.telephony" android:required="false" />

Die android.hardware.touchscreen-Anforderung wird ebenfalls implizit hinzugefügt. Wenn du möchtest, dass dein APK auf Fernsehern ohne Touchscreen angezeigt wird, solltest du deinem Manifest Folgendes hinzufügen:

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />

Nachdem Sie die Schritte der Checkliste vor der Veröffentlichung abgeschlossen haben, laden Sie Ihre APKs bei Google Play hoch. Es kann etwas dauern, bis die App beim Surfen in Google Play angezeigt wird. Wenn dies der Fall ist, müssen Sie jedoch noch eine letzte Prüfung durchführen. Laden Sie die App auf alle Testgeräte herunter, um sicherzustellen, dass die APKs auf die gewünschten Geräte ausgerichtet sind. Herzlichen Glückwunsch, Sie haben es geschafft!