În august 2021, Google a luat o decizie care a schimbat fundamental modul în care sunt distribuite aplicațiile Android: toate aplicațiile noi trimise la Magazinul Google Play trebuie să utilizeze formatul Android App Bundle (AAB) în loc de APK-ul tradițional. Această schimbare a afectat dezvoltatorii, utilizatorii și întregul ecosistem de distribuție a aplicațiilor terță parte. Dar ce este exact un App Bundle, cum funcționează și de ce ar trebui să-ți pese?
Acest ghid acoperă totul, de la elementele tehnice interne ale formatului AAB până la implicațiile practice pentru utilizatorii care doresc să partajeze aplicații cu prietenii sau să le instaleze pe dispozitive fără acces la Play Store.
Ce este un Android App Bundle?
Un Android App Bundle este un format de publicare care conține tot codul și resursele compilate ale unei aplicații, dar amână generarea APK-ului final instalabil către Google Play. Gândiți-vă la el ca la un șablon principal din care serverele Google creează pe loc pachete optimizate, specifice fiecărui dispozitiv.
Spre deosebire de un APK, care este un pachet gata de instalare, un fișier AAB nu poate fi instalat direct pe un dispozitiv. Este un artefact de construcție care este încărcat în Magazinul Play, unde infrastructura Google îl procesează și generează APK-uri personalizate pentru fiecare configurație de dispozitiv.
Extensia de fișier este .aab și, în interior, folosește un format tampon de protocol combinat cu o structură de tip ZIP. Conține codul de octeți DEX al aplicației, resurse, materiale, biblioteci native și un fișier special de metadate care îi spune Google Play cum să împartă conținutul.
De ce pachetele de aplicații obligatorii de Google
Motivația principală din spatele pachetelor de aplicații este reducerea dimensiunilor de descărcare a aplicațiilor. O aplicație Android tipică trebuie să accepte mai multe densități de ecran (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi), mai multe arhitecturi CPU (armeabi-v7a, arm64-v8a, x86, x86_64) și mai multe limbi. În modelul APK tradițional, toate aceste resurse sunt grupate într-un singur fișier, chiar dacă orice dispozitiv are nevoie doar de o fracțiune din ele.
Luați în considerare un joc care include biblioteci native pentru patru arhitecturi CPU și texturi pentru cinci densități de ecran. APK-ul universal ar putea fi de 200 MB, dar o versiune specifică dispozitivului care conține doar arhitectura și densitatea relevante ar putea fi de 80 MB. Aceasta este o reducere cu 60% a dimensiunii de descărcare.
Google raportează că aplicațiile care utilizează App Bundle sunt în medie cu 15% mai mici decât echivalentele lor universale APK. Pentru aplicațiile și jocurile mari, economiile pot fi mult mai dramatice. Descărcări mai mici înseamnă instalări mai rapide, consum mai mic de lățime de bandă și mai puține instalări abandonate din cauza problemelor legate de dimensiune.
Cum funcționează intern pachetele de aplicații
Structura pachetului
Un fișier AAB este organizat în module, fiecare modul conținând propriul cod, resurse și fișiere media. Cea mai comună structură include:
- Modul de bază: Conține codul principal al aplicației și resursele de care are nevoie fiecare dispozitiv. Acesta este întotdeauna instalat.
- Configurație împărțită: Secțiuni separate pentru resurse de limbă, resurse de densitate a ecranului și biblioteci native ABI (arhitectură CPU).
- Module de caracteristici dinamice: Module opționale care pot fi descărcate la cerere după instalarea inițială.
- Pachete de active: Active mari, cum ar fi nivelurile de joc sau media, care pot fi livrate la momentul instalării, la cerere sau în fundal.
Împărțiți generația APK
Când un utilizator descarcă o aplicație din Magazinul Play, serverele Google examinează configurația dispozitivului și generează un set de APK-uri împărțite adaptate dispozitivului respectiv. O instalare tipică poate include:
- base.apk, Codul principal al aplicației și resursele esențiale
- split_config.arm64_v8a.apk, biblioteci native pentru procesorul dispozitivului
- split_config.xxhdpi.apk, Resurse pentru densitatea ecranului dispozitivului
- split_config.en.apk, Resurse lingvistice pentru localitatea utilizatorului
Aceste APK-uri divizate sunt instalate împreună ca o singură aplicație logică. Managerul de pachete Android le tratează ca o singură aplicație, dar sunt fișiere separate fizic pe dispozitiv. Acesta este mecanismul care permite reducerea dimensiunii.
Livrare dinamică
Una dintre cele mai puternice caracteristici ale App Bundle-urilor este livrarea dinamică. Dezvoltatorii pot marca anumite funcții ca fiind descărcabile la cerere. De exemplu, o aplicație de editare a fotografiilor poate include filtre avansate ca modul de caracteristici dinamice. Utilizatorii care nu folosesc niciodată acele filtre nu le descarcă niciodată, economisind spațiu de stocare.
Modulele de funcționalități dinamice sunt descărcate și instalate prin intermediul bibliotecii Play Core în timpul rulării. Aplicația poate verifica dacă un modul este instalat și poate solicita descărcarea acestuia atunci când este necesar, astfel încât utilizatorul să experimenteze noua funcționalitate ca o mică descărcare în aplicație, mai degrabă decât o reinstalare completă.
AAB vs APK: diferențe cheie
Înțelegerea diferențelor dintre aceste formate ajută la clarificarea când fiecare este adecvat:
- Fișierele APK Instalabilitate: pot fi instalate direct pe orice dispozitiv Android. Fișierele AAB nu pot fi instalate direct și trebuie procesate mai întâi.
- Dimensiune: Un APK universal conține resurse pentru toate configurațiile. Un AAB permite livrarea specifică dispozitivului, rezultând descărcări mai mici.
- Semnare: Cu APK-uri, dezvoltatorul semnează pachetul final instalabil. Cu AAB, dezvoltatorul semnează pachetul, iar Google resemnează APK-urile generate folosind Play App Signing.
- Distributie: APK-urile pot fi distribuite prin orice canal. AAB-urile sunt concepute în principal pentru Magazinul Play, deși instrumente precum bundletool pot genera APK-uri din acestea la nivel local.
- Partajare: Puteți partaja cu ușurință un fișier APK cu o altă persoană. Partajarea unei aplicații instalate dintr-un AAB necesită colectarea tuturor APK-urilor divizate, ceea ce este mai complex.
Controversa de semnare
Unul dintre cele mai dezbătute aspecte ale mandatului AAB este Semnarea aplicației Play. Când un dezvoltator încarcă un AAB, Google deține cheia de semnare folosită pentru a semna APK-urile finale livrate utilizatorilor. Aceasta înseamnă că Google are din punct de vedere tehnic capacitatea de a modifica conținutul APK-ului înainte de a-l semna și de a-l livra.
Google susține că acest lucru este necesar, deoarece trebuie să semneze APK-urile divizate pe care le generează. Dezvoltatorii păstrează o cheie de încărcare pentru a-și autentifica încărcările, dar cheia reală de semnare a aplicației este gestionată de infrastructura Google.
Pentru majoritatea dezvoltatorilor, acesta este un compromis rezonabil. Google oferă servicii de backup și recuperare a cheilor, iar riscul pierderii cheilor (care ar împiedica permanent actualizările aplicațiilor) este eliminat. Cu toate acestea, dezvoltatorii axați pe confidențialitate și susținătorii open-source și-au exprimat îngrijorarea cu privire la această centralizare a încrederii.
Ce înseamnă asta pentru utilizatorii care partajează aplicații
Trecerea la App Bundle are implicații semnificative pentru utilizatorii care doresc să partajeze aplicații în afara Magazinului Play:
Extragerea aplicațiilor instalate
Când extrageți o aplicație instalată dintr-un AAB, nu obțineți un singur fișier APK. În schimb, obțineți o colecție de APK-uri divizate. Aceste împărțiri sunt specifice dispozitivului, ceea ce înseamnă că o aplicație extrasă dintr-un telefon cu un procesor ARM64 și ecran xxhdpi nu va funcționa pe un dispozitiv cu o configurație diferită.
Formate XAPK și APK
Pentru a face față provocării de a partaja fișiere APK divizate, au fost create formate de container precum XAPK și APK. Aceste formate reunesc toate APK-urile împărțite într-un singur fișier descărcabil. Când întâlniți un fișier XAPK, acesta conține probabil o aplicație care a fost distribuită inițial ca App Bundle.
Convertor XAPKS în APK vă poate ajuta să extrageți APK-ul de bază din aceste formate de containere. Cu toate acestea, rețineți că numai APK-ul de bază poate să nu conțină toate resursele necesare pentru ca aplicația să funcționeze corect pe fiecare dispozitiv, deoarece densitatea și resursele specifice ABI pot fi în APK-urile divizate.
Folosind bundletool
Google oferă un instrument open-source numit bundletool care poate genera APK-uri dintr-un fișier AAB la nivel local. Dezvoltatorii pot folosi acest lucru pentru a crea APK-uri universale pentru testare sau distribuție alternativă. Comanda arată astfel:
bundletool build-apks --bundle=app.aab --output=app.apks --mode=universal
Acest lucru generează un APK universal care conține toate resursele pentru toate configurațiile. Va fi mai mare decât o versiune specifică dispozitivului, dar funcționează pe orice dispozitiv. Aceasta este abordarea folosită de Convertor AAB în APK.
Impact asupra magazinelor de aplicații alternative
Mandatul AAB afectează în primul rând Magazinul Google Play. Magazinele de aplicații alternative și canalele de distribuție directe pot accepta în continuare fișiere APK. Dezvoltatorii care doresc să distribuie în afara Play pot continua să creeze APK-uri universale împreună cu încărcările lor AAB.
Cu toate acestea, unii dezvoltatori construiesc doar AAB-uri și se bazează în întregime pe Play pentru distribuție. Aceasta înseamnă că aplicațiile de la acești dezvoltatori sunt mai greu de obținut în afara ecosistemului Play Store. Arhivele de aplicații terță parte s-au adaptat fie prin găzduirea colecțiilor APK împărțite (sub formă de fișiere XAPK sau APK), fie prin utilizarea bundletool pentru a genera APK-uri universale.
Module de caracteristici dinamice în practică
Modulele de caracteristici dinamice reprezintă una dintre cele mai interesante capabilități ale formatului App Bundle. Iată câteva cazuri de utilizare în lumea reală:
- Caracteristicile camerei: O aplicație poate include filtre AR ca modul dinamic, descărcat numai atunci când utilizatorul accesează prima dată caracteristica camerei.
- Pachete de limbi: Datele de traducere pentru limbi mai puțin uzuale pot fi livrate la cerere, mai degrabă decât incluse la fiecare instalare.
- Jocurile Niveluri de joc: pot oferi conținut suplimentar pe măsură ce jucătorii progresează, păstrând descărcarea inițială redusă.
- Instrumente profesionale: Funcțiile avansate din aplicațiile de productivitate pot fi furnizate numai utilizatorilor care au nevoie de ele.
Pentru utilizatori, aceasta înseamnă că dimensiunea instalată a unei aplicații poate crește în timp pe măsură ce modulele dinamice sunt descărcate. De asemenea, înseamnă că partajarea unei astfel de aplicații necesită includerea tuturor modulelor descărcate, complicând și mai mult procesul de extracție.
Cele mai bune practici pentru dezvoltatori
Dacă dezvoltați aplicații Android, iată recomandări pentru a lucra eficient cu App Bundle:
- Testați întotdeauna cu bundletool local înainte de a încărca în Play. Generați APK-uri specifice dispozitivului și verificați că funcționează corect.
- Utilizați pista de testare internă a Play Console pentru a verifica dacă APK-urile divizate se instalează și funcționează corect pe dispozitivele reale.
- Luați în considerare furnizarea unui APK universal pentru canale de distribuție alternative dacă baza dvs. de utilizatori se extinde dincolo de Magazinul Play.
- Fiți atenți la limitele modulului de caracteristici dinamice. Caracteristicile care sunt utilizate frecvent ar trebui să fie în modulul de bază, nu modulele dinamice.
- Testați pe dispozitive cu diferite configurații pentru a vă asigura că împărțirile de configurare sunt generate corect și că nu lipsesc resurse.
- Păstrați cheia de încărcare în siguranță. În timp ce Google gestionează cheia de semnare a aplicației, cheia de încărcare vă autentifică identitatea ca dezvoltator.
Viitorul distribuției de aplicații
Formatul App Bundle continuă să evolueze. Google a introdus funcții precum Play Asset Delivery pentru activele de jocuri mari, SDK Runtime pentru SDK-uri publicitare și suport îmbunătățit pentru configurațiile Wear OS și Android TV. Tendința este către livrarea mai granulară, la cerere, a componentelor aplicației.
Pentru utilizatori, aceasta înseamnă că ideea unui singur fișier de aplicație autonom devine din ce în ce mai rară pentru aplicațiile din Magazinul Play. Înțelegerea formatelor precum XAPK, APK și a instrumentelor disponibile pentru a lucra cu acestea devine din ce în ce mai importantă pentru oricine gestionează aplicații în afara fluxului standard Play Store.
Când să păstrați un AAB vs. Când să creați un APK universal
Android App Bundle reprezintă o schimbare fundamentală în modul în care aplicațiile sunt împachetate și livrate. Deși aduce beneficii reale în ceea ce privește dimensiunea descărcării și eficiența livrării, introduce și complexitate pentru utilizatorii care partajează aplicații sau le instalează din surse alternative. Înțelegerea modului în care funcționează AAB-urile, cum generează APK-uri divizate și ce instrumente sunt disponibile pentru conversia între formate vă oferă ceea ce aveți nevoie pentru a alege formatul potrivit și a converti cu încredere între ele.
Dezvoltatorii apelează la AAB pentru a optimiza modul în care este livrată o aplicație; majoritatea utilizatorilor obișnuiți îl întâlnesc doar atunci când încearcă să instaleze ceva pe un dispozitiv fără acces la Magazinul Play. Oricum ar fi, lucrul care merită reținut este simplu: AAB este un format de publicare, nu un format de instalare și există instrumente care reduc diferența dintre cele două.