С чего начать разработку под Android

Перевод статьи Getting Started with Android Development, автор - Alex Lod

Я решил поделиться советами с теми, кто не знает, с чего начать разработку под Android. Несколько недель назад я запустил свое первое (и пока единственное) приложение для Android, FoneDoktor. Его разработка заняла около трех месяцев. В целом, мой опыт разработки был очень положительным, поскольку документация по Android и сообщество - потрясающие.

Создание приложений для Андроид: с чего начать

Документы разработчика Android (developer.android.com) превосходны. Первое, что вы должны сделать перед созданием приложения - это изучить основы, это хорошая стартовая точка. Далее я настоятельно рекомендую следовать руководству по Notepad, оно поможет вам создать базовое приложение. См. мои android-уроки о среде разработки, прежде чем вы начнете. На самом деле, писать код - не просто прочитать учебник.

Среда разработки для создания приложения

Используйте Eclipse. В SDK для Android есть одноименный плагин, для которого стоит изучить Eclipse. Он может создавать подписанные и неподписанные файлы APK, запускать android-эмулятор, управлять виртуальными устройствами и уровнями API. Это более-менее облегчает все рутинные задачи разработки. Используйте Eclipse, даже если вы не знакомы с ним. Здесь подробно описан плагин ADT.

Советы по общей разработке

Используйте протоколирование. Программа adb logcat очень удобна и делает фильтрацию журналов. Всегда выполняйте работу с пользовательским интерфейсом в Eclipse, сначала используя XML-редакторы и средства визуализации, и перемещайтесь либо на физическое устройство, либо на эмулятор, чтобы убедиться, что пользовательский интерфейс "отполирован". Я предпочитаю разработку на физическом телефоне, который лежит прямо перед моей клавиатурой. Эмулятор неудобен своей мышью, хотя немного быстрее отправить новый код. И не останавливайте эмулятор каждый раз, когда вы хотите попробовать новый код - плагин Eclipse делает все правильно и только обновляет приложение, в котором вы работаете через эмулятор.

Лучшие эмуляторы

Версия API

У вас возникнет соблазн использовать один из вышеописанных API-интерфейсов, таких как Gingerbread или Ice Cream Sandwich, но вы обнаружите, что большинство людей все еще на версии 2.2 (я забыл название выпуска). Начните разработку с версии 2.2 и узнавайте новые и улучшенные API-интерфейсы, как только ваше приложение будет работать на более поздних версиях Android. Начиная с версии 2.3 или 2.4, вы разочаруетесь, когда вам нужно использовать более старые и худшие API для версии 2.2.

Плагин Eclipse легко выбирает нужные версии API.

HTTP-запросы

Убедитесь, что всякий раз, когда вы выполняете HTTP-запрос (или что-либо с блокировкой ввода-вывода), вы делаете это в фоновом режиме. Существует несколько альтернатив для фоновой обработки, каждая со своими достоинствами и недостатками. Ознакомьтесь с сервисами IntentServices и AsyncTask. Когда вы прочитаете о них, вы поймете, что лучше для какой задачи.

Я использовал HTTP-библиотеки Apache для выполнения HTTP-запросов. Они отлично работали. Я не так хорошо знаю Java, поэтому не знаю, есть ли альтернативы получше. Я слышал, что у Roboguice хорошая поддержка HTTP и JSON, хотя я никогда не работал с ней.

Обнаружение и получение данных от сервера

В большинстве приложений есть серверный компонент, где приложение взаимодействует с сервером в фоновом режиме. Я использовал AlarmManager для запуска фонового процесса каждые 15 минут, что сделало бы HTTP-запрос, запрашивающий больше данных. Использование AlarmManager идеально подходит, так как помогает расписанию заданий для Android в режиме экономии заряда батареи, а также гарантирует, что независимо от того, какая фоновая служба будет запущена, будут запланированы соответствующим образом, а не деактивизированы.

Я использовал встроенную поддержку JSON для сериализации и десериализации данных JSON. Он работал отлично.

