Tworzenie wielu plików APK dla różnych tekstur GL

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, warto Ważne jest, by od samego początku stosować sprawdzone metody, aby uniknąć niepotrzebnych problemów. w proces programowania. Z tej lekcji dowiesz się, jak utworzyć wiele plików APK aplikacji, z których każdy który obsługuje inny podzbiór formatów tekstur OpenGL. 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

Kiedy próbujesz utworzyć aplikację działającą na wszystkich dostępnych dla systemu Android urządzeń, zależy Ci, aby aplikacja prezentowała się jak najlepiej na każdym urządzeniu, niezależnie od Fakt, że nie wszystkie obsługują ten sam zestaw tekstur GL. Na początku może się wydawać, że najlepszym rozwiązaniem jest obsługa wielu plików APK, 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, w tym sposobu wykrywania obsługiwanej tekstury w czasie działania. W zależności od sytuacji łatwiej jest połączyć wszystkie formaty w konkretnej aplikacji i po prostu wybierz tę, która ma być używana w czasie działania.

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

W Przewodniku dla programistów aplikacji na Androida znajdziesz przydatne informacje na temat niektórych często obsługiwanych tekstur, tekst supports-gl-texture . Strona ta zawiera również wskazówki dotyczące obsługiwanych telefonów (lub ich rodzin) określonych formatów tekstur. Zasadniczo warto, by jeden z pakietów APK obsługiwał ETC1, ponieważ format tekstur jest obsługiwany przez wszystkie urządzenia z systemem Android obsługujące standard OpenGL ES Specyfikacja 2.0

Większość urządzeń z Androidem obsługuje więcej niż jeden format tekstur, więc musisz utworzyć według preferencji. Utwórz wykres zawierający wszystkie formaty, które będzie stosować Twoja aplikacja . Najniższa komórka, która znajduje się skrajnie po lewej, będzie miała najniższy priorytet (prawdopodobnie będzie to ETC1, solidne domyślne pod względem wydajności i zgodności). Następnie pokoloruj wykres tak, aby każdy reprezentuje pakiet APK.

elektroniczny pobór opłat drogowych 1 ATI Moc VR

Kolorowanie na wykresie nie tylko sprawia, że przewodnik jest mniej monochromatyczny, lecz także co ułatwia komunikację wewnątrz zespołu – każdy pakiet APK możesz teraz określić jako „niebieski”, „zielony” lub „czerwony” zamiast „ten, który obsługuje formaty tekstur ETC1” itd.

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 Podczas wybierania pliku APK do użycia są pewne 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
  • Jeśli urządzenie na rynku obsługuje którykolwiek z formatów tekstur wymienionych w pakiecie APK, to urządzenie jest uznawane za odpowiednie

W przypadku tekstur GL ta ostatnia zasada jest ważna. Oznacza to, że trzeba należy bardzo zachować ostrożność przy używaniu różnych formatów GL w tej samej aplikacji. Jeśli używali PowerVR w 99% przypadków, ale ETC1 na przykład do ekranu powitalnego... Potem utwórz plik manifestu. oznaczałaby obsługę obu tych formatów. Urządzenie, które obsługiwało tylko ETC1 zostałaby uznana za zgodną, aplikacja zostałaby pobrana, a użytkownik zobaczyłby dreszczyk emocji. wiadomości. Jeśli używasz wielu plików APK przeznaczonych specjalnie do kierowania reklam, na różnych urządzeniach w zależności od obsługi tekstur GL, będzie to jeden format tekstur na plik APK.

W rzeczywistości obsługa tekstur różni się nieco od tych 2 pozostałych plików APK. wymiarów, poziomu interfejsu API i rozmiaru ekranu. Każde urządzenie ma tylko 1 poziom interfejsu API i 1 ekran. ich rozmiar i plik APK może je obsługiwać. W przypadku tekstur plik APK będzie zwykle obsługują jedną teksturę, a urządzenie obsługuje wiele. Często teoretycznie będą się pokrywać, obsługują wiele plików APK, ale rozwiązanie jest to samo: kody wersji.

Weźmy kilka urządzeń i sprawdź, ile zdefiniowanych wcześniej plików APK pasuje do każdego z nich. urządzenia.

Telefon FooPhone Nexus S Ewo
elektroniczny pobór opłat drogowych 1 elektroniczny pobór opłat drogowych 1 elektroniczny pobór opłat drogowych 1
Moc VR ATI TC

Zakładając, że formaty PowerVR i ATI są w miarę dostępności preferowane zamiast ETC1, według „wygrywa numer wersji o najwyższym numerze” po ustawieniu atrybutu „versionCode” w każdym pakiecie APK tak aby czerwony ≥ zielony ≥ niebieski, wówczas zarówno czerwony, jak i zielony będą zawsze wybierane przed niebieskim które obsługują taką technologię. Jeśli w przyszłości pojawi się urządzenie, które obsługuje zarówno czerwony, jak i zielony, kolor czerwony.

Aby mieć wszystkie pliki APK na osobnych „ścieżkach”, ważny jest dobry kod wersji oszustw. Zalecany kod znajdziesz w sekcji Kody wersji w naszym przewodniku dla programistów. Od przykładowy zestaw plików APK zajmuje się tylko jednym z trzech możliwych wymiarów, rozdzielaj każdy plik APK o 1000 i zwiększaj liczbę. Może to 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-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
    ...

Zielony:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="2001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_AMD_compressed_ATC_texture" />
    ...

Czerwony:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="3001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_IMG_texture_compression_pvrtc" />
    ...

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
  • 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 rozwiązać, dodając ten kod do pliku 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. Zanim aplikacja pojawi się w Google Play, może minąć trochę czasu, ale gdy już się pojawi, sprawdź jeszcze raz. Pobierz aplikację na urządzenia testowe, by upewnić się, że pliki APK są kierowane na odpowiednie urządzenia. Gratulacje, to już wszystko!