Diemžēl Android sadrumstalotības stāvoklis: piemērs, lai izprastu izstrādātāju nožēlojamo stāvokli

Vidējais Android lietotājs, iespējams, jau sen vairs neuztraucas par Android "sadrumstalotības problēmu". Taču problēma joprojām vajā izstrādātājus.

Sadrumstalotība ir bijusi strīdīga problēma operētājsistēmā Android burtiski kopš mobilās operētājsistēmas paziņošanas.

Sadrumstalotības radītā daudzveidība tagad tiek uzskatīta ne tikai par ķērienu, ko troļļi var izmantot tiešsaistes liesmu karos. neto pozitīvs patērētājiem no Android ierīcēm. Galu galā mums ir dota tik liela brīvība izvēlēties ierīci ar tādu programmatūru, kādu mēs vēlamies, ka vidusmēra patērētājam ir grūti rūpēties par sadrumstalotību. Vizualizējot neticami daudzveidīgo Android ierīču klāstu, tiek iegūta skaista Android daudzveidīgā attēlojuma mozaīka.

Android ierīču sadrumstalotības piemērs, pamatojoties uz OpenSignal lietotnes instalācijām. Avots: OpenSignal

Taču aparatūras un programmatūras sadrumstalotība nepadara laimīgu programmatūras izstrādātāju. Patiesībā gluži otrādi. Lietojumprogrammas izstrāde tik daudzām dažādām aparatūras un programmatūras konfigurācijām var izrādīties liels traucēklis atkļūdošanas laikā. Oriģinālo iekārtu ražotāji var veikt lielas vai smalkas izmaiņas, kas jāņem vērā, izstrādājot lietotni, taču atsevišķam izstrādātājam patiešām nav vienkārša veida, kā nodrošināt, ka viņu lietotne darbosies universāli. Lai gan vidusmēra patērētājs jau sen ir aizmirsis par sadrumstalotības debatēm, šī problēma joprojām vajā Android lietotņu izstrādātājiem, un šķiet, ka tur nav ko darīt, izņemot to, lai to izsūktu un tiktu novērstas kļūdas parādās.


Nožēlojamais sadrumstalotības stāvoklis

Īpaši viens oriģinālo iekārtu ražotājs saņem lielu naida daļu par galvassāpēm, ko tie izraisa, izstrādājot lietotni — Samsung. Izstrādātāji jau gadiem ilgi ir ņaudējuši par Samsung, daži pat raksta tādus aizskarošus darbus kā "Android ellē ir īpaša vieta Samsung", kas apraksta īpaši nomāktu kļūdu, kas izriet no Samsung ierīces un atbalsta appcompat bibliotēka. Īpaši vēlos vērst uzmanību uz vienu rindkopu no Ambri kunga rēkšanas, kas lieliski iezīmē to, kāpēc izstrādātājiem joprojām rūp sadrumstalotība:

Ja esat Android izstrādātājs, jūsu naids pret Samsung ierīcēm, iespējams, ir bezgalīgs. Vairāk nekā vidusmēra lietotājs, kuram Samsung ir sinonīms dumjš Touchwiz un pārmērīga bloatware, jūs nicināt Samsung, jo jums nav izvēles. Samsung dēļ milzīga tirgus daļa, jūs vienkārši nevarat izvēlēties neatbalstīt Samsung ierīces. Un tas ir tas, kas visvairāk sāp; tas, ka šī izvēle tev ir atņemta!

Tas arī nav rēciens no senajiem Android pastāvēšanas gadiem – šis ieraksts tika publicēts pagājušā gada decembra vidū. Es būšu atklāts un paziņošu, ka neesmu pārliecināts, vai šī problēma vēl ir oficiāli novērsta, tomēr Mr. Ambri savā ziņojumā ir nodrošinājis labojumus ikvienam, kurš, izmantojot Google meklēšanu, uzduras viņa runai kļūda. Viss, kas jums jādara, ir izmantot ProGuard ar šādu vienu koda rindiņu:

# 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.** {*;}

Tas nav tik slikti, vai ne? Tomēr problēma ir tā, ka šis labojums tika noņemts no Stack Overflow. Nepārprotiet mani, Stack Overflow ir lieliska vietne. Taču tas nav īsti ideāls avots, lai atklātu jūsu lietotņu labojumus. Lai atrastu kaut ko pakalpojumā Stack Overflow, bieži vien ir jāiedziļinās saitēs pēc daudziem Google meklēšanas vaicājumiem. Dažreiz jūs pat pamanīsit, ka kāds cits lietotājs piemin to pašu kļūdu, kas ir bijusi jums, taču bez labojuma. Vai vēl vairāk nomākta ir gadījumi, kad atrodat pavedienu, uz kuru apgalvoja sākotnējais plakāts ir atraduši labojumu, taču viņi jau sen ir pametuši savu pavedienu, nedodot norādījumus citiem, kā to labot izdevums.

Avots: XKCD

Smalkas sadrumstalotības problēmas piemērs

