Tworzenie wielu pakietów APK na urządzenia o różnych rozmiarach ekranu

Jeśli publikujesz aplikację w Google Play, musisz utworzyć i przesłać plik Android App Bundle Gdy to zrobisz, Google Play automatycznie generuje i udostępnia zoptymalizowane pliki APK dla konfiguracji urządzenia każdego użytkownika, a potem pobiera tylko kod i zasoby potrzebne do uruchomienia aplikacji. Publikowanie wielu plików APK przydaje się, jeśli: nie możesz publikować w Google Play, ale musisz samodzielnie utworzyć i podpisać każdy plik APK oraz nim zarządzać.

Tworząc aplikację na Androida, która korzysta z wielu plików APK w Google Play, Ważne jest, by stosować kilka sprawdzonych metod od samego początku, aby uniknąć niepotrzebnych problemów na dalszy rozwój procesu programowania. Z tej lekcji dowiesz się, jak utworzyć wiele plików APK i obsługiwać różne rozmiary ekranów w aplikacjach. Zyskasz też dostęp do narzędzi, które pomogą Ci jak najłatwiej zarządzać bazą kodu z wielu plików APK.

Potwierdź, że potrzebujesz wielu plików APK

Jeśli chcesz stworzyć aplikację, która działa na różnych urządzeniach z Androidem, Chcesz, żeby aplikacja wykorzystała całą dostępną przestrzeń na większych urządzeniach, bez negatywnego wpływu na zgodność i łatwość obsługi na mniejszych ekranach. Na początku może się wydawać, że: chociaż obsługa wielu plików APK to najlepsze rozwiązanie, ale często nie jest to prawdą. Korzystanie z pojedynczego pliku APK Zamiast tego w przewodniku dla programistów korzystających z wielu plików APK znajdziesz informacje o tym, aby to zrobić, korzystając z pojedynczego pakietu APK, również z naszej biblioteki pomocy. Przeczytaj też przewodnik po obsłudze wielu ekranów, a także bibliotekę pomocy, za pomocą Android SDK, który pozwala na użycie fragmentów na urządzeniach sprzed Honeycomb (umożliwia obsługę wielu urządzeń w jednym pliku APK).

Jeśli możesz sobie z tym poradzić, ograniczenie aplikacji do jednego pliku APK ma wiele zalet: w tym:

  • Publikowanie i testowanie są łatwiejsze
  • Trzeba utrzymywać tylko jedną bazę kodu
  • Aplikacja może dostosowywać się do zmian w konfiguracji urządzenia
  • Przywracanie aplikacji na różnych urządzeniach po prostu działa
  • Nie musisz martwić się o preferencje rynkowe ani działanie związane z uaktualnieniami. z jednego pakietu APK do Następnie lub z jakiej klasy urządzeń korzysta się z pakietu APK

W pozostałej części tej lekcji zakładamy, że udało Ci się dokładnie przyswoić ten temat materiałów w powiązanych zasobach i ustalić, że odpowiednią ścieżką dla pliku APK jest kilka plików APK aplikacji.

Przedstaw swoje wymagania

Zacznij od utworzenia prostego wykresu, by szybko określić, ile plików APK potrzebujesz i na jakim ekranie. rozmiary poszczególnych plików APK. Na szczęście możesz szybko i łatwo określić swoje wymagania, i zachęcam do skorzystania z nich później. Zacznij od wiersza z komórkami reprezentującymi różne rozmiary ekranu. dostępne na platformie Android.

mały normalna duży bardzo duża

Teraz po prostu pokoloruj wykres, tak aby każdy kolor odpowiadał jednemu plikowi APK. Oto przykład, może zastosować każdy plik APK na urządzeniach o określonych rozmiarach ekranów.

mały normalna duży bardzo duża

W zależności od potrzeb możesz mieć również dwa pakiety APK: „mały i wszystko inne”. lub „xlarge i wszystko inne”. Kolorowanie na wykresie ułatwia też komunikację wewnątrz zespołu. Teraz po prostu oznaczaj każdy plik APK jako „niebieski”, „zielony” lub „czerwony”, niezależnie od tego, ile różnych typów ekranów i obejmuje.

Umieść cały wspólny kod i zasoby w projekcie biblioteki

Niezależnie od tego, czy modyfikujesz istniejącą aplikację na Androida, czy tworzysz ją od zera, pierwszą rzeczą, którą należy zrobić w przypadku bazy kodu, i zdecydowanie najważniejszą. Wszystko trafiające do projektu bibliotecznego można zaktualizować tylko raz (np. zlokalizowane na różne języki ciągi, motywy kolorystyczne i naprawione błędy we wspólnym kodzie), co pozwala skrócić czas programowania i pomyłki, których można łatwo uniknąć.

Uwaga: chociaż szczegóły implementacji dotyczące tworzenia uwzględnianie projektów z biblioteki wykraczających poza zakres tej lekcji, Przeczytaj artykuł Tworzenie biblioteki Androida.

