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 eine andere Klasse von Bildschirmgrößen abdeckt. Außerdem lernen Sie einige Tools kennen, 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 mit einer Vielzahl von Android-Versionen kompatibel ist Ihre Anwendung sollte auf jedem Gerät optimal dargestellt werden. Sie möchten Nutzen Sie den Platz großer Bildschirme, arbeiten Sie aber auch auf kleinen Bildschirmen, um die neue Android-API zu nutzen. Funktionen oder visuelle Texturen, die auf modernsten Geräten verfügbar sind. Möglicherweise Es scheint so, als sei die Unterstützung mehrerer APK-Dateien die beste Lösung, aber das ist oft nicht Fall. Die Verwendung Der Abschnitt zu einzelnen APKs des Leitfadens für mehrere APKs enthält nützliche Informationen dazu, wie du All dies erreichen Sie mit einem einzigen APK, einschließlich der Nutzung unserer Supportbibliothek, und Links zu Ressourcen im gesamten Android-Entwicklerhandbuch.
Die Beschränkung der App auf ein einziges 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 zunächst ein einfaches Diagramm, um schnell zu ermitteln, wie viele APKs Sie benötigen und welchen Bildschirm Sie benötigen. Größe(n), die jedes APK abdeckt. Zum Glück können Sie Ihre Anforderungen schnell, einfach und für später leicht nachschlagen. Angenommen, Sie möchten Ihre APKs in zwei Dimensionen aufteilen, und Bildschirmgröße. Erstellen Sie eine Tabelle mit einer Zeile und Spalte für jedes mögliche Wertepaar und jede Farbe. in einigen Blobs, wobei jede Farbe für ein APK steht.
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | + | |
klein | |||||||||||
normal | |||||||||||
groß | |||||||||||
xlarge |
Oben sehen Sie ein Beispiel mit vier APKs. Blau steht für alle Geräte mit kleinem oder normalem Bildschirm, Grün für große und Rot für Geräte mit großen Bildschirmen, alle mit einem API-Bereich von 3 bis 10. Lila ist ein Sonderfall, da dies für alle Bildschirmgrößen gilt, aber nur für API 11 und höher. Und was noch wichtiger ist: Wenn Sie einen Blick auf dieses Diagramm werfen, wissen Sie sofort, welches APK eine bestimmte Kombination aus API und Bildschirmgröße abdeckt. Bis gibt es auch mondäne Codenamen für jeden, denn "Haben wir schon Rot auf dem ?" ist viel einfacher zu fragen, als "Haben wir das 3-to-10 xlarge APK mit dem Xoom getestet?" Drucken und es an alle Personen übergeben, die an Ihrer Codebasis arbeiten. Das Leben ist jetzt noch einfacher.
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-purple 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 erhält die höchste Versionsnummer den Zuschlag.
Nehmen wir beispielsweise die zuvor beschriebenen APKs und gehen wir davon aus, dass jedes APK unterstützt alle Bildschirmgrößen, die größer als sein "Ziel" sind Bildschirmgröße. Sehen wir uns das Beispieldiagramm von vorhin:
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | + | |
klein | |||||||||||
normal | |||||||||||
groß | |||||||||||
xlarge |
Da es in Ordnung ist, wenn sich die Abdeckung überschneidet, können wir den von den einzelnen APKs abgedeckten Bereich folgendermaßen beschreiben: Also:
- Blau deckt alle Bildschirme ab, minSDK 3.
- Grün steht für große Bildschirme und höher, minSDK 3.
- XLarge-Bildschirme (in der Regel Tablets) sind rot markiert, minSDK 9.
- Lila deckt alle Bildschirme ab, minSDK von 11.
Beachten Sie, dass es viele Überschneidungen zwischen diesen Regeln gibt. Beispiel: Bei XLarge-Geräten mit API 11 kann auch jedes der 4 angegebenen APKs ausgeführt werden. Wenn jedoch die „höchste Versionsnummer gewinnt“ können wir eine Reihenfolge wie folgt:
Lila ≥ Rot ≥ Grün ≥ Blau
Warum alle Überschneidungen zulassen? Nehmen wir an, das lila APK muss eine Anforderung erfüllen, die anderen beiden nicht. Die Seite Filter bei Google Play des Android-Entwicklerhandbuchs enthält eine vollständige Liste der möglichen Fehler. Als Beispiel nehmen wir an, dass für Lila eine Frontkamera erforderlich ist. Der Sinn von Lila ist es sogar, Unterhaltsame Dinge mit der Frontkamera nutzen Es stellte sich jedoch heraus, dass nicht alle Geräte mit sogar Frontkameras! Das Grauen!
Wenn ein Nutzer Google Play auf einem solchen Gerät aufruft, die Frontkamera als Anforderung auflistet, und ignoriere sie ganz leise. dass Lila und das Gerät nicht zu einem digitalen Himmel gehören. Es wird dann dass Rot nicht nur mit XXL-Geräten kompatibel ist, sondern dass es auch egal ist, Es gibt eine Frontkamera! Die App kann weiterhin vom Nutzer bei Google Play heruntergeladen werden. denn trotz des Fehlers bei der Frontkamera gab es ein APK, das genau diese API-Level.
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. Es ist lohnenswert, den gesamten Abschnitt zu lesen. Der grundlegende Kern gilt jedoch für diese Reihe von APKs verwenden wir zwei Ziffern für das minSDK, zwei für die minimale bzw. maximale Bildschirmgröße und 3 um die Build-Nummer darzustellen. Wenn das Gerät auf eine neue Android-Version aktualisiert wurde, (z. B. 10 bis 11), alle APKs, die jetzt aktiv und gegenüber dem derzeit installierten APK bevorzugt werden vom Gerät als „Upgrade“ angesehen wird. Das Schema für die Versionsnummer, wenn es auf das Beispiel angewendet wird wie folgt aussehen kann:
Blau: 0304001, 0304002, 0304003...
Grün: 0334001, 0334002, 0334003
Rot: 0344001, 0344002, 0344003...
Lila: 1104001, 1104002, 1104003...
Zusammengenommen würden Ihre Android-Manifeste wahrscheinlich so aussehen wie die Folgendes:
Blau:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="0304001" android:versionName="1.0" package="com.example.foo"> <uses-sdk android:minSdkVersion="3" /> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" /> ...
Grün:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="0334001" android:versionName="1.0" package="com.example.foo"> <uses-sdk android:minSdkVersion="3" /> <supports-screens android:smallScreens="false" android:normalScreens="false" android:largeScreens="true" android:xlargeScreens="true" /> ...
Rot:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="0344001" android:versionName="1.0" package="com.example.foo"> <uses-sdk android:minSdkVersion="3" /> <supports-screens android:smallScreens="false" android:normalScreens="false" android:largeScreens="false" android:xlargeScreens="true" /> ...
Lila:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1104001" android:versionName="1.0" package="com.example.foo"> <uses-sdk android:minSdkVersion="11" /> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" /> ...
Technisch gesehen funktionieren mehrere APK-Dateien entweder mit dem Tag "support-screens" oder mit dem kompatible Bildschirm-Tags. Unterstützt Bildschirme werden im Allgemeinen bevorzugt und es ist ein wirklich schlechter die Idee, beides zu verwenden. Dies macht die Dinge unnötig kompliziert und erhöht die Wahrscheinlichkeit von Fehlern. Beachten Sie außerdem, dass statt der Standardwerte (klein und normal sind immer wahre Werte) zu verwenden. wird der Wert für jede Bildschirmgröße in den Manifesten explizit festgelegt. Dadurch können Sie Kopfzerbrechen - zum Beispiel ein Manifest mit einem SDK von < 9 haben eine sehr große Größe automatisch auf „false“ gesetzt, da diese Größe noch nicht vorhanden war. Seien Sie also ausdrücklich!
Checkliste vor der Veröffentlichung ansehen
Überprüfen Sie die folgenden Punkte, bevor Sie sie bei Google Play hochladen. Denken Sie daran, dass diese die für mehrere APKs relevant sind und keinesfalls eine vollständige Checkliste für alle Apps, 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 ein höheren Versionscode.
- Für jede Bildschirmgröße, die von deinem APK unterstützt werden soll, musst du im Manifest „true“ festlegen. Für jede Bildschirmgröße nicht auf "false" setzen.
- Überprüfe deine Manifestfilter auf widersprüchliche Informationen (ein APK, das nur wird der Cupcake auf XLARGE-Bildschirmen nicht von niemandem gesehen werden.)
- Jedes APK-Manifest muss für mindestens einen unterstützten Bildschirm, eine OpenGL-Textur oder Plattformversion.
- Testen Sie jedes APK auf mindestens einem Gerät. Davon abgesehen haben Sie eine der anpassbare Geräteemulatoren im Unternehmen auf deinem Entwicklungscomputer. 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: '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 sind auf den meisten, wenn nicht sogar auf allen Geräten unsichtbar.
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 den meisten (wenn nicht sogar bei allen) großen Geräten um Tablets handelt, die keine Telefoniehardware enthalten, filtert Google Play dieses APK in diesen Fällen heraus, bis zukünftige Geräte verfügbar sind, die beide groß genug sind, um eine Meldung über eine große Bildschirmgröße zu erstellen und über Telefoniehardware zu 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, die Sie möglicherweise haben, um sicherzustellen, dass die APKs auf die gewünschten Geräte ausgerichtet sind. Herzlichen Glückwunsch, Sie haben es geschafft!