Înțelegerea arhitecturii CPU Android (ABI): de ce contează arm64-v8a, armeabi-v7a și x86

Diagram showing one app bundle splitting into arm64-v8a, armeabi-v7a, and x86 architecture-specific APKs

Dacă ați îmbinat vreodată un set de fișiere APK împărțite și ați văzut telefonul aruncând înapoi „Aplicația nu este instalată” sau, mai rău, ați văzut cum se instalează bine doar pentru a se bloca în momentul în care ați apăsat pictograma, există o șansă decentă ca problema reală să nu aibă nicio legătură cu o descărcare coruptă. A fost aproape sigur despre arhitectură: o nepotrivire între procesorul pe care rulează telefonul tău și procesorul pentru care a fost compilat codul nativ al aplicației. Majoritatea utilizatorilor de Android nu trebuie să se gândească niciodată la asta, până în momentul în care sparge ceva în liniște și apoi devine relevant rapid. Iată ce înseamnă arhitectura CPU pentru un APK, de ce o singură aplicație din Magazinul Play se livrează în secret ca mai multe versiuni diferite ale ei și cum să verificați compatibilitatea înainte de a instala ceva.

Ce este un ABI

ABI înseamnă Application Binary Interface. În termeni practici, este setul de instrucțiuni pe care îl înțelege un cip — formatul brut de cod mașină pe care un procesor îl poate executa direct. Majoritatea unei aplicații Android, părțile scrise în Java sau Kotlin, sunt compilate în bytecode care rulează în Android Runtime (ART), iar ART nu îi pasă în mod special pe ce cip se află. Acest strat este independent de arhitectură prin design, ceea ce reprezintă o mare parte din motivul pentru care aplicațiile Android „funcționează”, în general, pe o gamă atât de largă de hardware.

Native code is a different story. O mulțime de aplicații, în special jocuri, aplicații pentru cameră, instrumente de învățare automată și orice procesare audio sau video grea, livrează biblioteci native scrise în C sau C++ prin Android NDK. Aceste biblioteci sunt compilate din timp în codul mașinii pentru un set de instrucțiuni specific, iar un cip construit pentru un set de instrucțiuni, în general, nu poate executa codul mașinii scris pentru altul. Acesta este întregul motiv pentru care ABI-urile există ca ceva demn de înțeles: în momentul în care o aplicație include chiar și o bibliotecă nativă .so, compatibilitatea acesteia devine legată de arhitecturile pentru care a fost construită biblioteca.

Arhitecturile cu care vei întâlni

Înainte era mai multă varietate în acest spațiu (vă amintiți armeabi sau MIPS?), dar până în 2026 domeniul s-a restrâns la patru ABI demne de cunoscut:

ABILățimea bițilorDispozitive tipiceNote
arm64-v8aARM pe 64 de bițiAproape fiecare telefon vândut din aproximativ 2019Ținta implicită pentru aplicații noi; Google are nevoie de suport pe 64 de biți pentru noile trimiteri în Magazinul Play de câțiva ani.
armeabi-v7aARM pe 32 de bițiDispozitive mai vechi sau bugetare, unele telefoane low-cost încă vândute pe piețele emergenteÎncă livrat de multe aplicații pentru compatibilitate cu versiunea anterioară, chiar dacă majoritatea dispozitivelor active nu mai au nevoie de el.
x86Intel pe 32 de bițiTablete vechi bazate pe Intel, emulatori vechiÎn mare parte învechit; you'll rarely encounter a real 32-bit x86 phone today.
x86_64Intel pe 64 de bițiUnele Chromebookuri, emulatoare Android desktop, câteva tablete x86Important dacă testați aplicații într-un emulator, cum ar fi un Android Studio AVD bazat pe x86 sau anumite versiuni BlueStacks.

Dacă aveți în mână un telefon cumpărat oricând în ultimii cinci sau șase ani, este aproape sigur arm64-v8a. Excepțiile care merită reținute sunt emulatoarele și Chromebook-urile, care rulează frecvent pe x86_64, deoarece se potrivește cu laptopul sau procesorul desktop.

De ce aplicațiile deranjează să trimită mai multe versiuni

O întrebare evidentă este de ce dezvoltatorii nu includ pur și simplu bibliotecile native ale fiecărei arhitecturi într-un singur APK pentru a rezolva totul. Unele aplicații fac exact acest lucru, iar rezultatul se numește APK universal sau „fat”. Dezavantajul este dimensiunea. Un joc cu biblioteci native pentru arm64-v8a, armeabi-v7a, x86 și x86_64, toate combinate, se poate dubla sau tripla cu ușurință dimensiunea în comparație cu o versiune care conține doar arhitectura de care are nevoie dispozitivul dvs. Înmulțiți asta în milioane de instalări și vă uitați la o cantitate cu adevărat semnificativă de lățime de bandă și stocare irosită, pentru un cod care nu va rula niciodată pe acel dispozitiv.

