Оптимизация Андроида
Мобильные устройства с ОС Android на базе x86 возможно, пока известны чуть менее, чем 2ГИС, но с постоянным увеличением ассортимента, их известность растет.
Мы пригласили 2ГИС в гости в блог Intel, чтобы задать им несколько вопросов об оптимизации мобильной версии программы под архитектуру х86. Ответы подготовил Сергей Галин — Руководитель команды разработки мобильного 2ГИС.
Как устроено ваше приложение с точки зрения использования нативного кода? Т.е. насколько велик его процент, что именно делается нативно и почему?
Наше приложение для Андроида работает в нативном коде на 99% — т.е. абсолютно всё, кроме процесса старта приложения и работы с API Android. Включая рендеринг всего пользовательского интерфейса «собственными силами», не используя для отрисовки функций операционной системы. Это кроссплатформенное приложение на базе Qt 4.8 (порт на Android — наш собственный). Так получилось исторически, поскольку разработка начиналась для Symbian и Windows Mobile, потом захотелось добавить Android (на тот момент Android 2.2). Впрочем, с учётом «тяжести» нашего приложения, которое в реальном времени рисует 3D-карту и работает с огромной оффлайновой базой данных подход Андроида «по умолчанию» с разработкой на Java просто бы не «вывез» — ни по быстродействию, ни по объёму требуемой оперативной памяти. В нативном же коде мы можем делать практически такое же функциональное приложение, как и на обычном настольном компьютере, и запускать это даже на бюджетом телефоне образца 2011 года.
Устраивает ли вас и ваших пользователей производительность существующих ARM версий приложений? Остается ли запас производительности для расширения функциональности?
Да, устраивает, для современных устройств и топов 2012 года :) Бюджетные телефоны прошлых лет и даже более старые флагманы, к сожалению, работают на грани возможностей, и производительность в некоторых местах, действительно, оставляет желать лучшего. При этом, возможностей для оптимизации при данном функционале приложения для многих устаревших устройств практически нет.
Для нас будет очень хорошо, если Intel реально усилит конкуренцию и ускорит расширение пользовательской аудитории в сторону более мощных устройств!
Почему было принято решение о выпуске x86 версии?
Потому, что это было сделать действительно легко! И было не клёво, что на отличных устройствах с процессорами Intel приложение работает плохо.
Мы сейчас заняты, в числе прочего, планомерным расширением поддержки устройств и платформ, так что это хорошо вписалось в наши планы.
И спасибо Intel за предоставленные устройства, без них бы было сложнее сдвинуть тему с мёртвой точки :)
В чем именно состояло добавление поддержки х86 – сколько файлов \ строк кода потребовалось изменить?
Кода в приложении — практически нисколько. Была доработана конфигурация сборки Qt, чтобы она умела поддерживать x86. Пришлось ещё пропатчить макросы в паре третьесторонних библиотек, которые до этого были уверены, что «Андроид — значит, ARM». Потом были модифицированы наши сборочные скрипты для сборки x86 — это и заняло большую часть времени. Proof-of-concept был сделан за 1 день, а в целом на встраивание x86 в процесс затрачена примерно 1 человеко-неделя, не считая тестирования. Для такого огромного проекта это — очень быстро!
Дело ещё в том, что наша кодовая база используется и на десктопах, и на серверах, да и разработка самой мобильной версии в основном производится под обычными десктопными Linux и Windows (не в эмуляторе, а именно в обычной сборке для этих ОС — благодаря Qt, мы это можем делать очень легко), поэтому весь код изначально отлажен для x86.