Povprečen uporabnik Androida se verjetno že zdavnaj ne zanima več za "problem fragmentacije" Androida. Toda to vprašanje še vedno preganja razvijalce.
Fragmentacija je bila sporna težava v Androidu dobesedno od objave mobilnega operacijskega sistema.
Raznolikost, ki prihaja z razdrobljenostjo, je zdaj v veliki meri obravnavana kot batina, ki jo troli uporabljajo v spletnih ognjenih vojnah. neto pozitivno za potrošnike naprav Android. Navsezadnje imamo toliko svobode pri izbiri vrste naprave z vrsto programske opreme, ki jo želimo, da je povprečnemu potrošniku težko mar za razdrobljenost. Vizualizacija neverjetne raznolikosti naprav Android ustvari čudovit mozaik raznolike predstavitve Androida.
Toda razdrobljenost strojne in programske opreme ne pomeni srečnega razvijalca programske opreme. Pravzaprav ravno nasprotno. Razvijanje aplikacije v toliko različnih konfiguracijah strojne in programske opreme se lahko pri odpravljanju napak izkaže za veliko težavo. Proizvajalci originalne opreme lahko naredijo večje ali subtilne spremembe, ki jih je treba upoštevati pri razvoju aplikacije, vendar za posameznega razvijalca resnično ni preprostega načina, da zagotovi, da bo njihova aplikacija delovala univerzalno. Medtem ko je povprečen potrošnik že zdavnaj pozabil na razpravo o razdrobljenosti, to vprašanje še vedno preganja Android razvijalci aplikacij in na videz ni mogoče storiti ničesar, razen da se znebite in se ukvarjate z napakami, ko pojavijo.
Žalostno stanje razdrobljenosti
Zlasti en OEM je deležen velikega deleža sovraštva zaradi preglavic, ki jih povzročajo pri razvoju aplikacije – Samsung. Razvijalci že leta tarnajo o Samsungu, nekateri celo pišejo tako ostre prispevke, kot je "V Android Hell obstaja posebno mesto za Samsung«, ki opisuje posebno frustrirajočo napako, ki izhaja iz Naprave Samsung in podporna knjižnica appcompat. Posebej bi rad opozoril na en odstavek iz tarnanja gospoda Ambrija, ki odlično oriše, zakaj razvijalcem še vedno ni vseeno za razdrobljenost:
Če ste razvijalec za Android, je vaše sovraštvo do naprav Samsung verjetno brezmejno. Več kot povprečen uporabnik, za katerega je Samsung sinonim neumni Touchwiz in pretirana napihnjenost, preziraš Samsung, ker nimaš izbire. Zaradi Samsunga ogromen tržni delež, se preprosto ne morete odločiti, da ne boste podpirali naprav Samsung. In to je tisto, kar najbolj boli; dejstvo, da vam je ta izbira odvzeta!
Tudi to ni tarnanje iz starih let obstoja Androida – ta objava je bila objavljena sredi decembra lani. Bom odkrit in povedal, da nisem prepričan, ali je ta težava še uradno odpravljena, vendar, g. Ambri je v svoji objavi zagotovil popravek za vse, ki naletijo na njegovo tarnanje prek Googlovega iskanja napaka. Vse kar morate storiti je, da uporabite ProGuard z naslednjo eno vrstico kode:
# Samsung ruining all nice things-keep class !android.support.v7.view.menu.**, !android.support.design.internal.NavigationMenu, !android.support.design.internal.NavigationMenuPresenter, !android.support.design.internal.NavigationSubMenu, android.support.** {*;}
To ni tako slabo, kajne? Težava pa je v tem, da je bil ta popravek povzet iz Stack Overflowa. Ne razumite me narobe, Stack Overflow je odlično spletno mesto. Vendar v resnici ni idealen vir za odkrivanje popravkov za vaše aplikacije. Iskanje nečesa na Stack Overflow pogosto vključuje potapljanje globoko skozi povezave po številnih iskanjih v Googlu s poskusi in napakami. Včasih boste celo ugotovili, da drug uporabnik omenja isto napako, ki ste jo imeli vi, vendar brez rešitve. Ali pa so še bolj frustrirajoči časi, ko najdete nit tam, kjer je trdil prvotni poster so našli popravek, vendar so že zdavnaj opustili svojo nit, ne da bi drugim dali navodila, kako naj popravijo težava.
Primer subtilne težave z razdrobljenostjo
Sam nisem razvijalec, vendar sem dovolj seznanjen z zmogljivostmi Androida po letih brskanja po Taskerju, da sem začel psevdoprogramirati lastne rešitve za težave, s katerimi sem se soočal. In ko nečesa ne morem ugotoviti, to poguglam, tako kot vsi drugi. Medtem ko sem pisal prejšnji članek o brskanje po aplikaciji Nastavitve telefona za skrite dejavnosti, sem naletel na precej čudno napako, ki je nisem znal razložiti. Napaka, edinstvena za naprave Huawei.
Kadarkoli sem poskušal začeti določene dejavnosti (na primer meni »Testiranje«, ki vsebuje statistične podatke o uporabi aplikacije) v aplikaciji Nastavitve, sem vedno naletel na napako dovoljenja. Zlasti aplikacija, ki sem jo uporabljal za začetek dejavnosti, ni imela dovoljenja huawei.android.permission. HW_SIGNATURE_OR_SYSTEM. Nobena druga naprava, ki sem jo preizkusil, ni zahtevala edinstvenih dovoljenj za zagon teh dejavnosti v nastavitvah, samo telefoni s Huaweijevo različico Androida (EMUI). Analiza com.android.settings je razkrilo, da so nekatere dejavnosti v aplikaciji Nastavitve dejansko pod stopnjo zaščite, ki zahteva bodisi podpis ali sistemsko dovoljenje.
Na mojo žalost to pomeni, da so samo aplikacije, nameščene pod /system, ali aplikacije, podpisane z istim podpis, saj bi lahko aplikacija Nastavitve odprla te dejavnosti z metodo, kot sem jo jaz poskušam. Ko sem z Googlom iskal odgovor na to napako, sem (uganili ste) naletel na Nit Stack Overflow. Razvijalec, ki je objavil svojo težavo, je naletel na isto težavo kot jaz (čeprav je bil v procesu dejanskega razvoja aplikacije). Njegova težava je nastala, ko je poskušal zagnati naslednjo kodo:
<span >Intentspan><span > mainIntent span><span >=span><span >newspan><span >Intentspan><span >(span><span >Intentspan><span >.span><span >ACTION_MAINspan><span >,span><span >nullspan><span >);span><span >mainIntentspan><span >.span><span >addCategoryspan><span >(span><span >Intentspan><span >.span><span >CATEGORY_LAUNCHERspan><span >);span><span >Intentspan><span > pickIntent span><span >=span><span >newspan><span >Intentspan><span >(span><span >Intentspan><span >.span><span >ACTION_PICK_ACTIVITYspan><span >);span><span >pickIntentspan><span >.span><span >putExtraspan><span >(span><span >Intentspan><span >.span><span >EXTRA_TITLEspan><span >,span><span >"Pick App to Play in"span><span >);span><span >pickIntentspan><span >.span><span >putExtraspan><span >(span><span >Intentspan><span >.span><span >EXTRA_INTENTspan><span >,span><span > mainIntentspan><span >);span><span >thisspan><span >.span><span >startActivityForResultspan><span >(span><span >pickIntentspan><span >,span><span > REQUEST_PICK_APPLICATIONspan><span >);span>
Sodeč po nizih v nameri in spletni strani razvijalca je verjetno poskušal uporabniku omogočiti, da izbere aplikacijo tretje osebe za predvajanje nekaterih medijev. Popravek, ki ga je zagotovil veteran razvijalec CommonsWare, je bila povsem preprosta: uporaba Namera. CreateChooser namesto ACTION_PICK_ACTIVITY. vendar zakaj bi morali implementirati ta popravek? zakaj Ali Huawei sploh potrebuje to dovoljenje? zakaj ali smo morali poiskati odgovor na StackOverflow z uporabo zelo specifičnega Googlovega iskanja?
Paradoks izbire
Da bi našli odgovor, CommonsWare je vložil poročilo o napaki v sledilniku hroščev Android in zahteva, da Google preuči težavo. Zlasti je razvijalec zahteval, da Google onemogoči nedokumentirane zahteve glede dovoljenj, da aplikacijam tretjih oseb preprečijo dostop do ACTION_PICK_ACTIVITY. Z zapisom teh zahtev v CTS, bi bil Huawei prisiljen upoštevati te spremembe.
Če sem iskren, ta napaka sama po sebi res ni nič posebnega. Čeprav nobena druga aplikacija, ki sem jo poskusil (na primer Tasker), ni mogla zaobiti tega dovoljenja zahteve in zagon določenih dejavnosti znotraj aplikacije Nastavitve, nisem bil ravno razočaran rezultat. Toda ko sem se spomnil tarnanja gospoda Ambrija, sem ugotovil, da so majhne spremembe, kot so te, zelo frustrirajoče, še posebej ker ne glede na to, kako majhni so, nedvomnoseštejte, včasih dovolj, da povzroči glavobol. Že ena majhna sprememba v aplikaciji Nastavitve bi lahko povzročila nezasluženo negativno oceno proti razvijalcu. Ena majhna sprememba, ki je precej slabo dokumentirana in je zahtevala, da po internetu poiščem nit Stack Overflow. Koliko drugih majhnih hroščev je na drugih napravah?
Povečana konkurenca v mobilnem prostoru se je izkazala za odlično za potrošnika, a potem ko smo videli, kako te subtilne spremembe toliko različnih linij izdelkov lahko vpliva na razvijalce, zato sem začel ceniti pogled razvijalcev na razdrobljenost. Ne gre za to, da je izbira sama težava, temveč za to, da skupnost ne stori dovolj, da bi popisala te težave. Kot je g. Ambri predlagal v svojem članku, morda razvijalci za Android potrebujejo svojo različico caniuse.com oz sdkcritic.com zbrati vse nejasne napake v eno zbirko podatkov. Edina druga alternativa je pridobiti proizvajalce originalne opreme, da ustrezno dokumentirajo te spremembe ali pa jih sploh nehajo izvajati, vendar vso srečo s tem.
Zasluge za slikovne značilnosti: OpenSignal