Pentru a evita această risipă, Google Play și formatul Android App Bundle au împărțit o aplicație într-un APK de bază mic plus o serie de APK-uri de configurare, dintre care unul este dedicat arhitecturii. Când telefonul dvs. solicită aplicația, Play Store oferă APK-ul de bază împreună cu doar împărțirea arhitecturii care se potrivește cu cipul dvs., împreună cu densitatea ecranului și împărțirea limbii. În final obțineți o instalare care se comportă ca o singură aplicație, dar este asamblată în culise din mai multe componente special concepute.

Cum folosesc acest lucru APK-urile împărțite și pachetele de aplicații

Dacă ați deschis vreodată un pachet .apks sau .xapk și ați observat nume de fișiere precum split_config.arm64_v8a.apk, split_config.armeabi_v7a.apk, split_config.xxhdpi.apk și split_config.en.apk lângă un base.apk, acesta este exact acest sistem în acțiune, doar exportat ca un set de fișiere Play Store în loc de a fi livrate în mod silențios. Separările de densitate și limbi sunt de obicei sigure pentru a fi instalate fără discernământ, deoarece un telefon va ignora pur și simplu resursele de care nu are nevoie. Diviziunea arhitecturii este diferită: instalați-o pe cea greșită sau nu reușiți să o instalați pe cea potrivită și veți avea probleme reale.

Când utilizați un convertor pentru a îmbina un pachet împărțit înapoi într-un singur APK instalabil, procesul de îmbinare trebuie să aleagă în ce arhitectură se împarte. Un convertor bun păstrează fiecare împărțire a arhitecturii care este cu adevărat utilă sau vă permite să alegeți, în loc să păstrați în tăcere doar unul și să sperați că se potrivește cu dispozitivul dvs.

Ce se întâmplă când arhitectura nu se potrivește

Există două moduri de defecțiune distincte care merită cunoscute, deoarece arată și se simt diferit față de un utilizator obișnuit.

Primul este o eroare de instalare totală. Dacă o aplicație este construită aproape în întregime în jurul codului nativ, fără o alternativă semnificativă, managerul de pachete Android va refuza deloc să o instaleze, de obicei apărând o eroare precum INSTALL_FAILED_NO_MATCHING_ABIS. Nici măcar nu veți putea deschide aplicația; instalatorul te oprește la ușă.

Al doilea rezultat, mai frustrant, este un succes parțial tăcut. Dacă o aplicație are un punct de intrare Java sau Kotlin care se încarcă bine singur, dar apoi încearcă să apeleze la o bibliotecă nativă care pur și simplu nu este prezentă pentru arhitectura dvs., instalarea se finalizează normal. Totul arată bine până când atingeți pictograma, moment în care aplicația se blochează aproape imediat, adesea cu un UnsatisfiedLinkError îngropat în jurnale. Aceasta este povestea clasică „L-am convertit, l-am instalat, apoi se închide instantaneu” și este aproape întotdeauna o problemă de arhitectură, mai degrabă decât un fișier corupt.

Diagram comparing a matching arm64 APK that installs and runs successfully against an x86-only APK that fails to install on an arm64 phone with error INSTALL_FAILED_NO_MATCHING_ABIS

Cum să verificați arhitectura propriului telefon

Pentru marea majoritate a oamenilor acest lucru este simplu: dacă telefonul dvs. este din 2019 sau mai târziu, presupuneți arm64-v8a și continuați. Dacă doriți să fiți sigur sau aveți de-a face cu un dispozitiv mai vechi sau neobișnuit, câteva opțiuni practice:

Cum să verificați ce arhitecturi acceptă un APK

Înainte de a instala un fișier din afara Magazinului Play, merită să confirmați ce se află în el, mai degrabă decât să ghiciți. Bibliotecile native ale unui APK trăiesc în foldere numite după arhitectura lor din directorul lib/, cum ar fi lib/arm64-v8a/ sau lib/armeabi-v7a/. Orice instrument care poate inspecta structura internă a unui APK vă poate spune exact care dintre aceste foldere sunt prezente, ceea ce vă spune exact pe ce dispozitive va rula fișierul.

Verificați înainte de a instala

