Androidin pirstoutumisen valitettava tila: Esimerkki kehittäjien ahdingon ymmärtämisestä

Keskiverto Android-käyttäjä on luultavasti kauan sitten lakannut välittämästä Androidin "fragmentoitumisongelmasta". Mutta ongelma kummittelee edelleen kehittäjiä.

Pirstoutuminen on ollut kiistanalainen ongelma Androidissa aivan kirjaimellisesti mobiilikäyttöjärjestelmän julkistamisen jälkeen.

Sen lisäksi, että se on peikkojen nuijana online-liekkisodissa, pirstoutumisesta johtuva monimuotoisuus nähdään nykyään suurelta osin nettopositiivinen kuluttajille Android-laitteista. Loppujen lopuksi meille on annettu niin paljon vapautta valita sellainen laite, jossa on haluamasi ohjelmisto, että keskivertokuluttajan on vaikea välittää pirstoutumisesta. Android-laitteiden uskomattoman valikoiman visualisointi tuottaa kauniin mosaiikin Androidin monipuolisesta esityksestä.

Esimerkki Android-laitteen pirstoutumisesta OpenSignal-sovelluksen sovellusasennuksiin. Lähde: OpenSignal

Mutta laitteiston ja ohjelmiston pirstoutuminen ei tee onnelliseksi ohjelmistokehittäjäksi. Itse asiassa aivan päinvastoin. Sovelluksen kehittäminen niin monille eri laitteisto- ja ohjelmistokokoonpanoille voi osoittautua suureksi haitaksi virheenkorjauksen aikana. OEM-valmistajat voivat tehdä suuria tai hienovaraisia ​​muutoksia, jotka on otettava huomioon sovellusta kehitettäessä, mutta yksittäisellä kehittäjällä ei todellakaan ole helppoa tapaa varmistaa, että heidän sovelluksensa toimii yleisesti. Vaikka keskivertokuluttaja on jo kauan sitten unohtanut hajanaisuuskeskustelun, ongelma kummittelee edelleen Androidia sovelluskehittäjät, eikä sille näytä olevan muuta tekemistä kuin imeä se ja käsitellä virheitä heidän näkyviin.


Surullinen pirstoutumisen tila

Etenkin yksi OEM-valmistaja saa suuren osan vihaa päänsärystä, jonka he aiheuttavat kehittäessään sovellusta – Samsung. Kehittäjät ovat huutaneet Samsungista jo vuosia, ja jotkut ovat kirjoittaneet jopa sellaisia ​​loukkaavia teoksia kuin "Samsungille on erityinen paikka Android-helvetissä", joka kuvaa erityisen turhauttavaa vikaa, joka johtuu siitä Samsung-laitteet ja tukisovelluscompat-kirjasto. Haluaisin kiinnittää huomion erityisesti yhteen kappaleeseen herra Ambrin höpötyksestä, joka linjaa erinomaisesti, miksi kehittäjät välittävät edelleen pirstoutumisesta:

Jos olet Android-kehittäjä, vihasi Samsung-laitteita kohtaan on luultavasti rajatonta. Enemmän kuin tavallinen käyttäjä, jolle Samsung on synonyymi typerä Touchwiz ja liiallinen bloatware, halveksit Samsungia, koska sinulla ei ole vaihtoehtoja. Samsungin takia valtava markkinaosuus, et yksinkertaisesti voi päättää olla tuematta Samsung-laitteita. Ja se sattuu eniten; se, että tämä valinta on otettu sinulta pois!

Tämäkään ei ole huuto Androidin vanhoilta vuosilta – tämä postaus julkaistiin viime vuoden joulukuun puolivälissä. Ilmoitan heti, että en ole varma, onko tämä ongelma vielä virallisesti korjattu, mutta Mr. Ambri on tarjonnut korjauksen viestiinsä kaikille, jotka törmäävät hänen huutoonsa Google-haun kautta bugi. Sinun tarvitsee vain käyttää ProGuard seuraavalla yhdellä koodirivillä:

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

Ei se nyt niin paha ole, eihän? Ongelmana on kuitenkin, että tämä korjaus poistettiin Stack Overflowsta. Älä ymmärrä minua väärin, Stack Overflow on loistava verkkosivusto. Se ei kuitenkaan ole ihanteellinen lähde sovelluksiisi liittyvien korjausten löytämiseen. Jonkin löytäminen Stack Overflowsta edellyttää usein linkkien syvällistä sukeltamista monien Google-hakujen jälkeen. Joskus huomaat jopa toisen käyttäjän mainitsevan saman bugin, joka sinulla on ollut, mutta ilman korjausta näköpiirissä. Tai vielä turhauttavampia ovat ajat, kun löydät ketjun, johon alkuperäinen juliste on väittänyt ovat löytäneet korjauksen, mutta he ovat jo kauan sitten hylänneet ketjunsa neuvomatta muita korjaamaan ongelma ongelma.

Lähde: XKCD

Esimerkki hienovaraisesta pirstoutumisongelmasta

