Ja programmējat lietojumprogrammas operētājsistēmai Android vai izstrādājat bibliotēkas šai ekosistēmai, iespējams, esat vairāk nekā vienu reizi saskāries ar .jar un .aar failiem. Jums var rasties pat jautājumi par to, kad izmantot katru formātu, kādas ir to patiesās atšķirības un kādas ir to izvēles sekas jūsu projektam. Lai gan abi ir saspiesti faili, kas paredzēti atkārtoti izmantojama koda un resursu izplatīšanai, to struktūra, mērķis un iespējas Android kontekstā ievērojami atšķiras. Šī raksta mērķis ir atbildēt uz visiem jūsu jautājumiem par šo tēmu, un, lai to izdarītu, mēs iedziļināsimies tajā, sniedzot skaidrus un visaptverošus skaidrojumus, kā arī dabisku un praktisku pieeju, kas ir ideāli piemērota gan iesācējiem, gan pieredzējušiem Android izstrādātājiem.
Jūs atklāsiet detalizēti Kas ir JAR fails, kas raksturo AAR failu? un kā abi formāti tiek izmantoti dažādās Android izstrādes fāzēs. Mēs pārskatīsim to priekšrocības, ierobežojumus, iekšējo struktūru un to, kā tās ietekmē bibliotēku izplatīšanu un izmantošanu gan mūsu, gan trešo pušu projektos. Mēs arī izpētīsim to lomu mūsdienu būvēšanas sistēmās, piemēram, Gradle un Bazel, un uzzināsim galvenos padomus, kā maksimāli izmantot tās, vienlaikus izvairoties no bieži sastopamām kļūdām. Viss ir izskaidrots spāņu valodā no Spānijas, ar skaidriem piemēriem un izceltiem galvenajiem punktiem, lai jūs varētu viegli atsaukties uz to, kad vien tas ir nepieciešams.
Kas ir JAR faili?
JAR (Java ARchive) fails ir būtībā, saspiests fails, kas satur failus .klase (jau kompilēts Java kods), resursi, piemēram, attēli, īpašību faili un konfigurācijas faili, kā arī failā esošā metainformācija META-INF. JAR tika izstrādāts, lai vienkāršotu Java lietojumprogrammu un to bibliotēku izplatīšanu, ļaujot visus nepieciešamos komponentus iepakot vienā, viegli transportējamā un pārvaldāmā failā. Klasiskajā Java valodā.jar faili ir pamatvienība gan pilnīgu lietojumprogrammu, gan atkārtoti lietojamu moduļu izplatīšanai.
Android ierīcēs JAR faili joprojām pastāv., un tos bieži izmanto, lai iekapsulētu tīru Java loģiku, piemēram, utilītus, algoritmus vai platformas neatkarīgas bibliotēkas. Taču esiet uzmanīgi: JAR fails nekad nevar saturēt Android resursus (izkārtojumus, zīmēšanas elementus utt.), kā arī AndroidManifest.xml failu. Tas arī neietver vietējo kodu (C/C++). Tātad, kad jūsu kodam ir jāmijiedarbojas ar Android sistēmas komponentiem, jādefinē vizuālie resursi vai jāpārvalda atļaujas, JAR neatbilst prasībām un notikuma vietā ienāk AAR.
Kas ir AAR fails?
AAR (Android ARchive) fails ir JAR koncepcijas evolūcija, kas paredzēta tikai Android ierīcēm. AAR ir arī saspiests fails. (būtībā ZIP fails), bet ar struktūru un saturu, kas izstrādāts, lai apmierinātu visas mūsdienu Android bibliotēkas vajadzības. AAR var ietvert:
- Kompilēts Java kods (.class, iekļauts .jar failā)
- ieraksti AndroidManifest.xml specifisks grāmatnīcai
- Android resursi: izkārtojumi, zīmējamie elementi, virknes, ikonas utt.
- Vietējais kods C / C ++ (.so faili, pēc izvēles)
- Proguard faili, Lint resursi un citi
Tas padara AAR ir ieteicamais formāts. lai izplatītu bibliotēkas un spraudņus operētājsistēmā Android, jo tas ietver viss nepieciešamais, lai grāmatnīca darbotos tā, kā tā ir paredzēta jebkurā projektā, pārvaldot gan kodu, gan ar to saistītos resursus un konfigurācijas.
JAR un AAR strukturālās atšķirības
Ķersimies pie lietas, skaidri salīdzinot, ko katrs formāts var un ko nevar darīt. Tātad jūs to varat redzēt vienā mirklī:
| Característica | JAR | gaisa |
|---|---|---|
| Java kods | ✅ | ✅ |
| Android resursi (izkārtojumi, zīmēšanas programmas…) | ❌ | ✅ |
| Pašu AndroidManifest.xml | ❌ | ✅ |
| Vietējais kods (.so) | ❌ | ✅ |
| Anotāciju apstrādātāji | ✅ | ✅ |
| Proguard/Lint faili | ❌ | ✅ |
Lai gan JAR fails ir paredzēts tikai tīra Java koda un metadatu failu iepakošanai jebkura veida Java projektam, AAR fails ir paredzēts visa Android ekosistēmaresursi, manifests, vietējais kods un īpaši noteikumi, kas var būt nepieciešami, integrējot bibliotēku ar lietotni vai citām bibliotēkām.
Kam mūsdienās Android ierīcēs tiek izmantoti JAR faili?
JAR failu izmantošana operētājsistēmā Android joprojām ir ļoti saprātīga noteiktos kontekstos. Tīras Java bibliotēkas (nav resursu, nav manifesta, nav Android specifiska koda) parasti tiek izplatīti kā JAR faili, jo šo formātu vispārēji pieņem jebkurš Java projekts neatkarīgi no tā, vai tas ir darbvirsmas, aizmugures vai Android projekts. Ja jums ir virkņu apstrādes utilītprogrammas, matemātiskā loģika, trešo pušu bibliotēkas, kas izstrādātas pirms Android parādīšanās, anotāciju procesori vai atsevišķi moduļi, JAR ir derīga un optimāla iespēja tās vienkāršības dēļ.
Turklāt daudzi anotāciju procesori un rīki Java ekosistēmā (piemēram, tie, kas tiek izmantoti ar kapt o annotationProcessor) tiek izplatīti kā JAR faili, jo to funkcija ir ierobežota ar kompilācijas laiku un tiem nav nepieciešami papildu resursi.
Kad ir svarīgi izmantot AAR JAR vietā?
Katru reizi, kad jūsu grāmatnīcai tas ir nepieciešams Android resursi — neatkarīgi no tā, vai tie ir izkārtojumi, zīmējamie elementi, izvēlnes, virknes, stili — vai jūsu pašu manifests, jums tas jāiepako kā AAR. Piemēram, ja izstrādājat vizuālu komponentu (pielāgotu pogu, fragmentu, logrīku) vai ir jāiekļauj atļauju bloks, pakalpojumi, uztvērēji vai vietējais kods… JAR jums vairs nav noderīgs.
AAR ļauj grāmatnīcai:
- Ievadīt resursus patērējošajā lietojumprogrammā, lai tos varētu izmantot bibliotēkā definētie izkārtojumi un zīmēšanas elementi.
- Saglabājiet a AndroidManifest.xml atsevišķi, ko kompilācijas sistēma pēc tam apvienos ar galīgo lietotni.
- Lai izplatītu .so faili ar vietējo kodu, kas nepieciešams noteiktām papildu funkcijām.
- Definējiet ar bibliotēku saistītos Proguard/Lint noteikumus, lai aizsargātu kodu vai pievienotu automātiskas pārbaudes.
Galu galā AAR formāts ir faktiskais standarts jebkuram atkārtoti izmantojamam kodam, kas ir pilnībā jāintegrē Android projektā, veicinot modularitāti un pareizu atkarību pārvaldību.
AAR konkurences priekšrocības salīdzinājumā ar JAR
Praktiskā līmenī galvenais AAR priekšrocības Android projektos attiecībā uz JAR ir:
- Pilnīga funkcionalitātes izplatīšanaĻaujot iekļaut resursus, manifestus un vietējo kodu, AAR ļauj pakot jebkāda veida funkcionalitāti, sākot no trešo pušu SDK līdz moduļiem, kas paplašina jūsu pašu lietotni.
- Vienkārši un centralizēti atjauninājumiIzmantojot attālinātas repozitoriju sistēmas (piemēram, MavenCentral vai Google repozitoriju), AAR bibliotēkas var ātri publicēt un atjaunināt, ietekmējot visus projektus, kas tās izmanto.
- Integrācija ar modernām būvēšanas sistēmāmGradle un Bazel, visplašāk izmantotās būvēšanas sistēmas operētājsistēmā Android, piedāvā tiešu atbalstu AAR un automātiski pārvalda no faila atvasināto resursu, manifestu un būvēšanas noteikumu apvienošanu.
- Atbalsts modularitātei un testēšanaiMūsdienu Android lietotnes bieži tiek sadalītas vairākos moduļos un bibliotēkās, no kurām daudzām ir nepieciešami savi resursi vai manifesti. AAR atvieglo šo shēmu īstenošanu un ļauj rakstīt testus (vienības un instrumentācijas), kas ir pilnībā savienoti ar moduli.
JAR joprojām ir noderīgs tīrai Java loģikai vai anotāciju procesoriem, bet pilnvērtīgiem, funkcionāliem Android moduļiem, kas ietver resursus un integrāciju ar operētājsistēmu, AAR ir praktiski nepārspējams.
Ierobežojumi un apsvērumi, kas jāņem vērā
Protams, ne viss ir priekšrocība. JAR formāts ir universālsTo var izmantot jebkura Java vide, sākot no serveriem līdz darbvirsmas lietojumprogrammām. Taču AAR ir jēga tikai Android projektos, un to ir paredzēts izmantot Gradle vai Bazel, nevis citās vidēs. Turklāt, AAR iepakošanas resursiem var būt nepieciešamas papildu korekcijas (piemēram, pareiza vārdtelpas pārvaldība, resursu un manifestu apvienošana un atkarību versiju kontrole). Tāpēc, ja izplatāt starpplatformu moduļus vai jūsu loģika ir pilnīgi neatkarīga no Android, apsveriet iespēju šo koda daļu iepakot JAR failā.
Vēl viens svarīgs aspekts: JAR failos nevar iekļaut Android resursus.. Ja tie būs nepieciešami, tie būs manuāli jādublē katrā patērējošajā projektā, tādējādi zaudējot visas modularitātes, centralizētas apkopes un automātisko AAR atjauninājumu priekšrocības.
Kā JAR un AAR faili integrējas būvēšanas sistēmās (Gradle un Bazel)
Android Studio būvēšanas sistēmai (balstoties uz Gradle) un tādām uzlabotām sistēmām kā Bazel ir īpaši noteikumi gan JAR, gan AAR failu apstrādei.
Gradle
Pievienojot JAR atkarību savam Android modulim, savā build.gradle failā izmantojat šādu notāciju:
atkarības { ieviešanas faili('libs/mimil.jar') }
Šis ietver Java kodu jūsu APK failā, bet tas nedod jums piekļuvi Android resursiem. AAR gadījumā jūs vienkārši pievienojat atsauci uz AAR artefaktu (parasti no Maven repozitorija vai Google repozitorija), un Gradle rūpējas par resursu, manifesta un vietējā koda apvienošanu:
atkarības { ieviešana 'com.mycompany:milibreria-android:1.0.0' }
Ja artefakts ir AAR, Gradle to automātiski nosaka, izpako, apvieno un atrisina, un jūsu resursi un manifests tiek nemanāmi integrēti galīgajā lietotnē.
Bazelā
Bazel, kas ātruma un modularitātes dēļ kļūst arvien populārāks lielos projektos, definē skaidrus noteikumus darbam ar abiem formātiem:
- java_bibliotēka: apkopo Java pirmkodus un ģenerē izvades JAR failu.
- android_bibliotēka: tāds pats kā java_library, bet arī ģenerē AAR (ar manifestu un resursiem).
- aar_import: ļauj tieši izmantot AAR failu, ko pēc tam var izmantot android_binary vai android_library noteikumos.
AAR integrēšanas pamata piemērs Bazel valodā:
aar_import( name = "google-vr-sdk", aar = "gvr-android-sdk/libraries/sdk-common-1.10.0.aar", ) android_binary( name = "app", manifest = "AndroidManifest.xml", srcs = glob(), deps = , )
Ar šo, AAR ir pieejams jebkuram modulim vai lietotnei, kam tas nepieciešams, apvienojoties ar saviem resursiem un manifestiem.
Kas notiek, ja JAR failā iekļauju Android resursus?
Ja mēģināt ievietot Android resursu failus (XML izkārtojumus, attēlus, virknes…) JAR failā un pēc tam savā projektā paļauties uz šo JAR failu, šie resursi nekad nebūs pieejami savā lietotnē kompilēšanas laikā. Gradle un Bazel apstrādā tikai resursus, kas iekļauti lietotņu kokā un AAR moduļos. Tāpēc piekļuve R.layout.tulayout neizdosies kompilēšanas laikā un/vai izpildes laikā, radot kļūdas, kuras ir grūti atkļūdot.
AAR faila iekšējā struktūra
Apskatīsim, kā tipisks .aar fails ir organizēts iekšēji. Ja to atzipēsiet (atcerieties, ka tas ir .zip fails), parasti atradīsiet šādus failus un mapes:
- klases.jar: kompilētais Java kods
- AndroidManifest.xml: grāmatnīcas īpašais manifests
- res /Android resursu mapes (izkārtojumi, zīmēšanas elementi, vērtības…)
- aktīvi /: binārie resursi vai papildu dati
- jni/: dzimtā koda versija dažādām arhitektūrām
- R.txteksportēto resursu definīcija
- progard.txt, lint.jar: Proguard vai Lint izvēles noteikumi
Visu šo saturu nemanāmi apvieno būvēšanas sistēma, nodrošinot, ka jūsu lietotne var tieši izmantot AAR definētos resursus, manifestus un vietējo kodu.