Instrument de informații APK citește folderul intern lib/ al unui APK și listează fiecare arhitectură pentru care a fost construită, astfel încât să puteți confirma compatibilitatea înainte de a încărca ceva. Când convertiți un pachet divizat cu Convertor XAPKS în APK, de asemenea, evidențiem acest lucru automat după fiecare conversie, listând arhitecturile găsite în fișierul îmbinat și semnalându-l atunci când unei versiuni pare să lipsească o porțiune de care ar avea nevoie dispozitivele obișnuite.

APK universal vs APK single-ABI: pe care ar trebui să utilizați?

MetricăAPK universal / grasAPK unic ABI
Dimensiunea fișieruluiMai mare, uneori de 2-4xMic, conține doar ceea ce are nevoie dispozitivul dvs
CompatibilitateFuncționează pe aproape orice dispozitivFuncționează doar pe o arhitectură potrivită
Cel mai bun pentruPartajarea unui fișier care ar trebui să funcționeze peste tot, destinatari nesiguriPropriul dispozitiv, când îi cunoașteți deja arhitectura
RiscRisc foarte scăzut de nepotrivire ABIVa eșua sau se va prăbuși dacă o alegeți greșit

Greșeli frecvente pe care oamenii le fac cu pachetele separate

Recomandări cheie

  • Un ABI este setul de instrucțiuni pe care un cip îl înțelege; contează doar pentru aplicațiile care includ cod nativ (C/C++).
  • arm64-v8a acoperă aproape orice telefon modern; armeabi-v7a este pentru dispozitive mai vechi; x86/x86_64 apar mai ales în emulatori și Chromebook-uri.
  • Aplicațiile sunt de obicei împărțite în funcție de arhitectură pentru a evita expedierea codului nativ inutil pe fiecare dispozitiv.
  • O arhitectură nepotrivită fie blochează complet instalarea, fie provoacă o blocare imediată după o instalare aparent reușită.
  • Puteți verifica atât arhitectura dispozitivului, cât și arhitecturile suportate de un APK înainte de a instala orice, evitând complet presupunerile.

Întrebări Frecvente (FAQ)

Trebuie să cunosc arhitectura telefonului meu pentru a instala o aplicație normală Play Store?

Nu. Magazinul Play detectează automat dispozitivul și furnizează doar diviziunea de arhitectură corespunzătoare, așa că acest lucru devine relevant doar atunci când încărcați APK-uri din afara Magazinului Play.

Un APK poate suporta mai multe arhitecturi simultan?

Da. Un APK universal sau „fat” reunește bibliotecile native pentru fiecare arhitectură acceptată într-un singur fișier. Este mai mare, dar se va instala pe orice dispozitiv compatibil, indiferent de procesor.

De ce s-a instalat APK-ul meu convertit, dar apoi sa blocat imediat?

Acest lucru se întâmplă de obicei atunci când aplicația are o cantitate mică de cod Java care se instalează bine, dar apoi încearcă să încarce o bibliotecă nativă care nu a fost inclusă pentru arhitectura dispozitivului dvs., lansând o eroare UnsatisfiedLinkError în timpul execuției.

Este arm64-v8a compatibil cu aplicațiile armeabi-v7a?

In general da. Majoritatea cipurilor arm64-v8a pot executa, de asemenea, instrucțiuni ARM pe 32 de biți, așa că un APK numai pentru armeabi-v7a va rula, de obicei, pe un telefon arm64 modern, doar nu invers.

Dispozitivele Android x86 mai sunt disponibile în 2026?

Sunt rare în telefoane astăzi, dar veți găsi în continuare x86 sau x86_64 în unele tablete mai vechi bazate pe Intel, câteva Chromebook-uri care rulează aplicații Android și majoritatea emulatoarelor Android pentru desktop.

Nu trebuie să memorezi nimic din toate acestea. Versiunea scurtă: telefoanele moderne sunt aproape întotdeauna arm64-v8a, aplicațiile sunt împărțite în funcție de arhitectură pentru a economisi spațiu și, dacă ceva refuză să se instaleze sau se blochează imediat după deschidere, nepotrivirea arhitecturii este unul dintre primele lucruri care merită excluse înainte de a presupune că fișierul în sine este rupt.

Proiectat și documentat de doamna Shaefale Dezvoltator principal și arhitect pachet Android • Verificat pe Android 12–15

Mst Shaefale menține fuziunea XAPK/APKS la nivelul clientului, analizatorul de manifeste binar și instrumentele de semnare APK v1+v2 la xapktoapk.com. Ați găsit o comandă învechită sau o modificare a sistemului de operare? Trimiteți o notă editorială.