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

Я решил поделиться советами с теми, кто не знает, с чего начать разработку под 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. Я буду обновлять его, как только придумаю новые советы. Не стесняйтесь задавать мне вопросы в комментариях и делитесь советами.

Не нашли ответ на свой вопрос? Возможно, вы найдете решение проблемы на нашем канале в Youtube! Здесь мы собрали небольшие, но эффективные инструкции. Смотрите и подписывайтесь на наш youtube-канал!

Смотреть на Youtube

Руководства и обзоры

1 Что нужно восстановить?

Видео

MP4, AVI и HD видео хранятся на телефоне и / или по ошибке удаляются вместе с фотографиями и другими медиафайлами.

Контакты

Номера телефонов друзей и знакомых из приложения «Контакты Android», журналы вызовов; Восстановление SIM-карты.

Фото

Удалены файлы JPG / PNG из Галереи Android; фото, загруженные на мобильный, файлы повреждены после восстановления.

Смс и сообщения

Чаты WhatsApp и Facebook, текстовые сообщения в соцсетях, информация на сим-карте

2 Где пропали файлы?

На sd-карте

Фотографии и документы хранятся на SD-картах. Часто на них случайно удаляются файлы

На телефоне

Программы для восстановления не распознают внутреннее хранилище телефона как диск, но есть другие решения.

На USB флешке

Эти небольшие устройства хранения данных часто выходят из строя или на них появляются ошибки чтения.

На HDD или SSD

Несмотря на то, что настольные платформы становятся все менее популярными, проблема потери файлов всегда оставалась.