Jeśli konwertujesz istniejącą aplikację tak, aby obsługiwała wiele plików APK, przeszukaj bazę kodu pod kątem każdego zlokalizowanego pliku z ciągami znaków, listy wartości, motywu kolorów, ikon menu i układu, które nie zmienią się w plikach APK. w projekcie bibliotecznym. Kod, który nie ulegnie znaczącej zmianie, powinien w projekcie bibliotecznym. Być może rozszerzysz te klas, by dodać metodę (lub dwie) z pliku APK do pliku APK.

Jeśli natomiast tworzysz aplikację od zera, spróbuj użyć metody aby napisać kod w projekcie biblioteki, najpierw, a potem przenieść go tylko poszczególnych plików APK. Na dłuższą metę o wiele łatwiej nią zarządzać, potem kolejny, potem kolejny, kilka miesięcy później próbując ustalić, czy ten blob można przenieść w górę do biblioteki, nie odkręcając czegoś.

Tworzenie nowych projektów APK

Do każdego pliku APK, który zamierzasz opublikować, powinien istnieć oddzielny projekt na Androida. Łatwe należy umieścić projekt biblioteki i wszystkie powiązane z nim projekty APK w tym samym folderze nadrzędnym. Pamiętaj też, że każdy plik APK musi mieć tę samą nazwę pakietu, choć nie zawsze musisz udostępnić bibliotekę nazwy pakietu. Jeśli masz 3 pliki APK zgodne ze schematem Twój katalog główny może wyglądać tak:

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

Po utworzeniu projektów dodaj projekt z biblioteki jako odwołanie do każdego projektu APK. Jeśli określ aktywność początkową w projekcie biblioteki i rozszerzaj ją w pakiecie APK w projektach AI. Ustalenie działania początkowe w projekcie bibliotecznym pozwala umieścić wszystkie inicjowanie aplikacji w jednym miejscu, dzięki czemu nie trzeba ponowne wdrożenie „uniwersalnego” m.in. inicjowanie Analytics, sprawdzanie licencji procedury inicjowania, które nie zmieniają się znacząco między APK.

Dostosuj pliki manifestu

Jeśli użytkownik pobiera z Google Play aplikację, która korzysta z wielu plików APK, poprawny parametr Przy wyborze pliku APK do użycia są 2 proste reguły:

  • Plik manifestu musi pokazywać, że dany plik APK spełnia wymagania
  • Spośród kwalifikujących się plików APK wygrywa największy numer wersji

Dla przykładu przyjmijmy kilka omówionych wcześniej pakietów APK. została skonfigurowana tak, aby obsługiwała wszystkie rozmiary ekranów większe niż „docelowy” rozmiaru ekranu. Wykonywane osobno, możliwy zakres każdego pliku APK będzie wyglądał tak:

mały normalna duży bardzo duża
mały normalna duży bardzo duża
mały normalna duży bardzo duża

Jednak przy użyciu „najwyższego numeru wersji wygrywa” jeśli ustawisz atrybut versionCode w w takim przypadku, aby każdy plik APK był czerwony ≥ zielony ≥ niebieski, wykres zwija się w taki sposób:

mały normalna duży bardzo duża

Przyjmijmy teraz, że czerwony pakiet APK ma pewne wymagania, których nie spełniają pozostałe 2 opcje. Strona Filtry w Google Play na urządzeniu z Androidem Przewodnik dla programistów zawiera pełną listę możliwych sprawców. Załóżmy na przykład, że czerwony wymaga aparatu z przodu. Głównym celem czerwonego pakietu APK jest wykorzystanie dodatkowych i masz dość miejsca na ekranie, by robić ciekawe rzeczy z przednim aparatem. Okazuje się jednak, nie wszystkie duże urządzenia mają przednie aparaty! Horror!

Na szczęście, jeśli użytkownik przegląda Google Play na takim urządzeniu, pliku manifestu, czerwony wymieniony jest przedni aparat jako wymóg i dyskretnie go zignoruj, stwierdził, że Red z tym urządzeniem nie pasuje do cyfrowego nieba. Następnie zobaczy, że Zielony jest nie tylko kompatybilny z bardzo dużymi urządzeniami, ale też nie ma znaczenia, czy jest dostępny przednim aparatem. Użytkownik nadal może pobrać tę aplikację z Google Play, ponieważ Pomimo katastrofy przedniego aparatu wciąż był dostępny plik APK, który obsługiwał ten konkretny ekran. rozmiaru.

Aby wszystkie pliki APK mieć oddzielne „ścieżki”, ważne jest, by stworzyć dobry kod wersji oszustw. Zalecany kod znajdziesz w sekcji Kody wersji w naszym przewodniku dla programistów. Przykładowy zestaw plików APK obsługuje tylko jedną z trzech możliwych wymiarów, wystarczy oddzielić każdy plik APK o 1000 i od tej liczby zwiększać liczbę. Ten może wyglądać tak:

Niebieski: 1001, 1002, 1003, 1004...
Zielony: 2001, 2002, 2003, 2004...
Czerwony:3001, 3002, 3003, 3004...