Трейдинг

Не откатывайте свои собственные решения по трейдингу. Используйте то, что я изложил выше (Service, IntentService, AsyncTask).

Размер шрифта

Размер шрифта был, наверное, самой большой западней для меня. По какой-то причине некоторые устройства не уважают px и pt как единицы размера шрифта. Вместо этого используйте единицы sp. Без sp units размер шрифта будет различным в зависимости от устройства.

Обработка исключений

Если у вас есть приложение, которое самозапускается, никогда не позволяйте ему выбрасывать исключение, иначе пользователю потребуется перезапустить приложение самостоятельно. Посмотрите на службы обработки исключений, которые будут ловить исключение для вас и регистрировать его где-нибудь. Я не знаю, какая из этих систем лучшая (я не пользуюсь ни одной из них), но я знаю, что они существуют. Если у вас все в порядке со сбоем приложения и выбрасыванием исключения для конечного пользователя, хорошая новость заключается в том, что на Android-рынке будут собраны все ошибки, которые произойдут, и вам будет дана полная трассировка стека, объясняющую их. Хотя, вероятно, пользовательский опыт получения исключения довольно ужасен.

Кэширование

Кэшируйте данные всякий раз, когда вы собираете их из HTTP-запроса. Этому есть несколько причин. Во-первых, с кэшированными данными вы сможете отображать информацию пользователю, не требуя подключения к Интернету. Во-вторых, вы можете сразу отображать данные, в то время как для получения новых данных выполняется фоновый HTTP-запрос. И в-третьих, так как ваше приложение будет либо обновляться пользователем (когда приложение открыто, либо нажата кнопка обновления), либо AlarmManager, наличие кеша вокруг позволит вам создать лучший пользовательский интерфейс.

В зависимости от ваших данных вы можете использовать встроенную базу данных sqlite3 или SharedPreferences. SharedPreferences отлично подходят для данных с ключом и значением, тогда как sqlite3 отлично подходит для более реляционных или сложных данных, в том числе данных, требующих более сложных запросов. 

Пользовательский интерфейс Android предлагает несколько вариантов компоновки, таких как RelativeLayout и LinearLayout. Многие из этих макетов работают непонятно. Изучите документацию, прежде чем вы начнете стучать в XML. Время, которое вы потратите на чтение, позволит сэкономить много времени отладки в будущем, поверьте мне.

Записи данных

Если ваше приложение будет иметь несколько различных типов хранимых данных (например, профили пользователей, сообщения, игровые объекты, элементы фида и т. п.), обязательно создайте интерфейс записи - с каждым типом записи, который его реализует, - который можно легко сохранить в sqlite, упакованном В HTTP-запросе JSON, или отправляется как Parcelable. Например, создайте User.java, Message.java и т. п., где каждый класс может отправлять или получать новый или набор записей через HTTP и сериализовать / десериализовать как JSON, хранить и считывать из sqlite3 с помощью Cursors и ContentValues. На самом деле это очень плохо, что Android не предоставляет это для вас - формат сериализации, который работает как в sqlite3, intents, так и в HTTP-запросах, ну да ладно. Я никогда не рассматривал другие альтернативы сериализации, такие как Protocol Buffers или Thrift.

Получение помощи

Всякий раз, когда я застревал, я гуглил и направлялся на stackoverflow. Большинство ответов на ваши вопросы вы найдете там. Я никогда не задействовал канал IRC, хотя слышал, что это тоже хороший метод получения помощи от опытных разработчиков.

Выводы

Мне было очень интересно учиться и разрабатывать под Android. Все другие инструменты разработки и платформы должны использовать Android в качестве примера того, как сделать разработчиков счастливыми (я смотрю на вас, разработчики Ruby и Rails). 

Надеюсь, это руководство поможет вам начать работу с Android. Я буду обновлять его, как только придумаю новые советы. Не стесняйтесь задавать мне вопросы в комментариях и делитесь советами.