Пересічного користувача Android, ймовірно, давно перестали хвилювати «проблема фрагментації» Android. Але ця проблема все ще не дає спокою розробникам.
Фрагментація була спірною проблемою в Android буквально з моменту оголошення мобільної операційної системи.
Окрім того, що тролі можуть використовувати палицю в онлайн-флейм-війні, різноманітність, яка приходить із фрагментацією, зараз сприймається як чистий позитивний результат для споживачів пристроїв Android. Зрештою, ми маємо стільки свободи у виборі типу пристрою з програмним забезпеченням, яке ми хочемо, що пересічному споживачеві важко піклуватися про фрагментацію. Візуалізація неймовірної різноманітності пристроїв Android створює прекрасну мозаїку різноманітних представлень Android.
Але фрагментація апаратного та програмного забезпечення не робить розробника програмного забезпечення щасливим. Насправді зовсім навпаки. Розробка програми з такою кількістю різних апаратних і програмних конфігурацій може виявитися серйозною неприємністю під час налагодження. Виробники оригінального обладнання можуть вносити значні чи незначні зміни, які потрібно враховувати під час розробки програми, але насправді немає простого способу для окремого розробника переконатися, що його програма працюватиме універсально. Хоча пересічний споживач давно забув про дебати щодо фрагментації, ця проблема все ще переслідує Android розробникам додатків, і, здавалося б, з цим нічого не можна зробити, окрім як висмоктувати це та мати справу з помилками, коли вони з'являтися.
Вибачний стан роздробленості
Зокрема, один OEM отримує велику порцію ненависті через головний біль, який вони спричиняють під час розробки програми – Samsung. Розробники вже багато років говорять про Samsung, деякі навіть пишуть такі різкі статті, як "Для Samsung є особливе місце в Android Hell", який описує особливо неприємну помилку, яка походить від Пристрої Samsung і бібліотека підтримки appcompat. Я хотів би звернути увагу на один абзац із висловлювань пана Амбрі, який чудово пояснює, чому розробники все ще піклуються про фрагментацію:
Якщо ви розробник Android, ваша ненависть до пристроїв Samsung, мабуть, безмежна. Більш ніж звичайний користувач, для якого Samsung є синонімом дурний Touchwiz і надмірне програмне забезпечення, ви зневажаєте Samsung, тому що у вас немає вибору. Через Samsung величезна частка ринку, ви просто не можете не підтримувати пристрої Samsung. І це найбільше болить; те, що цей вибір у вас відібраний!
Це також не вигук із минулих років існування Android — цей пост був опублікований у середині грудня минулого року. Я буду відвертим і скажу, що я не впевнений, чи цю проблему ще офіційно вирішено, однак, пане. Амбрі надав виправлення у своїй публікації для всіх, хто натрапить на його висловлювання через пошук Google для помилка. Все, що вам потрібно зробити, це використовувати ProGuard з таким єдиним рядком коду:
# 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.** {*;}
Це не так вже й погано, чи не так? Однак проблема полягає в тому, що це виправлення було вилучено з Stack Overflow. Не зрозумійте мене неправильно, Stack Overflow — чудовий веб-сайт. Але насправді це не ідеальне джерело для пошуку виправлень для ваших програм. Щоб знайти щось у Stack Overflow, часто потрібно заглиблюватись у посилання після багатьох пошуків у Google методом проб і помилок. Іноді ви навіть побачите, що інший користувач згадує про ту саму помилку, що була у вас, але без виправлення. Або ще більше розчаровує час, коли ви знаходите тему там, де претендував оригінальний постер знайшли виправлення, але вони вже давно покинули свою тему, не давши вказівок іншим, як це виправити проблема.
Приклад незначної проблеми фрагментації
Я сам не розробник, але я достатньо знайомий із можливостями Android після багатьох років роботи в Tasker, тому почав псевдопрограмувати власні рішення проблем, з якими стикався. І коли я щось не можу зрозуміти, я шукаю це в Google, як і всі інші. Поки я писав свою попередню статтю про шукати приховані дії в програмі «Налаштування» телефону, я натрапив на досить дивну помилку, яку не міг пояснити. Помилка, унікальна для пристроїв Huawei.
Щоразу, коли я намагався запустити певні дії (наприклад, меню «Тестування», яке містить статистику використання програми) у програмі «Налаштування», я завжди зустрічався з помилкою дозволу. Зокрема, у додатку, який я використовував для запуску активності, не було дозволу huawei.android.permission. HW_SIGNATURE_OR_SYSTEM. Жоден інший пристрій, який я тестував, не потребував жодних унікальних дозволів для запуску цих дій налаштувань, лише телефони з версією Android (EMUI) Huawei. Аналіз com.android.settings показало, що певні дії в програмі «Налаштування» справді були під рівнем захисту, який вимагав або підпис або дозвіл системи.
На мій жаль, це означає, що лише програми, встановлені в /system, або програми, підписані тим самим підпис, оскільки програма «Налаштування» зможе відкрити ці дії за допомогою методу, який я використовував намагаючись. Коли я шукав у Google відповідь на цю помилку, я (ви здогадалися) натрапив на Потік переповнення стека. Розробник, який опублікував свою проблему, зіткнувся з тією ж проблемою, що й я (хоча він був у процесі розробки програми). Його проблема виникла, коли він спробував запустити такий код:
<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>
Судячи з рядків у намірах і веб-сторінки розробника, він, імовірно, намагався дозволити користувачеві вибрати програму третьої сторони для відтворення медіафайлів. Виправлення, надане досвідченим розробником CommonsWare, було досить просто: використовувати Намір. CreateChooser замість ACTION_PICK_ACTIVITY. однак, чому чи потрібно реалізувати це виправлення? чому Huawei взагалі вимагає цього дозволу? чому нам потрібно було знайти відповідь у StackOverflow за допомогою дуже конкретного пошуку Google?
Парадокс вибору
Щоб знайти відповідь, CommonsWare подав звіт про помилку у програмі відстеження помилок Android із запитом, щоб Google вивчити проблему. Зокрема, розробник попросив Google заборонити недокументовані вимоги щодо дозволу на обмеження сторонніх програм від доступу до ACTION_PICK_ACTIVITY. Записавши ці вимоги в CTS, Huawei буде змушена дотримуватися цих змін.
Хоча, чесно кажучи, ця помилка сама по собі не є великою проблемою. Незважаючи на те, що жодна інша програма, яку я пробував (наприклад, Tasker), не змогла обійти цей дозвіл вимоги та запускати певні дії в програмі Налаштування, я не був розчарований результат. Але коли я згадав висловлювання містера Амбрі, я зрозумів, що такі невеликі зміни, як ці, мабуть, дуже неприємно мати справу, особливо оскільки, якими б крихітними вони не були, вони, безсумнівноскладати, іноді достатньо, щоб викликати головний біль. Одна незначна зміна програми «Налаштування» може призвести до незаслуженого негативного відгуку проти розробника. Одна крихітна зміна, яка досить погано задокументована і вимагала від мене пошуків потоку Stack Overflow в Інтернеті. Скільки інших дрібних помилок є на інших пристроях?
Посилення конкуренції в мобільному просторі виявилося чудовим для споживача, але, побачивши, як ці незначні зміни у багатьох різних лініях продуктів можуть вплинути на розробників, я почав цінувати погляд розробників фрагментація. Справа не в тому, що сам вибір є проблемою, а радше в тому, що спільнота робить недостатньо для каталогізації цих проблем. Як припустив пан Амбрі у своїй статті, можливо, розробникам Android потрібна своя версія caniuse.com або sdkcritic.com зібрати всі незрозумілі помилки в одну базу даних. Єдиною іншою альтернативою є змусити виробників комплектного обладнання належним чином задокументувати ці зміни або взагалі припинити їх вносити, але удачі з цим.
Автори зображення: OpenSignal