Отгремела конференция google io 2013. В этом году она оказалась какой то противоречивой – показали много чего никто не ожидал, а то что ожидали – показано не было. Ну да ладно, об этом было много уже написано, статья о другом.
Поговорим мы сегодня лишь об одном нововведении, и проблемах, которые оно мне принесло – “Советы по оптимизации” в консоли google play.
Казалось бы – хорошая штука – анализирует наше приложение и дает советы по оптимизации. К примеру для старых проектов она показывает языки, на которые не мешало бы перевести приложение, так как из данных стран идет большое количество закачек.
Небольшая предыстория:
У нас в компании есть один заказчик, для которого мы выпускаем приложения. Они в основном все однотипные – отличаются только цветовой схемой и данными. Дизайн приложения был разработан давно и всех устраивал. Приложения всегда работали как на телефонах, так и на планшетах – интерфейс построен на основе фрагментов. Единственное что – не стали внедрять экшен бар – ну не нужен он там был никогда – меню использовалось старого стиля.
В манифесте был прописан android:targetSdkVersion=«10» и на всех девайсах использовалась либо физическая кнопка меню, либо, если ее нет на устройстве, появлялась в андроидовской панели кнопок.
Так вот, к чему это я – через пару дней после конференции, заказчик попросил выложить новое приложение, которое к этому времени уже было разработано и оттестировано. Сказано – сделано. Процесс публикации почти ничем не отличался от предыдущих – единственное что, сделали отдельно скриншоты для телефонов и планшетов, так как в интерфейсе теперь их разделили. Выложил я приложение, проверил что оно появилось в google play на моем ТЕЛЕФОНЕ, и пошел с чистой совестью домой. Ничего не предвещало беды…
На следующее утро, по приходу на работу, тестеры сообщили что приложение находит только в телефоне, а на планшетах в маркете его найти не могут. Я начал проверять – в чем же дело. В списках поддерживаемых устройств, все планшеты, имеющиеся в наличии, присутствовали. И тут я увидел скриншот из начала статьи.
Ага, подумал я, и быстренько пересобрал и выложил приложение с android:targetSdkVersion=«11».
Ага, подумал google, и в google play появилась вторая версия приложения, доступная для планшетов но… без кнопки меню!
Я начал искать что же не так, ведь вроде же читал раньше, что если у нас не используется экшен бар – кнопка должна быть, вот и выдержка из статьи:
- If you set either minSdkVersion or targetSdkVersion to 11 or higher, the system will not add the legacy overflow button.
- Otherwise, the system will add the legacy overflow button when running on Android 3.0 or higher.
- The only exception is that if you set minSdkVersion to 10 or lower, set targetSdkVersion to 11, 12, or 13, and you do not use ActionBar, the system will add the legacy overflow button when running your app on a handset with Android 4.0 or higher.
Казалось бы, третий пункт как раз нам подходит, но есть нюанс – в нем сказано только про телефоны! И действительно, на телефонах кнопка меню появлялась.
Ну что ж, ничего не поделаешь, оставалось только сообщить заказчику о двух возможных вариантах решения проблемы:
- добавляем экшен бар
- добавляем в интерфейс кнопку, по нажатии на которую, будем открывать меню.
Ну а чтобы в в google play не лежала нерабочая версия – решил ее откатить. Но тут как раз нашли небольшой баг в приложении и я решил его исправить и включить в сборку. Откатил targetSdkVersion на 10 и выложил третью версию(опять появился совет об адаптации приложения под планшеты)…
Каково же было мое изумление, когда через некоторое время мой планшет захотел обновиться! Я обновил его на третью версию, где присутствовала кнопка меню! Ну думаю, наверное просто небольшой баг в google play – обновилось, так как была уже версия на устройстве. Но проверив на “чистом” планшете – я так же нашел его и установил!
Я думаю что это связано с тем, что google распространяет свою фильтрацию только на вновь созданное приложение, а если оно уже раньше было доступно для данного типа устройств(вторая собранная версия) то он свое ограничение убирает. Такой вывод можно сделать из того что в старых приложениях выводится предупреждение о targetSdkVersion, но в поиске для планшетов оно присутствует – если бы они закрыли эту возможность, было бы очень много возмущений от разработчиков старых приложений.
Надеюсь данный опыт будет полезен и сэкономит время разработчикам, столкнувшимся с данной проблемой. Да и на самом деле это даже к лучшему – больше разработчиков начнет задумываться о приведении внешнего вида приложений к стилю, рекомендованному платформой.
Автор: igor_ab