En ole itse kehittäjä, mutta tunnen Androidin ominaisuudet vuosien Taskerissa puuhailun jälkeen sen verran, että olen alkanut pseudo-ohjelmoida omia ratkaisujani kohtaamiani ongelmiin. Ja kun en saa selvää jostain, Googletan sen, kuten kaikki muutkin. Kun olin kirjoittamassa edellistä artikkeliani aiheesta etsiä piilotettuja toimintoja puhelimen Asetukset-sovelluksessa, törmäsin melko oudoon virheeseen, jota en voinut selittää. Huawei-laitteille ainutlaatuinen bugi.

Aina kun yritin käynnistää tiettyjä toimintoja (kuten "Testaus"-valikkoa, joka sisältää sovelluksen käyttötilastot) Asetukset-sovelluksessa, kohtasin aina lupavirheen. Erityisesti sovellukselta, jota käytin toiminnan aloittamiseen, puuttui lupa huawei.android.permission. HW_SIGNATURE_OR_SYSTEM. Mikään muu testaamani laite ei vaatinut ainutlaatuisia käyttöoikeuksia näiden asetustoimintojen käynnistämiseen, vain puhelimet, joissa on Huawein Android-versio (EMUI). Analyysi aiheesta com.android.settings paljasti, että tietyt Asetukset-sovelluksen toiminnot olivat todellakin suojaustason alaisia, jotka vaativat joko allekirjoitus tai järjestelmälupa.

Valitettavasti minulle tämä tarkoittaa, että vain sovellukset, jotka on asennettu hakemistoon /system tai sovellukset, jotka on allekirjoitettu samalla allekirjoitus, koska Asetukset-sovellus voisi avata nämä toiminnot samalla tavalla kuin olin yrittää. Kun Google etsin tästä virheestä vastausta, löysin (arvasit sen) a Pino Overflow lanka. Ongelmansa julkaissut kehittäjä törmäsi samaan ongelmaan kuin minä (vaikka hän oli itse kehittämässä sovellusta). Hänen ongelmansa ilmeni, kun hän yritti suorittaa seuraavan koodin:

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

Tarkoituksena olevien merkkijonojen ja kehittäjän verkkosivun perusteella hän todennäköisesti yritti antaa käyttäjän valita kolmannen osapuolen sovelluksen median toistamiseksi. Korjaus, jonka tarjoaa veteraanikehittäjä CommonsWare, oli melko yksinkertainen: käytä Tahallisuus. LuoChooser sijasta ACTION_PICK_ACTIVITY. Kuitenkin, miksi pitäisikö meidän ottaa tämä korjaus käyttöön? Miksi vaatiiko Huawei tämän luvan? Miksi pitikö meidän löytää vastaus StackOverflowsta käyttämällä hyvin tarkkaa Google-hakua?


Valinnan paradoksi

Löytääksesi vastauksen, CommonsWare teki virheilmoituksen Android-virheenseurantaohjelmassa ja pyytää Googlea tutkimaan ongelmaa. Erityisesti kehittäjä pyysi Googlea estämään dokumentoimattomia lupavaatimuksia estämästä kolmannen osapuolen sovelluksia pääsemästä kohteeseen ACTION_PICK_ACTIVITY. Kirjoittamalla nämä vaatimukset sisään CTS, Huawein olisi pakko noudattaa näitä muutoksia.

Rehellisesti sanottuna tämä vika itsessään ei kuitenkaan todellakaan ole iso juttu. Vaikka mikään muu kokeilemani sovellus (kuten Tasker) ei pystynyt kiertämään tätä lupaa vaatimuksen ja käynnistää tiettyjä toimintoja Asetukset-sovelluksessa, en ollut juuri pettynyt lopputulos. Mutta kun muistin herra Ambrin huudon, tajusin, että näiden kaltaisten pienten muutosten on oltava erittäin turhauttavaa käsitellä, varsinkin koska niin pieniä kuin ne ovatkin, ne epäilemättälaskea yhteen, joskus tarpeeksi aiheuttaa päänsärkyä. Yksi pieni muutos Asetukset-sovellukseen voi johtaa ansaitsemattomaan negatiiviseen arvosteluun kehittäjälle. Yksi pieni muutos, joka on melko huonosti dokumentoitu ja vaati minua etsimään Internetistä Stack Overflow -säiettä. Kuinka paljon muita pieniä bugeja muissa laitteissa on?

Lisääntynyt kilpailu mobiilialalla on osoittautunut suureksi kuluttajalle, mutta nähtyään kuinka nämä hienovaraiset muutokset Niin monilla eri tuotelinjoilla voi vaikuttaa kehittäjiin, olen alkanut arvostaa kehittäjien näkemystä pirstoutuminen. Ongelmana ei ole itse valinta, vaan pikemminkin se, että yhteisö ei tee tarpeeksi luetteloidakseen näitä asioita. Kuten herra Ambri ehdotti artikkelissaan, ehkä Android-kehittäjät tarvitsevat oman versionsa caniuse.com tai sdkcritic.com kerätä kaikki epäselvät virheet yhteen tietokantaan. Ainoa toinen vaihtoehto on saada OEM-valmistajat joko dokumentoimaan nämä muutokset kunnolla tai lopettamaan niiden tekemisen, mutta onnea sen kanssa.

Ominaisuuskuvan tekijät: OpenSignal