Pats neesmu izstrādātājs, taču esmu pietiekami iepazinies ar Android iespējām pēc gadiem ilgas čalošanās programmā Tasker, tāpēc esmu sācis pseidoprogrammēt savus risinājumus problēmām, ar kurām esmu saskāries. Un, kad es nevaru kaut ko izdomāt, es to Google, tāpat kā visi citi. Kamēr es rakstīju savu iepriekšējo rakstu par slēptās darbības meklējiet tālruņa lietotnē Iestatījumi, es saskāros ar diezgan dīvainu kļūdu, ko nevarēju izskaidrot. Kļūda, kas ir unikāla tikai Huawei ierīcēm.

Ikreiz, kad es mēģināju sākt noteiktas darbības (piemēram, izvēlni “Testēšana”, kurā ir ietverta lietotņu lietošanas statistika) lietotnē Iestatījumi, man vienmēr tika parādīta atļaujas kļūda. Jo īpaši lietotnei, kuru izmantoju, lai sāktu darbību, trūka atļaujas huawei.android.permission. HW_SIGNATURE_OR_SYSTEM. Nevienai citai pārbaudītai ierīcei nebija vajadzīgas unikālas atļaujas, lai palaistu šīs iestatījumu darbības, tikai tālruņiem, kuros darbojas Huawei Android (EMUI) versija. Analīze par com.android.settings atklāja, ka noteiktas darbības lietotnē Iestatījumi patiešām bija zem aizsardzības līmeņa, kas prasīja vai nu paraksts vai sistēmas atļauja.

Diemžēl man tas nozīmē, ka tikai lietotnes, kas instalētas sadaļā /system, vai lietotnes, kas parakstītas ar to pašu parakstu, jo lietotne Iestatījumi varētu atvērt šīs darbības, izmantojot metodi, ko es izmantoju mēģinot. Kad es Google meklēju šo kļūdu, lai atrastu atbildi, es (jūs uzminējāt) atradu a Stack Overflow pavediens. Izstrādātājs, kurš publicēja savu problēmu, saskārās ar to pašu problēmu, ko es (lai gan viņš faktiski izstrādāja lietotni). Viņa problēma radās, kad viņš mēģināja palaist šādu kodu:

<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>

Spriežot pēc nolūka virknēm un izstrādātāja tīmekļa lapas, viņš, iespējams, mēģināja ļaut lietotājam izvēlēties trešās puses lietotni, kurā atskaņot kādu multivides saturu. Labojumu nodrošina veterāns izstrādātājs CommonsWare, bija pavisam vienkārši: izmantojiet Nolūks. IzveidotChooser tā vietā ACTION_PICK_ACTIVITY. tomēr kāpēc vai mums ir jāievieš šis labojums? Kāpēc vai Huawei vispirms ir nepieciešama šī atļauja? Kāpēc vai mums bija jāatrod atbilde vietnē StackOverflow, izmantojot ļoti specifisku Google meklēšanu?


Izvēles paradokss

Lai rastu atbildi, CommonsWare iesniedza kļūdu ziņojumu Android kļūdu izsekotājā, lūdzot Google izpētīt šo problēmu. Jo īpaši izstrādātājs pieprasīja, lai Google neļautu nedokumentētām atļauju prasībām ierobežot trešo pušu lietotņu piekļuvi ACTION_PICK_ACTIVITY. Ierakstot šīs prasības iekš CTS, Huawei būtu spiests ievērot šīs izmaiņas.

Tomēr, godīgi sakot, šī kļūda patiešām nav liela problēma. Lai gan neviena cita lietotne, ko esmu izmēģinājusi (piemēram, Tasker), nevarēja apiet šo atļauju prasību un palaist noteiktas darbības lietotnē Iestatījumi, es nebiju vīlusies iznākums. Bet, kad es atcerējos Ambri kunga izsaucienu, es sapratu, ka tādas mazas izmaiņas kā šīs ir ļoti nomāktas, jo īpaši jo, lai cik niecīgi tie būtu, viņi neapšaubāmisaskaitīt, dažreiz pietiekami, lai izraisītu galvassāpes. Vienas nelielas izmaiņas lietotnē Iestatījumi var izraisīt nepelnīti negatīvu atsauksmi pret izstrādātāju. Viena niecīga izmaiņa, kas ir diezgan slikti dokumentēta un kuras dēļ man bija jāmeklē internetā Stack Overflow pavediens. Cik daudz citu mazu kļūdu ir citās ierīcēs?

Palielināta konkurence mobilajā telpā ir izrādījusies lieliska patērētājiem, taču, redzot, kā šīs smalkās izmaiņas Tik daudz dažādu produktu līniju var ietekmēt izstrādātājus, tāpēc esmu sapratis izstrādātāju viedokli sadrumstalotība. Problēma nav tā, ka pati izvēle ir problēma, bet gan tas, ka sabiedrība nedara pietiekami daudz, lai uzskaitītu šīs problēmas. Kā Ambri kungs ieteica savā rakstā, iespējams, Android izstrādātājiem ir nepieciešama sava versija caniuse.com vai sdkcritic.com lai apkopotu visas neskaidrās kļūdas vienā datu bāzē. Vienīgā cita alternatīva ir likt oriģinālo iekārtu ražotājiem vai nu pareizi dokumentēt šīs izmaiņas, vai arī pārtraukt to veikšanu, bet lai veicas ar to.

Funkciju attēlu kredīti: OpenSignal