Atsiprašome dėl „Android“ susiskaidymo: pavyzdys, kaip suprasti kūrėjų padėtį

Paprastam „Android“ naudotojui tikriausiai jau seniai neberūpi „Android“ „suskaldymo problema“. Tačiau ši problema vis dar persekioja kūrėjus.

Nuo tada, kai buvo paskelbta mobilioji operacinė sistema, „Android“ susiskaidymas buvo ginčytinas klausimas.

Įvairovė, atsirandanti dėl susiskaidymo, dabar yra ne tik kaip trolių priekaba, kurią gali naudoti internetiniuose liepsnos karuose. grynasis teigiamas vartotojams „Android“ įrenginių. Galų gale, mums suteikta tiek daug laisvės renkantis įrenginį su tokia programine įranga, kokios norime, kad paprastam vartotojui sunku rūpintis fragmentacija. Vizualizavus neįtikėtiną „Android“ įrenginių įvairovę, gaunama graži „Android“ vaizdų mozaika.

„Android“ įrenginio suskaidymo pavyzdys, pagrįstas „OpenSignal“ programos diegimu. Šaltinis: OpenSignal

Tačiau aparatinės ir programinės įrangos susiskaidymas nėra laimingas programinės įrangos kūrėjas. Tiesą sakant, visiškai priešingai. Programos kūrimas įvairiose aparatinės ir programinės įrangos konfigūracijų derinimo metu gali būti didelis nepatogumas. OĮG gali atlikti didelių ar subtilių pakeitimų, į kuriuos reikia atsižvelgti kuriant programą, tačiau individualus kūrėjas tikrai nelengva užtikrinti, kad jų programa veiktų visuotinai. Nors paprastas vartotojas jau seniai pamiršo diskusiją apie susiskaidymą, ši problema vis dar persekioja „Android“. programų kūrėjai ir, atrodo, nieko nereikia daryti, išskyrus tai, kad reikia įsiurbti ir spręsti klaidas pasirodyti.


Apgailėtina suskaidymo būsena

Ypač vienas originalios įrangos gamintojas patiria didžiulę neapykantos dalį dėl galvos skausmo, kurį sukelia kuriant programą – „Samsung“. Kūrėjai jau daugelį metų pykčioja apie „Samsung“, kai kurie netgi rašo tokius įžeidžiančius kūrinius kaip „„Android“ pragare yra speciali vieta „Samsung“.“, kuriame aprašoma ypač varginanti klaida, kylanti iš „Samsung“ įrenginiai ir palaikymo programa „Compat“ biblioteka. Norėčiau ypač atkreipti dėmesį į vieną pastraipą iš pono Ambri pasipiktinimo, kuri puikiai nusako, kodėl kūrėjams vis dar rūpi susiskaidymas:

Jei esate „Android“ kūrėjas, jūsų neapykanta „Samsung“ įrenginiams tikriausiai yra beribė. Daugiau nei paprastas vartotojas, kuriam Samsung yra sinonimas kvailas Touchwiz ir per daug „bloatware“., tu niekini Samsung, nes neturi kito pasirinkimo. Dėl Samsung didžiulė rinkos dalis, tiesiog negalite pasirinkti nepalaikyti „Samsung“ įrenginių. Ir tai skaudžiausia; faktas, kad šis pasirinkimas iš jūsų atimtas!

Tai irgi ne senų „Android“ gyvavimo metų išsišokimas – šis įrašas buvo paskelbtas praėjusių metų gruodžio viduryje. Būsiu atviras ir pareiškiu, kad nesu tikras, ar ši problema dar oficialiai išspręsta, tačiau p. Ambri savo įraše pateikė pataisą tiems, kurie suklupo per „Google“ paiešką klaida. Viskas, ką jums reikia padaryti, tai naudoti ProGuard su šia viena kodo eilute:

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

Tai nėra taip blogai, ar ne? Tačiau problema ta, kad šis pataisymas buvo pašalintas iš „Stack Overflow“. Nesupraskite manęs neteisingai, „Stack Overflow“ yra puiki svetainė. Tačiau tai nėra idealus šaltinis norint rasti programų pataisymus. Norint ką nors rasti „Stack Overflow“, dažnai reikia naršyti per nuorodas po daugybės „Google“ paieškų, kuriose buvo atlikta bandymų ir klaidų. Kartais netgi pastebėsite, kad kitas vartotojas paminėjo tą pačią klaidą, su kuria susidūrėte jūs, bet nematyti pataisymo. Arba dar labiau apmaudu, kai randi giją, kurioje teigia originalus plakatas rado pataisymą, bet jie jau seniai atsisakė savo temos nenurodydami kitiems, kaip taisyti sutrikimas.

Šaltinis: XKCD

Subtilios suskaidymo problemos pavyzdys

