Жалосно стање фрагментације Андроида: Пример за разумевање невоље програмера

Просечан корисник Андроид-а вероватно је одавно престао да брине о Андроид-овом „проблему фрагментације“. Али проблем и даље прогања програмере.

Фрагментација је спорно питање у Андроиду буквално откако је најављен мобилни оперативни систем.

Осим што је батина коју тролови користе у онлајн ватреним ратовима, разноликост која долази са фрагментацијом се сада у великој мери посматра као нето позитивно за потрошаче Андроид уређаја. На крају крајева, дато нам је толико слободе у избору врсте уређаја са врстом софтвера који желимо да је просечном потрошачу тешко да брине о фрагментацији. Визуелизација невероватне разноликости Андроид уређаја производи прелеп мозаик разноврсног приказа Андроид-а.

Пример фрагментације Андроид уређаја заснованог на инсталацијама апликације ОпенСигнал-ове апликације. Извор: ОпенСигнал

Али фрагментација хардвера и софтвера не чини срећног програмера софтвера. У ствари, сасвим супротно. Развој апликације на толико различитих хардверских и софтверских конфигурација може се показати као велика сметња приликом отклањања грешака. Произвођачи оригиналне опреме могу направити велике или суптилне промене које треба узети у обзир приликом развоја апликације, али заиста не постоји једноставан начин да индивидуални програмери осигурају да ће њихова апликација радити универзално. Иако је просечан потрошач одавно заборавио на расправу о фрагментацији, проблем још увек прогања Андроид програмери апликација и наизглед нема шта да се ради у вези са тим осим да се усисава и бави се грешкама док појавити.


Жао ми је стање фрагментације

Нарочито један ОЕМ добија велики део мржње због главобоље које изазивају приликом развоја апликације – Самсунг. Програмери већ годинама лапрдају о Самсунг-у, неки чак пишу тако оштре текстове као што су „Постоји посебно место за Самсунг у Андроид паклу" који описује посебно фрустрирајућу грешку која потиче од Самсунг уређаји и библиотека за подршку апликацијама. Желео бих да скренем пажњу на један параграф посебно из зезања господина Амбрија, који одлично описује зашто је програмерима још увек стало до фрагментације:

Ако сте Андроид програмер, ваша мржња према Самсунг уређајима је вероватно безгранична. Више од просечног корисника, за кога је Самсунг синоним силли Тоуцхвиз и прекомерно блоатваре, презирете Самсунг јер немате избора. Због Самсунг-а огроман удео на тржишту, једноставно не можете изабрати да не подржавате Самсунг уређаје. И то је оно што највише боли; чињеница да вам је овај избор одузет!

Ово није ни зезање из давних година постојања Андроид-а - овај пост је објављен средином децембра прошле године. Бићу искрен и рећи да нисам сигуран да ли је ово питање још званично решено, међутим, г. Амбри је дао исправку у свом посту за свакога ко наиђе на његово лајање путем Гоогле претраге за буг. Све што треба да урадите је да користите ПроГуард са следећим једним редом кода:

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

То и није тако лоше, зар не? Проблем је, међутим, што је ова поправка извучена из Стацк Оверфлов-а. Немојте ме погрешно схватити, Стацк Оверфлов је одлична веб локација. Али то заправо није идеалан извор за откривање поправки за ваше апликације. Проналажење нечега на Стацк Оверфлов-у често укључује дубоко удубљивање у везе након многих покушаја и грешака Гоогле претрага. Понекад ћете чак наћи да други корисник помиње исту грешку коју сте имали, али без поправке на видику. Или још фрустрирајуће су тренуци када пронађете нит на којој је оригинални постер тврдио су пронашли решење, али су одавно напустили своју нит без инструкција других како да поправе питање.

Извор: КСКЦД

Пример проблема са суптилном фрагментацијом

И сам нисам програмер, али сам довољно упознат са могућностима Андроид-а након година петљања у Таскеру да сам почео да псеудопрограмирам сопствена решења за проблеме са којима сам се суочио. А кад нешто не могу да схватим, гуглам, као и сви други. Док сам био у процесу писања свог претходног чланка о копање по апликацији Подешавања на телефону за скривене активности, наишао сам на прилично чудну грешку коју нисам могао да објасним. Грешка јединствена за Хуавеи уређаје.