Po połączeniu wszystkich plików manifestu Androida pliki manifestu będą wyglądały mniej więcej tak: :

Niebieski:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true" />
    ...

Zielony:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="2001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="false"
        android:normalScreens="false"
        android:largeScreens="true"
        android:xlargeScreens="true" />
    ...

Czerwony:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="3001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="false"
        android:normalScreens="false"
        android:largeScreens="false"
        android:xlargeScreens="true" />
    ...

Technicznie rzecz biorąc, wiele plików APK będzie działać na każdym z obsługiwanych ekranów. lub „kompatybilne ekrany”. Ogólnie zalecamy, aby można było oglądać ekrany, Używanie obu tych tagów w tym samym pliku manifestu zwykle jest złym pomysłem. it niepotrzebnie komplikują proces i zwiększają ryzyko popełnienia błędów. Należy również pamiętać, że zamiast korzystać z wartości domyślnych (małych i wartości normalne mają zawsze wartość prawda), pliki manifestu wyraźnie określają wartość każdego rozmiaru ekranu. Pozwoli Ci to uniknąć problemów. Na przykład plik manifestu z docelowy pakiet SDK dla wersji < 9 automatycznie ustawi wartość xlarge na false, ponieważ taki rozmiar jeszcze nie istniał. Pisz dosłownie!

Przejrzyj listę kontrolną przed opublikowaniem

Zanim prześlesz pliki do Google Play, dokładnie sprawdź te elementy. Pamiętaj, że są to w odniesieniu do wielu plików APK i w żaden sposób nie stanowią pełnej listy kontrolnej dla wszystkich przesyłanych do Google Play.

  • Wszystkie pliki APK muszą mieć tę samą nazwę pakietu
  • Wszystkie pliki APK muszą być podpisane tym samym certyfikatem
  • Dla każdego rozmiaru ekranu, który ma obsługiwać plik APK, w pliku manifestu ustaw wartość „true”. Każdy rozmiar ekranu ma unikać, ustaw wartość false (fałsz)
  • Dokładnie sprawdź filtry manifestu pod kątem sprzecznych informacji (plik APK, który obsługuje tylko babeczki na ekranach XLARGE nikt nie zobaczy)
  • Każdy plik manifestu musi być unikalny w obrębie co najmniej jednego obsługiwanego ekranu, tekstury openGL lub wersja platformy
  • Spróbuj przetestować każdy pakiet APK na co najmniej 1 urządzeniu. Oprócz tego jest to jedna z najciekawszych i konfigurowalnych emulatorów urządzeń na komputerze. Zaszalej!

Warto też sprawdzić skompilowany plik APK przed jego wprowadzeniem na rynek, by mieć pewność, że nie zawiera żadnych niespodzianki, które mogą spowodować ukrycie aplikacji w Google Play. To całkiem proste – „aapt” . Aapt (narzędzie Android Asset Packaging) jest częścią procesu tworzenia aplikacji do systemu Android i jest bardzo przydatnym narzędziem do ich sprawdzania.

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

Analizując dane wyjściowe narzędzia aapt, upewnij się, że nie występują sprzeczne wartości dla obsługuje ekrany i zgodne ekrany oraz upewnij się, że nie ma w nich niezamierzonego parametru „uses-feature”. wartości dodane w wyniku uprawnień ustawionych w pliku manifestu. W przykładzie powyżej plik APK będzie niewidoczny dla większości urządzeń, a nawet wszystkich.

Dlaczego? Dodanie wymaganych uprawnień SEND_SMS sprawiło, że domyślnie dodaliśmy wymagania dotyczące funkcji android.hardware.telephony. Większość (jeśli nie wszystkie) bardzo duże urządzenia to tablety bez sprzętu telefonicznego, dlatego Google Play będzie odfiltrowywać ten plik APK w takich przypadkach, dopóki nie pojawią się nowe urządzenia, które będą na tyle duże, by mogły służyć do raportowania jako bardzo duże ekrany, i będą wyposażone w sprzęt telefoniczny.

Na szczęście ten problem można łatwo naprawić, dodając do swojego konta: plik manifestu:

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

Bezpośrednio dodaliśmy też wymaganie android.hardware.touchscreen. Jeśli chcesz, aby Twój pakiet APK był widoczny na telewizorach, które nie mają ekranu dotykowego, do pliku manifestu dodaj te elementy:

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

Po wykonaniu czynności z listy kontrolnej przed opublikowaniem prześlij pliki APK do Google Play. Może minąć trochę czasu, zanim aplikacja pojawi się w trakcie przeglądania Google Play, ale gdy już się pojawi, przeprowadź jeszcze jedną weryfikację. Pobierz aplikację na wszystkie urządzenia testowe, że pliki APK są kierowane na odpowiednie urządzenia.

Aby dowiedzieć się więcej o publikowaniu w Google Play wielu plików APK, przeczytaj Obsługa wielu plików APK.