Pats nesu kūrėjas, bet esu pakankamai susipažinęs su „Android“ galimybėmis po ilgų metų trukdymo „Tasker“, kad pradėjau pseudoprogramuoti savo problemų, su kuriomis susidūriau, sprendimus. Ir kai ko nors nesuprantu, aš, kaip ir visi kiti, naudoju Google. Kol aš rašiau savo ankstesnį straipsnį apie ieškokite paslėptos veiklos telefono Nustatymų programoje, aptikau gana keistą klaidą, kurios negalėjau paaiškinti. Unikali „Huawei“ įrenginių klaida.

Kaskart, kai bandydavau pradėti tam tikrą veiklą (pvz., meniu „Testavimas“, kuriame yra programos naudojimo statistika) programoje „Nustatymai“, visada sutikdavau leidimo klaidą. Visų pirma, programai, kurią naudojau pradėdamas veiklą, trūko leidimo huawei.android.permission. HW_SIGNATURE_OR_SYSTEM. Jokiam kitam mano išbandytam įrenginiui nereikėjo jokių unikalių leidimų, kad būtų galima pradėti šią nustatymų veiklą, tik telefonams, kuriuose veikia „Huawei“ „Android“ (EMUI) versija. Analizė apie com.android.settings atskleidė, kad kai kurioms nustatymų programėlės veikloms iš tiesų buvo taikomas apsaugos lygis, dėl kurio reikėjo arba parašas arba sistemos leidimas.

Deja, man tai reiškia, kad tik programos, įdiegtos pagal /sistemą, arba programos, pasirašytos tuo pačiu parašas, nes „Nustatymų“ programa galėtų atidaryti šias veiklas naudodama metodą, kuriuo buvau bandant. Kai „Google“ ieškojau šios klaidos atsakymo, aš (jūs atspėjote) aptikau a Stack Overflow sriegis. Kūrėjas, paskelbęs savo problemą, susidūrė su ta pačia problema, kurią aš (nors jis iš tikrųjų kūrė programą). Jo problema kilo, kai jis bandė paleisti šį kodą:

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

Sprendžiant pagal ketinimų eilutes ir kūrėjo tinklalapį, jis greičiausiai bandė leisti vartotojui pasirinkti trečiosios šalies programą, kurioje būtų galima leisti tam tikrą mediją. Pataisymą pateikė kūrėjas veteranas CommonsWare, buvo gana paprasta: naudoti Tikslas. SukurtiChooser vietoj ACTION_PICK_ACTIVITY. Tačiau kodėl ar turėtume įgyvendinti šį pataisymą? Kodėl ar „Huawei“ pirmiausia reikalingas šis leidimas? Kodėl ar mums reikėjo rasti atsakymą „StackOverflow“ naudojant labai specifinę „Google“ paiešką?


Pasirinkimo paradoksas

Norėdami rasti atsakymą, „CommonsWare“ pateikė pranešimą apie klaidą „Android“ klaidų stebėjimo priemonėje, prašydami, kad „Google“ išnagrinėtų problemą. Visų pirma kūrėjas paprašė, kad „Google“ neleistų dokumentais nepateiktiems leidimo reikalavimams apriboti trečiųjų šalių programoms prieigą prie ACTION_PICK_ACTIVITY. Įrašydami šiuos reikalavimus į CTS, „Huawei“ būtų priverstas laikytis šių pakeitimų.

Tiesa, pati ši klaida tikrai nėra didelė problema. Nors jokia kita mano bandyta programa (pvz., Tasker) negalėjo apeiti šio leidimo reikalavimą ir paleisti tam tikrą veiklą nustatymų programoje, aš tikrai nenusivyliau rezultatas. Tačiau kai prisiminiau pono Ambri pasipiktinimą, supratau, kad tokie maži pokyčiai, kaip šie, turi būti labai varginantys, ypač nes kad ir kokie maži jie būtų, be jokios abejonėsPridėti, kartais pakankamai, kad sukeltų galvos skausmą. Dėl vieno nedidelio nustatymų programos pakeitimo kūrėjas gali gauti nepelnytą neigiamą apžvalgą. Vienas nedidelis pakeitimas, kuris yra gana menkai dokumentuotas ir dėl kurio man reikėjo ieškoti „Stack Overflow“ gijos internete. Kiek kitų mažų klaidų yra kituose įrenginiuose?

Padidėjusi konkurencija mobiliojoje erdvėje pasirodė esanti puiki vartotojui, tačiau pamačius, kaip šie subtilūs pokyčiai tiek daug skirtingų produktų linijų gali turėti įtakos kūrėjams, aš pradėjau vertinti kūrėjų požiūrį suskaidymas. Problema yra ne pats pasirinkimas, o tai, kad bendruomenė nepakankamai deda šias problemas kataloge. Kaip savo straipsnyje pasiūlė ponas Ambri, galbūt „Android“ kūrėjams reikia savo versijos caniuse.com arba sdkcritic.com surinkti visas neaiškias klaidas į vieną duomenų bazę. Vienintelė kita alternatyva – priversti originalias įrangos gamintojus tinkamai dokumentuoti šiuos pakeitimus arba nustoti juos daryti, bet Sėkmės su tuo.

Funkcijų vaizdo kreditai: OpenSignal