Кад год бих покушао да покренем одређене активности (као што је мени „Тестирање“ који садржи статистику коришћења апликације) у оквиру апликације Подешавања, увек бих се сусрео са грешком у дозволи. Конкретно, апликација коју сам користио за покретање активности није имала дозволу хуавеи.андроид.пермиссион. ХВ_СИГНАТУРЕ_ОР_СИСТЕМ. Ниједан други уређај који сам тестирао није захтевао јединствене дозволе за покретање ових активности подешавања, само телефони који користе Хуавеи верзију Андроид-а (ЕМУИ). Анализа о цом.андроид.сеттингс открили су да су одређене активности у апликацији Подешавања заиста биле под нивоом заштите који је захтевао или потпис или системску дозволу.

На моју несрећу, то значи да су само апликације инсталиране под /систем или апликације потписане са истим потпис јер би апликација Подешавања могла да отвори ове активности користећи метод који сам ја био покушавајући. Када сам на Гоогле-у тражио одговор на ову грешку, наишао сам (погађате) на а Стацк Оверфлов нит. Програмер који је објавио свој проблем наишао је на исти проблем као и ја (иако је он заправо био у процесу развоја апликације). Његов проблем је настао када је покушао да покрене следећи код:

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

Судећи по стринговима у намери и веб страници програмера, вероватно је покушавао да дозволи кориснику да изабере апликацију треће стране у којој ће репродуковати неке медије. Исправка коју је обезбедио ветеран програмер ЦоммонсВаре, било је прилично једноставно: користите Намера. ЦреатеЦхоосер уместо АЦТИОН_ПИЦК_АЦТИВИТИ. Међутим, зашто да ли треба да применимо ову исправку? Зашто да ли Хуавеи уопште захтева ову дозволу? Зашто да ли смо морали да пронађемо одговор на СтацкОверфлов користећи веома специфичну Гоогле претрагу?


Парадокс избора

Да нађем одговор, ЦоммонсВаре је поднео извештај о грешци на Андроид праћењу грешака захтевајући да Гоогле испита проблем. Конкретно, програмер је захтевао да Гоогле забрани недокументованим захтевима за дозволе за спречавање приступа апликацијама трећих страна АЦТИОН_ПИЦК_АЦТИВИТИ. Уписивањем ових захтева у ЦТС, Хуавеи би био приморан да се придржава ових промена.

Да будем искрен, међутим, ова грешка сама по себи није велика ствар. Иако ниједна друга апликација коју сам испробао (као што је Таскер) није успела да заобиђе ову дозволу захтев и покретање одређених активности у оквиру апликације Подешавања, нисам баш био разочаран исход. Али када сам се сетио зезања господина Амбрија, схватио сам да мале промене попут ових морају бити веома фрустрирајуће за суочавање, посебно јер колико год били сићушни, несумњивосабрати, понекад довољно да изазове главобољу. Једна мала промена у апликацији Подешавања може довести до незаслужене негативне критике програмера. Једна мала промена која је прилично лоше документована и захтевала је од мене да претражујем интернет у потрази за нити за преливање стека. Колико других малих грешака има на другим уређајима?

Повећана конкуренција у мобилном простору показала се одличном за потрошача, али након што смо видели како се ове суптилне промене преко толико различитих линија производа може утицати на програмере, ценио сам поглед на програмере фрагментација. Не ради се о томе да је сам избор проблем, већ да заједница не чини довољно да каталогизира ова питања. Као што је господин Амбри предложио у свом чланку, можда је Андроид програмерима потребна сопствена верзија цаниусе.цом или сдкцритиц.цом да прикупи све нејасне грешке у једну базу података. Једина друга алтернатива је да се произвођачи оригиналне опреме или правилно документују ове промене или престану да их праве, али сретно са тим.

Заслуге за слике: ОпенСигнал