От переводчика: эта статья пылится у меня в Pocket уже довольно давно (с конца 2013). Прошло уже больше полугода, так что мнение автора еще более логично.
Я надеялся, что перевод сделает кто-то другой, но, видимо, придется мне.
Я не супер-крутой знаток английского, поэтому обо всех шероховатостях просьба писать в личку — исправим.
З.Ы: умираю с хабра — за что тут можно нагадить в карму?
Разрабатывая под Android, приходится иметь дело со страшной вещью, начинающейся на «ф», — фрагментацией.
Это то, о чем не брезгуют напомнить в технических блогах. Это слово, которое отпугивает некоторых разработчиков от платформы. Это то, что любит упоминать Apple на своих презентациях, дабы продемонстрироватьать превосходство своей ОС.
Лично я предпочел бы фрагментированный Android разрозненному рынку мобильных ОС. Не будь Андроида, нам бы, возможно, пришлось иметь дело с разработкой под Sony OS, Samsung OS, HTC OS и т. п., (я не могу представить, чтобы Apple разрешила другим компания делать телефоны на iOS).
Но все же фрагментация — это серьезная головная боль. Если бы фрагментацию можно было свести к минимуму или вообще избежать её, я был бы счастлив.
Донедавна я работал над приложением Wedding Party в качестве Android-разработчика. Нужно было поддерживать Android 2.3+. Для достижения общего UI на всех версиях приходилось использовать библиотеки ActionBarSherlock и HoloEverywhere. Надо было корпеть над анимациями, потому что на 2.3 они часто работали не так, как на 4.x.
В Wedding Party требовалось работать с большим количеством изображений. О high-res изображениях не могло быть и речи — они требуют много ресурсов, и несколько таких изображений на одном экране заставляли бы вылетать приложение на старых устройствах.
На Google I/O 2013 Джефф Гильфельт раздавал стикеры с надписью «minSdkVersion=”14”». Они были хорошо восприняты сообществом, и некоторые переняли эстафету распространения.
В том же ключе говорил Рето Майер в докладе: "Android Protips: Making Apps Work Like Magic".
Все это побудило меня задуматься. То, что мы поддерживали старые версии Android, ограничивало нас. Перед разработкой новых фич мы сначала должны были проверить, будет ли это работать на древних устройствах.
После Google I/O я выложил своей команде идею «minSdkVersion=14». После некоторых колебаний, проанализировав наши темпы (а Android-версия ожидалась не позже, чем через полгода после релиза на iPhone), было решено, что использовать minSdkVersion=14 имеет смысл.
С момента запуска Wedding Party количество установок на все версии Android растет. Но по суммарной доле процент устройств на 2.x уменьшается, а на 4.х, соответственно, довольно быстро растет. Поэтому мы сделали 2 версии кода. Текущий мы оставили для 2.х устройств, а для 4.х сделали новую ветку.
Как разработчику, это облегчило мне жизнь.
Мы удалили все сторонние библиотеки совместимости, а также выбросили код для поддержки старых устройств. Мы осмелели, особенно в плане анимаций, и без лишних вопросов перешли на high-res изображения. Наши Robotium-тесты стали более последовательными (при поддержке 2.х приходилось устанавливать более высокий тайм-аут, иначе тесты бы валились). Также уменьшилось количество устройств для ручной проверки работоспособности.
В общем, разработка пошла намного быстрее. На протяжении длительного времени у нас выходили еженедельные релизы, за исключением периода разработки основных функций.
Хотя мы развиваем версию для 4.х, пользователи 2.х все еще могут скачать старую версию, пока Google Play поддерживает Multiple APK support.
Прекращая поддержку старых устройств, у нас было несколько предположений. Мы думали, владельцы старых устройств не ожидали высококачественного приложения. К счастью, было не так и много жалоб по поводу недоступности новых функций на 2.х.
Поскольку большая часть пользователей Wedding Party из США, где могут себе позволить покупать новые устройства, мы решили, что количество девайсов на Android 2.x будет постоянно сокращаться (на самом деле так и происходит — их количество уменьшается на несколько процентов каждый месяц).
Мы довольно легко приняли решение, зная, что подобным образом поступили и другие разработчики. Популярные приложения, например, Vine и последние версии Holo Sudoku 4.0+ совместимы, и никто от этого не умер. Еще недавно (прим. пер.: на самом деле давно :)) Square Cash и Flyne поступили так же, как и мы.
Джейк Уортон, который работает с Android в Square, и также известен своей библиотекой ActionBarSherlock, говорит, что главной причиной, почему Square Cash поддерживает только Android 4.0 и выше, была продуктивность разработчиков. «Продуктивность разработки должна быть на первом месте. Приложение нельзя выпустить, пока оно не готово. Cash разрабатывалась преимущественно одним разработчиком при небольшой поддержке других Android-девов. Можно ли было добавить поддержку 2.х, сохранив дату выпуска? Вероятно. Можно ли было втиснуться в сроки, поддерживая только 4.х? Несомненно. Cash — прекрасное приложение. Поддерживать более старые версии было реально, но путем бОльших усилий», — говорит Джейк.
Также обдумывалась целевая аудитория приложения. Согласно словам Джейка, “мы провели небольшое исследование нашей базы пользователей и поняли, что люди, готовые установить продукт для передачи денег по email, пользовались преимущественно Android 4.0+".
Компания NPR также будет поддерживать только 4.0 и выше в их будущем приложении для стриминга аудио и видео.
По словам Майка Сеифоллахи, который работает в NPR, «поддержка кодеков в старых версиях Android реализована как попало. Мы хотим доставить наилучший пользовательский опыт людям, а хорошая работа кодеков для этого очень важна. На Android 2.x надо использовать программную реализацию декодирования, а это не лучший способ потратить ресурсы устройства.»
Android 4.0+ также демонстрирует зрелость платформы.
«Android 4.0 — это grass-is-greener ideal (прим. пер.: судя по всему, отсылка к пословице The grass is always greener on the other side) и на самом деле это самая зеленая штуковина, которую вы видели. API логично и оптимизировано. Присутствуют новые API для удобной, динамичной, декларативной разработки, что позволяет вам эффективнее взаимодействовать с пользователем», — добавляет Джейк.
Джефф Гильфельт разделяет эти чувства. «API 14 — это время, когда Android стал серьезным. Разработка дизайна стала одной из первостепенных задач, и дефолтный интерфейс не выглядит уродливо. Это стало важной вехой, и надеюсь, такая тенденция продолжится. Кроме того, поддержка нескольких apk в Google Play означает, что вы можете продолжать предоставлять пользователям устаревших устройств стабильные прошлые версии программы».
В принципе, могут быть случаи, когда поддерживать только 4+ не представляется возможным. К примеру, это клиенты различных социальных веб-сервисов (типа Twitter и Facebook), или приложения, ориентированные на всемирный рынок (в частности, на Индию и Китай). Тогда может потребоваться поддержка старых версий Android.
Но если ваше приложение не попадает под эти критерии, плюсы minSdkVersion=«14» значительно перевешивают негативные стороны.
(прим. пер.: напомню, статья за конец 2013 года, поэтому дальше можно улыбнуться)
Близится сезон праздников, думаю, доля Android 2.x резко упадет. Будут покупаться и активироваться новые устройства, скорее всего, как минимум на Android 4.0. Мне кажется, к январю 2014 устройства на Android 2.x практически сойдут на нет.
Повторив мысль Рето Майера, давайте создавать наилучшее из возможных приложений для каждого пользователя.
А теперь откройте свой AndroidManifest.xml и измените minSdkVersion на 14!
И заключение от переводчика:
Вот свежая информация по мировому рынку.
Как видим, теоретически 15% пользователей все никак не распрощаются со своими старыми устройствами. Но на самом деле это в большинстве своем те, кому от телефона совершенно не нужен наилучший пользовательский опыт. Это те, кто, возможно, даже не в курсе, что приложения можно и нужно обновлять через Play Market. Поэтому, решая вопрос о минимальной версии Android для нового приложения, стоит подумать — а надо ли оно этим 15-и процентам?
Сейчас середина 2014-го года, теперь тем более логично не поддерживать старые (читай: 2.х) версии ОС. Я в своих приложениях использую minSdkVersion 14. А вы?
Автор: Bringoff