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

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

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

Начало работы: с чего начать

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

Среда разработки

Используйте Eclipse. В SDK для Android есть плагин Eclipse, для которого стоит изучить 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, И отправляется по намерениям как Parcelable. На самом деле это очень плохо, что Android не предоставляет это для вас - формат сериализации, который работает как в sqlite3, intents, так и в HTTP-запросах, но да ладно. Я никогда не рассматривал другие альтернативы сериализации, такие как Protocol Buffers или Thrift.

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

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

Выводы

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

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