APK — Android applicationni qurilmaga o‘rnatish va tarqatish uchun ishlatiladigan package fayl formati. To‘liq nomi Android Package Kit yoki amaliyotda Android application package sifatida izohlanadi. APK ichida compiled code, resource, manifest, native library, certificate va boshqa application fayllari saqlanadi.
APK ZIP container formatiga asoslangan, ammo Android platformasi kutadigan aniq directory va metadata tuzilishiga ega.
Asosiy tarkib
APK ichida quyidagi elementlar bo‘lishi mumkin:
AndroidManifest.xml;classes.dex;resources.arsc;res/;assets/;lib/;META-INF/;- signature block;
- boshqa metadata.
Build konfiguratsiyasiga qarab fayllar soni farq qiladi.
AndroidManifest
Manifest package va application componentlarini e’lon qiladi:
- activity;
- service;
- receiver;
- provider;
- permission;
- SDK talabi;
- feature;
- intent filter.
APK ichidagi manifest binary XML ko‘rinishida bo‘lishi mumkin.
Build tool source manifestlarni merge qiladi.
DEX
Kotlin va Java kodi compile jarayonidan keyin Dalvik Executable formatiga aylantiriladi.
APK bir yoki bir nechta:
classes.dex
classes2.dex
faylga ega bo‘lishi mumkin.
Method soni va multidex konfiguratsiyasi eski platformalarda alohida ahamiyatga ega.
Native library
C yoki C++ orqali build qilingan .so fayllar architecture bo‘yicha joylashtiriladi:
lib/arm64-v8a/
lib/armeabi-v7a/
lib/x86_64/
Qurilmaga mos ABI tanlanadi.
Universal APK barcha architecture librarylarini saqlab, hajmni oshiradi.
Resource
res/ ichida layout, drawable, string va boshqa compiled resource mavjud.
resources.arsc resource table’ni saqlaydi.
Android device til, screen density va configurationga mos resource variantini tanlaydi.
Unused resource buildda olib tashlanishi mumkin.
Assets
assets/ raw fayllarni original nom va directory bilan saqlaydi.
Application AssetManager orqali o‘qiydi.
Resource system ularga automatic ID yoki localization bermaydi.
Katta asset APK hajmini oshiradi.
Signing
Android APK o‘rnatilishidan oldin digital signature bilan imzolanadi.
- application identity;
- update continuity;
- integrity
uchun ishlatiladi.
Yangi update oldingi o‘rnatilgan application bilan mos signing keyga ega bo‘lishi kerak.
Debug va release APK
Debug APK development key bilan avtomatik imzolanishi mumkin.
U debugging flag va qo‘shimcha loggingga ega bo‘lishi ehtimoli bor.
Release APK production key, optimization va minification bilan build qilinadi.
Debug artifact public tarqatish uchun mos emas.
APK Signature Scheme
Android versionlari turli signing scheme’larni qo‘llashi mumkin:
- v1;
- v2;
- v3;
- v4ga oid scheme.
Yangi scheme butun APK integrity’sini samaraliroq tekshiradi.
Eski qurilmalar bilan compatibility uchun bir nechta scheme birga ishlatilishi mumkin.
Zip alignment
zipalign uncompressed resource’larni memoryga samarali map qilish uchun APK ichidagi data offsetlarini tekislaydi.
Alignment signing va build pipeline’ning to‘g‘ri tartibida bajariladi.
Zamonaviy build tool bu jarayonni avtomatlashtiradi.
Package name
Application ID qurilmada package’ni unique aniqlaydi:
uz.uzbekdevs.app
Store listing va update shu identityga bog‘liq.
Package nomini keyin o‘zgartirish yangi application sifatida ko‘rilishi mumkin.
Version
APK:
- version code;
- version name
ga ega.
Version code update tartibini numeric belgilaydi.
Yangi update oldingisidan yuqori codega ega bo‘lishi kerak.
Version name userga ko‘rinadigan semantik matn.
Universal APK
Barcha architecture, density va til resource’larini bitta faylda saqlaydi.
Sideload uchun sodda.
Fayl hajmi katta.
Store optimized split APKlarni tarqatishi mumkin.
Split APK
Application bir base va bir nechta configuration yoki feature APKga bo‘linadi.
Qurilma faqat kerakli qismlarni oladi.
Splitlar birgalikda bitta applicationni tashkil qiladi.
Faqat bitta splitni o‘rnatish yetarli bo‘lmasligi mumkin.
APK va AAB
APK qurilmaga o‘rnatiladigan format.
AAB store uchun publish format bo‘lib, undan optimized APK set yaratiladi.
Developer storega AAB yuborib, testing yoki sideload uchun alohida APK build qilishi mumkin.
O‘rnatish
APK:
orqali o‘rnatilishi mumkin.
Noma’lum manbadan o‘rnatish user ruxsati va security ogohlantirishiga ega.
Sideload xavfi
Internetdan olingan APK:
- malware;
- spyware;
- o‘zgartirilgan code;
- eski vulnerability;
- fake application;
- credential theft
saqlashi mumkin.
Signature va source tekshiriladi.
Fayl nomi yoki icon haqiqiy publisherni isbotlamaydi.
Reverse engineering
APK ichidagi DEX, resource va manifest tool bilan tahlil qilinishi mumkin.
Obfuscation class nomlarini qiyinlashtiradi, ammo client code secret emas.
API key va private credential APK ichiga joylashtirilmaydi.
Server authorization clientga tayanmaydi.
Hajmni kamaytirish
Usullar:
- code shrinking;
- resource shrinking;
- WebP yoki optimized image;
- ABI split;
- language split;
- dynamic feature;
- dependency cleanup.
Hajm faqat download emas, install storage va update trafikiga ham ta’sir qiladi.
Installation conflict
Qurilmada ayni package ID bilan boshqa signing keydagi application mavjud bo‘lsa update o‘rnatilmaydi. User oldingi applicationni o‘chirishi kerak bo‘lishi mumkin, bunda local data yo‘qoladi. Release signing key lifecycle’i shu sababli uzoq muddatli.
Minimum SDK
APK manifest minimal API levelni belgilaydi. Qurilma versioni past bo‘lsa package install qilinmaydi. Native library kerakli ABIga ega bo‘lmasa application o‘rnatilishi yoki ishga tushishi mumkin emas.
Reproducible build
Bir xil source va dependency’dan bir xil artifact olish supply-chain tekshiruvini yengillashtiradi. Timestamp va nondeterministic file order nazorat qilinadi.
Bog‘liq tushunchalar
Android Package, APK, AndroidManifest.xml, DEX, Native library, APK signing, Split APK, AAB, Sideloading, Android application