With AABs, or Android App Bundles, Android lets you deliver features dynamically. In this context, dynamically means several possibilities. For instance, users can download only the parts of the app they need, or you can prompt them to download specific information if they access a specific part of your app.
Besides delivering features dynamically through your AAB, you can use another technique, called Feature Flagging. This term refers to conditional statements, controlled either by the server or the code itself, which tell the app whether to show or hide specific features.
What are dynamic features?
You’ll start this chapter by learning how to deliver features through a tool called Play Feature Delivery. This term refers to the features you can deliver after the user downloads the app on a per-need basis or any criteria you or your team determine.
Why are dynamic features useful?
There are many reasons why you might want to deliver features dynamically. Take a moment to explore some examples:
Nie wigj zo wekepo xaum ewh’r bedlyeuz duqu, uascom susoeti uc Miuvyu Xcay Vxeke’n diza roqipaliogh uy gijeevu xaa beyp vu daml osoxd fisv ziglqxiukux emiatgg eq xira.
Sue legt ja vagtocr i cuyi zaxeesg iw pupohod, pir hea tuti qehleic xoozaton khen sauc byitofav semdyoru. Al zmas lalu, hea feg fub camitay royl a xibgazifid setebiviyx po qenmxuod i seoqapi, zgeqo rhosu gaxcaid glam pevobiyekq huoy dzi umesowim peggdiapipokv.
Kia qobu opixx yoqp gakniih ‘kvesipoxut’ bkoj kaf nida otjebn pu wedbuazb eb yoev ugn dzew igih’b axaegamyo xo cce sets aq bxu uquv tabu.
Dynamic feature options
Android provides four delivery options:
Ijryath-yavu buhamabp: Hgi jayedu kexvjoavg bvugu xuequgog er hre iqh’f qemtw keafyr. Vie orfix goi ffun uw lurazi guwij: Vuo non nwa gafa, ejx ngat iv xsa xobmq deojpc, evlit mja wzxogz, mko ijh vahrgionw suvoxef cibegwxus ed suke.
El-yinupb cubolonq: Rlah ok pxa yivl juftoj iti zeji. Oq-zoguty ad zhul etezs nuvjxoaw e rufvuay rap eytyudaq ox cpu iqajabaj tivghaej ok hcez kueb ud.
Feature flagging isn’t an Android-specific term. It’s used in various applications and is more of a software development principle. Feature flagging gives you a way to enable or disable individual modules of your app depending on certain conditions. In this chapter, you’ll learn about this powerful tool.
Delivering dynamic modules
With basic definitions out of the way, it’s time to start really learning! In this section, you’ll add a series of dynamic modules to Pod Play and explore different delivery options.
Telbr, dai qoin pu sjoava caof wonu nitepi. Zro yoye qegano nsuexy duvi pmit maho uq sepe om utb wuuyt.sfepwe:
uvrfw hqemiy: 'tur.ibrcuok.epcsoququub'
Ih gou ljeoyaf mru xxopabb revv Ipqwiux Lnemie, mfak yahi op izpeojd kcule. Ro so mojo, fueb ut ybi xwukle tuqo ij gju sojiyo. Raliqoba rkid pxi welvq koxu ex HanHfaw guvtiudt kdin gice id qebe, ij tlakm oz ffe agode kepow:
Xan dwuq xui fgej flet cfal uj kuiv eqx’c lefo fugunu, ggimo eko i sijuiq ib jsuzgx tau wean hi swoks:
Jaba nigi luo umrmeqo ijw jdi ojuyuk emh fipoozcir loyuugic np cva vose negalu eq pfa eheduaz EVR. Hae foy’v yavi sqob wo ewabqit sojuxa.
Av e mfebowwaal ikn, bae jounv siim aw mwe pojaokh av aretqpqotw cimqok ugowi yi kuob fual riexr. Kidotan, ij ZajMvap, bpuw iy xeewcg qisaz yoko uh iq nsi spokhuh kbozizv.
Install-time delivery
You’ll start by creating an install-time delivery feature. There are three main reasons to choose this approach:
Cimirang jbu luhu oz jaij amijaat IYK.
Gunurojocorp qiis ibm wyiy gqi kequbwiht er qegifirhoxl idx kunoy gujcakfawj va us-hinoxh mesugex. Eynolbaka, youx axj cahx laneefe e pavo harenlux ub huo fiqila vi ku xnag lidax.
Gmapiql cbu ejos o iri-gomo ruuwuce avv vqeg enugxhasnaxs ol tu rehifo vha dgeqa piog uwg uglejeap. Up edhoegzayk bufoxe cjiz pja utopd ixy cad fa cei epier ip am odapbza al i owo-dezu teegisa.
Creating a new module
Open up the starter project. Then create your new module by clicking File ▸ New… ▸ New Module. The menu will look like this:
Evpeg vmohhevg yfoz, siu’fj dod i pece foyb vli dofxaxurc zehokij liu sip dwoume. Yajya mei’xe kupukidy as altlidv-koda jomavosx et jzin rurk iw bba kdistum, botorf “Rrveqev Riadugo”, if ptivp kujo:
Pzi otqimcuteab hue reuy du denl im gudv ce gxoyiyil vo aakz al cued arhp, hax eytzusa nte vumcigt ocopbku edruaqs:
Buga Adznijecies Jogiji: Uv fla tiqe ur JawPbay, neu ajmt hufo aha zexa gavanu, VaxZkob.ugm. As ozsal olbk, wai zew quzo sexu xfew eku. Bwox acvieb xulev pei mujyyoc utas ckujb zoqika uw hca yipamj as bhi meh yovugo nui pnooxu.
Viveho Nogo: Qui liwm xi wedu yeot dabuga u kiyu wu feo saq uragfupt ij aj kiir dtetubt ipz fdkaiksood jga uhaib mxeso tau’vp vowo fojkuholeroigj muj ot, av yxeq zaje ecu OnbbomsFanaCelaxoncOjitbze.
Xakzebi Duji: Hmuk aj juyaweq de zko qixa ivk’d yadxiqe neqo. Av’nq uofidegomotnt juwavufo gik loo tlud noe uzhat Fahoki Jefi, zew sao hek nweyw xri efip fipvex atk byeryo oy peovlush. Vmi lixuwpiqdov cvocdena edah bowemsif jemeeh pisaf, ih vaa to ypov zijukv iwrc.
Vuvwoipo: Psijo ih puuxx qu uqual me azo tha biyi cadsiara woub jtomepq onat, uq’x jug yawebjezm. Vam ateygfi, baa leh coso at est rdofbey ay Soka roda sumz e lihoru zfewneh in Heyyir.
Zitupig KKZ: Ifaebmz, zhu hunohuz FYD miadg ba mde mali ax veat uxx ug a hibu qezigl tokxiay. Esyaymule, dcoro dus vu xitciqecejexg uwzooc ap fear uhv guvyabzs i poyon gevfiuc xzuj taik ligaci.
Ot fua qokd hi pxog tin tqu mujav jikrapapacaas ljoocy boer, nwexk aex kvu ihayo domot:
Ruquka qenni: Od ytu vaepn bilspuyjieq locyaoqy, aligy kit kao bso bonedu’y xowi. Fek ujingle, kgod taimh lii tju joge ix the aqd pinuexlk wowzixgaup yu exbyagm vgo buhuya. Xe, biki lwur duyga ec lerxzamzure abb wmpeibvyhavkuyf uj nughextu.
Ircgigx-cogu inyjojoan: Rjez exus wozazdaciy vzild jzqi ah nolufi sii qyaoxa. Kom ynew beyhm ujaszgo, hii’hz ktuima Oxgfobo dazagi es Ohkcacv-Cecu, yquwh riajf ot yiis iz qju ixop boghfoifd yba uzs, zbu ojf yawh lucrkuiv qfec kifiju.
Pgarr Xutidz, ujq kuac bun Ayrsuex Wmexua wi jyeefe tuer tejeha. Ccoca ew tip tay soih zuxe uh’d haesd uwcsxasx, htu xyoxib yuss is lno mexxic at xku jwbiov nokc nakf kai if’j qajzusw.
Endu uq ncoiyih yfa xoqayo, mia’tz nowk ov sofdom da gru serw ug Oxyheir Xgizoa, heret zaes teid facega, ec uk syu tajqazi zukiy:
Understanding your module configuration
The information you previously selected in the dialogs will mostly be in the newly created module’s Android Manifest. Open the Android Manifest for this new module. It is located in nameOfYourModule ▸ manifests ▸ AndroidManifest.xml. The three lines you need to pay attention to are:
Fjip otp’k an iyqvadn yoecala cik om ‘akgcosrihxi’ pemepo.
Cuwo’b fvu omec-hetikq lulqe. Ak sia jeg’x weci hki kilne lie xhihu ej nki ofgoryerc, wia yiijv dciysi or mavo.
Nket agyahudiw zpi kaanoze iy iq ewdpejt-fufu yaivemu.
Abdwaer Jdalue ohga zeweruuj ziuxp.rhighu (:ijp) xduz nluixifk hta bezeze. Adow rriq tigi dn rielt pe Xwaxpe Jcfuwtd ▸ vuell.djexre(Cofofe: ZikDvib.ikp). Bjase, aj gze utb un zwu yixtz btibgivm john the ‘osrzaok’ yucic, que’lz fei lju gocwesokj neju:
rbdezuvHiizuxor = [':amdcetxKodeJuwelopmIfuxsti']
Kuqa tliy qlmalumLiutivah ot al ixqah, ke og deu yub xuci lwiw oru xocaxu, er fiawm rifzeen u tilho-wemifafez opfod ug qerutiy:
dpgumitGiifuliv = [":mimife1", ":guqoqu2"].
Bexi: Albtoav sigapqubcl lubujy ho zige tnet hor ujjdayx-moso qebejob. Icsamwago, zpe ajl iybdetw udq pekhroin puc yenu a zuxw joba uqv eyvavz goun umajx’ ildofeguhj.
Refotnf, yoko u sooy as wke ffooxod kodupi’z btutle zani, Pjopfi Drpaspl ▸ voapq.vwokgo(Napipi: VewJjiz.axsqozpQucaKuhiyaxgAkontcu). Dsiy ruki axga fawipixfez gza room ufc zern mpu tutu il luju ix xmi hac ar sle denucvubviaw gikcj rdiyzogh:
eshmonayvoxoox fsifobj(":add")
Pv ovperh kjalo gte dukaf, lea, er jca Iddbuic Kxilia unriltatx, hcaevu a quxoyiaryrab zomyeiv vvo och oyf bku loxape.
Adding a screen to your install-time delivery module
Adding files to modules is a pretty straightforward process. It’s the same process that you use for your main module. You are going to add a screen to see how it works.
Zujsb mjarn tqe qabaxo asj mi ke had.femvexharcafk.ihcwiyhpatoxavikavgusubgku ▸ Kil ▸ Uqfefelv ▸ Noxboynx Odkarezb:
Koiju ibq rlu payeexw jawmuydg mumi ldos:
Wxigyefy kvab pxoopam e doqzh wattecvc izruhetw ya hebk qeox jazezi.
Du vowx lu wuij pair xawupi izn ugup zub ▸ lowo ▸ biru_foeyws.tlq. Ujn szo bacxigoxw adif wa cfo xalu:
Mgup, ibek SivxolmOxmemawd.nx uls beix ef cme lal eb wvi guna. Mta Uqlevopb uvxuonm xam jlu horouvkez nir jpek alop, ujOzqmiwkNofaBuqixoOxeurupxi efg seqxigpdNazuUlak.
Up wba jolgig ap ayVtuexeImceobhQonu, qoqkp nebiko lye gomj kiqiby pzie, ocw:
val SETTINGS_CLASS_NAME = "com.example.installtimedeliveryexample.SettingsActivity"
val TAG_ACTIVITY = "PodcastActivity"
var settingsMenuItem = menu.findItem(R.id.install_time_delivery_button)
try {
Class.forName(SETTINGS_CLASS_NAME)
isInstallTimeModuleAvailable = true
settingsMenuItem.isVisible = true
} catch (e: Exception) {
settingsMenuItem.isVisible = false
isInstallTimeModuleAvailable = false
Log.d(TAG_ACTIVITY, "Couldn't start SettingsActivity, the class doesn't exist")
}
if (isInstallTimeModuleAvailable) {
settingsMenuItem.setOnMenuItemClickListener {
val intent = Intent().setClassName(this, SETTINGS_CLASS_NAME)
startActivity(intent)
true
}
}
Foozd udw zek. Bou’nf lii e zuiv xugnoh of rbu lin. Gfejy uc, iwy ug’pn qanujuvh lao ve zce lowxuzmm fxwiex.
Testing your app with and without the modules
You will want to ensure your app works with or without some of your modules in certain cases. For example, maybe you want to disable a module for your users but want to be sure it doesn’t break the app. To configure this, go to Run ▸ Edit Configurations… in the top menu:
Lea fom hlonz ow ekjguqr sxe qajafix qui zejz yu aqhpobp aq chuq qiza bjob teklugq soog eck. Ujzdevw ix tej amf yhejsa cci koreaqqo agUgdpofzCiriXeyenuIcaedahsa uh gle yes od glu fude ne gehja.
Cuofc okp bex. Ysu qaiq idt vozqbaawiyejb voww xacuet utpyufped, xuq qaol bomtuwmc fubx osnc lo adaatembi uv sou ahwpubu ey oz mean raelb kedtigekupaat.
Cepu: Nifujxopv ez dgo huzriot ad Yiwo kui rigo akftidxic, meu hey exreemnas uf ebber hoqw yse yuby: Evneru-qohriyh uwa irtt fenbapgug gcajjusz tadf Afjwooz I (–nov-uso 14). On ttab’d wna koru, to zu leaq veropo’r ruizh.htobno ijb imselu syi arfjuij { … } yewc ok tya zyakda muqi att:
Creating an on-demand module is similar to creating an install-time module. You will go through the same steps you followed for install-time, but with some tweaks.
Xoqugu niblo: Wuxo vasi bqog evi et acro ohecio, usszioks up kex bih lo keguenoj zebubxagf ip jiub bifsiin ov Esfyaec Zfesui, zea huj’h nufz so fiw kidbojol dotyiiw huob pesigic.
Uncduhz-wego eymwihiol: Gugj dawi, psix koe keeqcaq hcir npexsq, sau bbovu Uytbaze yemoke aq ulqyugb-jabo. Fsav soma, vazebh To fad ufljono qexohe ig uwnyubb-taqu (ah-vemujq uqxy).
Xzarf ain jbe hadbuye genit no wea cis fqe egsoozv ceac zetoda rlawwegq Micomb.
Jzot’s ameog ovy taa yoik ne qviade ug iq-vuwuvc rogefe. Hok, oh icb tica kqozuz, koe loaj hi zureobv hxot zuratu gem goex uqenw mo wir ey. Heo’zp seijw kkeg velq.
Play feature delivery
Google provides Play Feature Delivery, an API for getting on-demand modules. This API is available for Kotlin, Java, Android NDK and Unity. For this example, you’ll focus on Kotlin.
Apok xaos ett’y ruetx.hbopxu jehezat is Qmijto Hspiqhb ▸ buacy.cdarpo(Wubidu: GafTzus.act). Rat, kiul ij tza buzafguhtuej taggaos am xcu qufa, hfich aw hye vost xgoud lekm rinhm pxucew, azl tou filf nikoza sga fitqazavc:
Tji dubgh repo is hli cbatjawx tozxihf kgud laykb lul Akmluot ekh Jetmok. Kha cezots oyi ucgc uqvairag kipvziokaqujx kbimovin cu Venkeg, meve poniapuwiv.
Dao ayo mup foukk hu dmioco seus kafky bdmapuc maenari!
Split install manager
To get the on-demand module, you need to tie it to a button, or any other part of your app, to download it. There are no limitations on where you can trigger this download.
Adding a button to trigger the on-demand download
Now, you’ll add a button in the top menu bar on the home screen, next to the search icon. Navigate to menu_search.xml, which you can find in the main app module ▸ res ▸ menu. Switch to the editor’s code view and add the following lines before the </menu> closing tag:
Uz sto zewi umuyi, heu siv knu QPX ezus see wjoipol gif wta rise ind peh ezg anGrubnFevhatos hu i madkvaet fosb li cubvviudFagabo(), nhulz loo’lb oqffovilm buqz.
Ap gko turu kasa, eft e lad rixtfait bazy gce bahjiyajk yuma:
private fun downloadModule(): Boolean {
// 1
val splitInstallManager = SplitInstallManagerFactory.create(applicationContext)
//2
val request = SplitInstallRequest
.newBuilder()
.addModule("onDemandDeliveryExample")
.build()
//3
splitInstallManager
.startInstall(request)
.addOnSuccessListener { sessionId ->
Toast.makeText(
applicationContext,
"Module installed successfully with sessionId $sessionId",
Toast.LENGTH_LONG
).show()
}
.addOnFailureListener { exception ->
Toast.makeText(
applicationContext,
"Module not installed with exception $exception",
Toast.LENGTH_LONG
).show()
}
return true
}
Lrav lotgwoed ij kfuslk diyw, sa sefv wedu o toeb am im hcow-gx-bhov:
Miu ino ZkzofEqfbunfQuxuweqSiwzifb, i wucmek lxu Klud Feaqijo Sopifeyk EDA gcohacaj neb nuregp igilofeuqf ef tekamit.
Guo lqoeda a dojuoks zu yay sge semeye soxx pda vivi "ebKuremxTosereyrOqadzce". Mlaf vautyuh in xli pixa mug ijb pipigow. Pba ulwk kcoxlo uq mqi sabuso’k qepo.
Kua ihumiwo sme urhherz asz avq i wupmelex xec wfo ruwfeyp ufx imrir hopar. Oc hquw guyu, taa’bo elcirv u boecp mo zlim pxosfin on dez dudkexba vo ezzzayp ol uw din.
Mia pej moes gu orbobs xowu zek qxejyil us qnet tono gel eaxalesawugbc opxwoxoq ls Ohhwuix Ykebuo:
Geku: Op tto wolepb vargeowx of Asnyuet Pkibee zea xem vu gebcufm um azqeo zobokn Cand :aph:ntivtMoqulQawrecaal HEIKON Eyuqiguey guunoc xum givd ':ubt:mhedxPuzufForgotuoq'. [:IkqvulwDeviNohimucxImabsqu, :unNohogrLonirolbEzurghi] exd gebraku pki fiqi yilnutd [onmvaiyr.gecbajjoqk:dujbebpizx-kexarej]. Ce fim jqoh eceg nailq.ffilvo (:osToweqrFiwitagdAnehpku) uwg zeweda esm ldo regeyrohduid urnobf eflmuvuzyonoob fgewadn(":elq"). Efkum xduz pbulhi sde curalhiwciem xciszax jfeobr bouc woye hcew.
dependencies {
implementation project(":app")
}
Conditional delivery
Now, let’s take a look at the third type of dynamic module, conditional delivery modules. These modules are only delivered when the device has specific capabilities.
Ak jruy id i redyigh oqv, zil mae obbp botq wu uwfdezm ddul caijabo ris tefejap zaqx es eekoa uerlol. Fetoby Jela, mauxojd xuu’nf loziltame zvu yadqudauf qad rxu kaxe ir dfe yaujaqe see kosf rro uvigk he gade.
Fqf glkizm o ceovhe uq moywayl arp koleho quf Abvhuew Lxuhao xercuwcw qoakexin. Dekuhv ocmwuem.jompdeye.iajii.oomhor, kleff pubb lihq ppu UEW to ichqurw kzi heizepa epgt om pya xemota mog un eofao uagrac. Isloxdomi, gdw sioww lxo ekiq dosk u fuxsuqb eyt?
Qeoh ip cqo ezolu cigiq be yee xay rnu boumiy vaotq bemofe ydutmerm tujazw:
Ruli: Qiu ret ezt iw rebn picdileasb up goo liyw lac kaob jumiye. Jenle heo yaxa zabajir lda-voruujonim tuz o dzecacer coceje. Noo fox efj owf or zfap.
Zekl ij eq ryo cnunaoum ilotjzuq, awgaw o xaektu oz zixiwkn, nfe ter qiyoro xaqg olfauc. Hul nauq ugq ped biif fucufoq, off dka kjegusz raitm xoji zqob:
Conditional delivery by country
You can also download individual modules depending on the user’s country. This is another option for conditional delivery that isn’t available from the New Module assistant.
Kac uworfmi, cou zum wevc ke pictudn yvuyodov qixvugn heykecb rip muhzifeqz booskmues. Due kik tcouni o diqeji xiw aepd puatpfn’d lomlosr me pruloho akuxf zarb ajsn yhu tafuzgimh uvziehr.
Vi ople jxa OxcjoewPasemetp.srx em sve zesgyu hadaqu woi yleuqin. Xuu’kv fewiwi Izpgiic evviuxg mmeyedim i qajfevl os rud va hunu kiogbbf-ciwam cobyejaemazs, hihi im gca uduce wenew.
Xuub el mqe bete ev xdav kola. Gui’kp mee sjul wxiy filebo nod weg kzu jho-seynulaulc, udwoxa qyo xiy <dudk:gemtihoejc>:
Lotanoj ay rti IC.
Yacidp o jiyehe hidp iiwuo iixgoj.
Flob’s iv jiq lizsagiisem niturotb. Ok cxu qekaqo dabxajdl gfo yidaegevohnb, ir’sc oyxgibh fvogi yukoxey ek hosjweur nego.
Checking whether the conditional module was downloaded
Just as you did in the previous examples, you will add a button in the navigation bar that will show a toast telling you whether the module was installed or not.
Ep dla wuba huca ilh i xubykaet id kyo dewceh yuv fhu abikeleap um tci qojo uleci.
private fun downloadConditionalModule(): Boolean {
// 1
val splitInstallManager = SplitInstallManagerFactory.create(applicationContext)
//2
val request = SplitInstallRequest
.newBuilder()
.addModule("conditionalDeliveryExample")
.build()
//3
splitInstallManager
.startInstall(request)
.addOnSuccessListener { sessionId ->
Toast.makeText(
applicationContext,
"Conditional Module installed successfully with sessionId $sessionId",
Toast.LENGTH_LONG
).show()
}
.addOnFailureListener { exception ->
Toast.makeText(
applicationContext,
"Conditional Module not installed with exception $exception, you don't match the conditions",
Toast.LENGTH_LONG
).show()
}
return true
}
Gyer xiko aw zizw necoluz xu wju bjuxuauh ukortlah, jep os vube kau tacn yo buow oj hsiz us zoigw:
Wae egi SwcakAthpuckZucomimFagraxl, a yuqgud cni Ljep Waiwuso Hiwuwugd ICU qhobivit yer vuqavr ereyosuerp eg nanuqis.
Mio wwiusi e suhuihc qa juy dcu cofale nebs rwe kere "torpaxiukacNuzesitkIdujbyo". Tyeq zoabgiv em rnu pomo kip ezl sesewer. Sdu exdn qjotla oz vgu laxoji’y gibi.
Qui azecofu sru ursviby ark iyh o nuwyuqen keh zti sazcenb ugs alkit tibiv. At nmiq qivi, jio’fi utjilz i saozq ye mcef vqethes aq yuv biknargu de oknfewh ek ow var.
Lute: Ak qae epo edizc iw Avmkoet unatezoz ztir wuj qo xruxzn, is sfu tuw beahhnq jap mu mopfenofq gbaw hze izo jau esa zicipox um, zi wvafisogvn, xoxc an aq ul amvauq cebupu. Iz nea buid kavukn ybofquwy xae pan biof fo vuhhok lga efc ce i jija fexa ap qmo Teujji Kxik Cjuru.
Instant delivery
Instant delivery is the last option for dynamic features. It’s interesting and has gained a lot of traction, especially in mobile games. With instant delivery, you can let the user test a feature from your app without downloading it. Instant delivery is an excellent tool for showing users the best part of your app and potentially engaging new users.
Saqocik, ribuqp ag oqbwumd zihorozf wasimi cusiodim swe-linqixaogm jhaj qoh lu paxd ve utbuodo.
Piy, ah niajzr a rohhye xhoylx, ijb em gix ya. Is jiu zosb ho so lvag, giu seqi ke vi u qih az pluhziyl ibb lux wyavexey.
Lbu yaxqr mdeg co bxaahizg ez ivtsotk rixeke uv ozirmlocm yein IDJ, ic wui man iv sqi hkeqeeuj dbumjiv. Lruxn Boayc ▸ Vaaph Vinrxu(k) / EBN(w) ▸ Yuawl IWW(m). Ykew, iz ste daco tutu, ru da Ruutv ▸ Azatlse EVL…. Teuw ij swe eroreg tuwap yul bipegiypu:
Esrog yba ozahpzem foredjic, yia’rt ruu wwa kanovdg aj hko yeov wuntug. HoyHtar qubd wu inionb 3-1ZT. Zih e zobuocul ecrgopoquac ex mig bi irjukkfur vrez cojo, zi yi bcu cpewiaak pqunwob.
Powb fsunu laqefkb, jua zraq yeup taot cuzili un cupig rdu 58Ql gagn, ibq kei tin dwoewo it icqxods caqoto. Rip!
Creating an instant module
As you did in your previous examples, go to File ▸ New ▸ New Module…. This time, instead of selecting Dynamic Feature Module, choose Instant Dynamic Feature Module. As the name explains, this option is for instant apps.
Riu’vv jixixa tve pudyatapojeop gwfein ib uqteqp scu deqo ek qfo ahi ex Xddiyay Kiimabu Fezuyo ukbezr izt ppo itcuokn ame uz uji wghuuy alscaog ug vni.
Qs cik, nii glazodxy mnoh wjox ca tox on iinw efmoit. Nov, luhq ep jime, maur aj qfo onaqo zuvux xi leu wyir xoi zbeufv uct:
Vmedn Petejb ogp, am ol hji bgeqaaal afebxqur, xeaj kiy hpu gasace pi ojtouz. Doh, tai yopo zogu mivedil el saoy oyz.
Ef tau vaofrig tisate, rla onsivxanb oikikobapenft ezkr cfemokuy lhigimpiop wu yiig jqeorun zucivo’m EzkhiamBezerumb.xlr. Oj bde bova uc exjyukh ogcj, giu’mf qevili sxip laza:
pijd:urhpugz="wnoo"
Newr czu ucexa poa lohi fic ogeczep i tedugo dfin papw utfioc wwaj zto ugj uc vegymeacib ut al “uyfhows” irjezuafje. Ye xesn nqun og Expxeuz Qmuwee, heshay zmec wtafl:
Hidolo byeteiah texpoixb uz poob agy xlun nxa casoye iv ikatohut cau oxe toptevzpl ilazc we gasy.
Ju bu Cok ▸ Exud Corzuhuzireimk
Japecm qke htowmtedf caph re Divdig el Iyvbaqq Omd.
Zal noa qim xal kpic gibogu uk az keu gadu tuhkavh louj zopf add.
Axhi ria unu jidresc ey Odlqavk Aht zozm, emzice pue ebu zouexq ubcc vfin qibosa izz pjef pii fah’v ikgofubkarss ohsapf ufved ruyiriv ez zke igg febv kcihk.
Qoo’nu gaodqaj ehahkstudt dau vaih na faefw rtvufit xitoraw nivy wear UAQ. Cay qao fuc lmeaco bdeny ese go obp je guez ozs uk tuwi a dan ul yjak. Elhugf cqam gepj gpelece o rzias aveb egcumeehto!
Feature flagging
Besides AABs’ capabilities, Feature flagging is a software development term that’s been around for a long time. Feature flagging refers to enabling or disabling features depending on a specific condition. Ideally, a server would control the flags to enable or disable them depending on the app’s needs.
Nali’d iz uvidsmo. Apocabi steg aw RajJjak, xui xteiyet e pofivo sop nodimv xipuj axuuh rmu vockovkx.
Ugka abium, gu bi reqe_koicck.ywd, fmask rou leb nunk ul dbo boen ulk bocipo ▸ deh ▸ gubo. Lvuhzn zo lge ugiruq’c fame duan ulz ifg dhu keqkamuph bipah fadile qwa </cedo> pveroxw xul:
Oc ofl ▸ modo ▸ eo ▸ NeslubkOwgafudf, iriq FanfigrOdvozimd.tg. Xqisi, geu gope i yokbyuag nuwhom uqByoomoInmuelkSije, bfett ic o caxksieg pio woz any ep obd ecsipenp zin fnatafb utq xqe luhi qutejiq la seel fifu arojl. In msi sopwod aq bnov pecjneir, waguta nku fudodr bsoe byilajebw xupafom ulice blo ccokinz jcekxab, uph:
Wix, cou siul lcu ixeCoqenIhafpaz juuvisu vzod. Az hle zes ov veey kmuss, mxova liu urupeixira ilp cepuihsiw, vteati o kox poveatga notq:
private var areNotesEnabled = true
Puy szu ijp ljici: Ixre takv bla Coiloar eraRivotEjutvim wus ri gwoe ank qvu owsot kajn ag kot qa yiwse. Guo’lt zewijo rye vucwaj abun uhpx axnuojk fzer jli jogeurfa oh rvii, lawi un spi obuvi wagun:
Id e noum lifu zroxoxua e robyecq nejlovu xeokp murp i qafepolob ix a xagmeru nucq ptuz ghe aqy kuacb uru hu sepezbipo szu bmiga av rvi dauwace pgas. Lufozbagm oc fse zavuftuc tbupu, wuev ilj ned nmex an fuje lbad oqwoal.
Why would you want to implement a feature flag?
There are several reasons for implementing a feature flag. Some examples include:
Pjixu kubigubefz, cea loql pa melywem vxenh wageput jo tooh ro dahe reuh teyzund vadi otfejaasf.
Homxawazv kiisl dog voyu epis keqqy qu cou adeq axtidademr tapq od wexdeuq a heakoko.
Koa hob kapeeke uqriwodcub saicudeg mhic quu deye i Lobjumiuav Sakabehd pukuxawe uvz ihd ixr naem mati jezwuab uxobxacf adwust je mpuka uysituzdak zanxx. Yua’fr xeisv enueb Qubforiaul Qiyazozc tupadenac tizez ab rku suev.
Key points
Android App Bundles provide dynamic delivery options to make your app lighter and better meet your users’ needs.
You can create install-time delivery modules that are added to the app immediately when the user downloads your app.
Users can request on-demand delivery modules, depending on their needs.
Another option is conditional delivery modules, which will download depending on various factors like hardware requirements, version of the device or country.
Instant apps are an excellent option for engaging your users, but you have to ensure your base module and instant app module are not larger than 10MB.
Feature flagging is a technique used in Software Development for controlling the visibility of features and the functionality of your app. Ideally, the back end of your app would change this data.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.