Ресурсы, о которых должен знать каждый Android-разработчик

http://www.bongizmo.com/blog/android-resources-each-developer-should-know/
  • Перевод
Сегодня я хочу поделиться с вами моим вольным переводом статьи, написанной Сергеем Повзнером (Sergey Povzner). Сергей ведёт блог bongizmo.com и занимается разработкой туристических гидов под общим названием Citybot.

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

Статья будет полезна как новичкам, так и опытным разработчикам. Это гид по миру Android-разработки.

Книги

Может показаться, что изучать новую платформу по книгам в наши дни — способ весьма устаревший, и, возможно, вы правы. Но вы всё равно должны это делать — посмотрите статью Джефа Этвуда (Jeff Atwood) Программисты не читают книг — но вы должны.

Я рекомендую вот эти две книги:

  • The Busy Coder’s Guide to Android Development, написанная Марком Мерфи. Глубокий охват (более 2000 страниц) и регулярные обновления делают эту книгу особенной. Безусловно, это лучшая модель для книги, рассказывающей о такой активно развивающейся теме, как Android SDK. У подписчиков есть возможность задавать вопросы Марку в открытые часы. Примеры из книги доступны на гитхабе. Маст Рид!
  • Smashing UI от Юхани Лейтемаки (Juhani Lehtimaki). Отличная книга для любого Android-разработчика, который заботится о хорошем UI-дизайне.

developer.android.com

Перед тем, как начать писать своё первое приложение тщательно изучите Android Design. Особенно эти статьи:


Обязательно загляните в секцию загрузок — там можно найти шаблоны и исходники для различных иконок и виджетов.

Ну, что? Готовы писать код? Извините, продолжаем читать:


Stackoverflow

Инженеры Google, а также опытные программисты регулярно отвечают на интересные вопросы. Вот топ лучших Android-специалистов по версии Stackoverflow. Я подписан на RSS-ленты многих людей, вот только некоторые из них: CommonsWare (Марк Мерфи), Dianne Hackborn, Romain Guy, Reto Meier, Trevor Johns, Roman Nurik, Adam Powell.

Блоги

Во многих блогах можно подчерпнуть очень полезную и актуальную информацию:


Google+

Несмотря на то, что Google+ не стал социальной сетью, для нас это ценный источник информации по Android. Вот несколько людей, на кого можно обратить внимание: Tor Norbye (ADT), Dianne Hackborn, Romain Guy, Chris Banes, Roman Nurik, Nick Butcher, Adam Powell, Rich Hyndman, Cyril Mottier, Paul Burke, Jeff Gilfelt.

Обязательно закруглите Джейка Вортона (Jake Wharton). Джейк подарил нам ActionBarSherlock, ViewPageIndicator, NineOldAndroid и много других опенсорсных библиотек для Android.

Также, вы можете присоединиться к этим сообществам в том же Google+:


Open Source: проекты

Читать чужой код — полезное занятие. Особенно, если речь идет про:

  • Приложение Google I/O. Если хотите что-либо скопипастить, лучшего места не найти.
  • Photup от Криса Бэйнса (Chris Banes)
  • Android-прототипы: глубокое погружение в Location от Рето Майер (Reto Meier). В приложение демонстрируется использование определения местоположения, фрагментов и бекап-менеджера. Используйте аккуратно — код не обновлялся некоторое время.

Ну, и конечно, бесконечный источник: исходный код Android.

Open Source: библиотеки

Вот несколько самых полезных библиотек:
  • ActionBarSherlock от Джейка Вортона (Jake Wharton). Библиотека, которая позволяет использовать родной action bar на четверках и кастомный на двойках, используя единые API и тему.
  • ViewPagerIndicator от Джейка Вортона (Jake Wharton). Библиотечные виджеты совместимы с ViewPager из Android Support Library и с ActionBarSherlock. Используются с целью улучшения навигации.
  • NineOldAndroids от Джейка Вортона (Jake Wharton). Позволяет использовать Animation API из Honeycomb на самых ранних версиях Android.
  • Universal-Image-Loader от Сергея Тарасевича (nostra). Мощный и гибкий инструмент для асинхронной загрузки изображений, кэширования и вывода их на экран.
  • UrlImageViewHelper от Коушика Датты (Koushik Dutta). Автоматом подставляет в ImageView изображение загруженное по указанной ссылке. Умеет сохранять и кэшировать.
  • Android-BitmapCache от Криса Бэйнса (Chris Banes). Специальный кэш для работы с Bitmap-объектами.
  • DiskLruCache от Джейка Вортона (Jake Wharton). Java-реализация LRU кэша на диске ориентированная на совместимость с Android.

Если вам всё ещё мало, поищите на гитхабе. Также, DevAppsDirect — отличная коллекция опенсорсных вьюшек, виджетов и библиотек.

Лекции с Google I/O

Получить билет на Google I/O стало практически невозможно. Но все выступления доступны онлайн (обычно даже со слайдами). Вот ссылки на сессии разных лет: 2012, 2011, 2010, 2009.

Вот некоторые из моих любимых лекций:


Пожалуйста, остановитесь! Вы меня пугаете

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

Несколько советов, о том, как эффективно всё это усвоить:

  • Во-первых, прочтите книги. Упоминал ли я, что вы должны читать книги? Это заложит правильную основу в знаниях Android-платформы.
  • Подпишитесь на блоги и RSS-ленты ответов со stackoverflow.
  • Создайте Android-дев-круг на Google+

Звёзды Android

Талантливые разработчики далают большой вклад в процветание экосистемы разработки под Android. Среди них я бы особо отметил двух. Эти парни сыграли огромную роль в том, чтобы сделать жизнь обычного Android-разработчика легче. Я говорю о Марке Мерфи (Mark Murphy) и Джейке Вортоне (Jake Wharton).

Марк и Джейк заработали пожизненное безлимитное пиво за самый большой и полезный вклад в Android open source. Если вы когда-нибудь их повстречаете, обязательно купите им что-нибудь выпить на их выбор. [поправочка по комментариям из поста-оригинала: пиво для Марка лучше отдайте Крису Бэйну, а лучшей наградой для Марка будет ваша подписка на его книгу.]

Конечно же, не забудем Android-разработчиков и дизайнеров из Google, которые проделали большую работу над Android. Некоторые из них были упомянуты выше.

Конец, наконец

Вот и всё, друзья. Теперь у вас есть всё, чтобы делать крутейшие приложеньки! Хорошо, не совсем: вам всё ещё нужен крутой дизайнер, но это тема для отдельного поста. Но что можно сказать теперь точно — вы готовы написать своё первое приложение под Android.

Счастливого кодинга!

PS: Я не переводчик, и русский — далеко не самая моя сильная сторона. Я просто хочу, чтобы эта отличная статья была на Хабре. Поэтому пишите, пожалуйста, замечания обо всех ошибках (орфографических, грамматических и стилистических) в личку. Я постараюсь всё быстро поправить.
Поделиться публикацией

Комментарии 36

    +6
    Могу посоветовать 2 ресурса подобных друг другу
    www.androidviews.net/
    www.theultimateandroidlibrary.com/
    На них собраны полезные Android библиотеки.
    +1
    Хорошая подборка, спасибо за перевод.
      +4
      Спасибо автору за перевод. Добавил в избранное.
        +3
        Автогенерация стилей и drawables под ActionBar/ActionBarSherlock — http://jgilfelt.github.io/android-actionbarstylegenerator/
        Автогенерация стилей и deawables под контролы — http://android-holo-colors.com/
        AndroidAnnotations — потрясающая либа + annotation препроцессор. Внедряет в приложение IoC, simple threading, preference management и многое другое.
        http://marakana.com/s/post/1250/android_fragments_tutorial — хороший справочник по Fragments.
          +6
          Добавлю свои 5 копеек: вот уже более двух лет я пишу под Андроид и за это время накопилось куча «библиотечного кода». Всё это выродилось в библиотеку (исходники — github.com/serso/android-common, maven зависимости — org.solovyev.android.*).
          В библиотеку входят такие вещи как billing, lists (удобная работа с ListView), views (DragButton, SideBar, диалоги настроек), fragments, database, preferences и т.д.
          К сожалению, мануала нет, но, надеюсь, что когда-нибудь появится. Примеры использования можно посмотреть в модуле samples и, например, здесь github.com/serso/android-calculatorpp.
            +6
            Кстати для developer.android.com есть короткий адрес d.android.com.
              0
              Будьте добры, дайте ссылку на оригинал.
                +1
                Под постом есть плашка со статистикой. Там же есть ссылка на оригинал.
                –3
                Что-нибудь подобное под iOS бы.
                  +3
                  Также рекомендую взглянуть на мою библиотеку DroidParts: https://github.com/yanchenko/droidparts, значительно упрощающую рутинные операции. С недавних пор доступна в Maven Central.
                    0
                    Вы же знаете, что AsyncTask не рекомендуется использовать для тяжёлых задач (link)? Зачем тогда нужен progress для него? (У вас, кстати, как минимум утечка контекста + проблема с восстановлением таска при умирании активити (поворот экрана))
                    Правильное решение — используйте thread executor и future task, при рестарте активити — проверяйте выполняется ли таск. У меня уже есть готовое решение, но я его пока не залил в свой репозитарий, скоро будет.

                    PS Я на ваш репозитарий натыкался не раз — в целом мне понравилось, так что продолжайте.
                      0
                      У каждого свой подход.
                      Утечки контекста нет, т.к. там getApplicationContext().
                      Для регулярных фоновых тасков я использую IntentService. ExecutorServices — это уровень AsyncTask или org.droidparts.net.image.ImageFetcher workers.
                        +1
                        Тогда каким образом вы view обновляете? Есть два способа: либо вы передаёте views (или Activity) внутрь AsyncTask, либо вы делаете внутренний анонимный класс (и захватываете Acitivity и views неявно). При повороте экрана activity убивается, это значит, что вы должны либо убить таск либо подменить activity в работающем таске. Первый способ плох тем, что вам придётся стартовать новый таск, второй — тем что он сложнее реализуем (нужно где-то хранить ссылку на task и т.д. — в это случае проще и правильнее написать, вообще, своё решение на зависящее от AsyncTask).

                        PS Не поймите меня не правильно — я полностью поддерживаю open source в общем и вашу библиотеку в частности. Просто указал на проблему, с которой сам недавно столкнулся и которая может проявиться при использовании вашего расширения андроидного AsyncTask'а.
                          0
                          Результат передаётся через AsyncTaskProgressListener, AsyncTaskResultListener, в которых Views можно подменять при повороте.
                          В чём преимущество самописного перед IntentService?
                            +1
                            1. Для того чтобы что-то подменять при повороте нужно это что-то сначала сохранить в область не связаную с Activity, так? Вопрос такой: где у вас хранится AsyncTask?
                            2. Про IntentService — зачем усложнять жизнь? При использовании сервиса вы столкнётесь с такими проблемами — как передать не serializable объекты (тут имеются ввиду и parcelable и aidl compatible)? Как синхронно «привязать» (bind) локальный сервис? И что самое интересное — вам всё равно придётся использовать ExecutorService (потому что сервисы работают на main потоке).
                              0
                              1. В статической переменной, если Activity убивается.
                              2. Я обычно реализую общение через базу, так что передаётся только id. Если нужно передавать несереализуемое, то стоит задуматься о дизайне. Привязывать синхронно не приходилось. Не-а, IntentService работает в отдельном потоке по умолчанию.
                                0
                                Я решил закончить дискуссию в этом треде и написал статью о ненужности сервисов для решения бекграунд задач в Андроиде (за исключением двух случаев). Линк (к сожалению, пока только на английском языке).
                                  0
                                  это у многих андроид программистов болезнь такая — каждый пишет свой велосипед для многопоточности. ну и соотвественно, каждый утверждает, что сервисы и асинк таски — говно, а его решение все проблемы хэндлит.

                                  На самом то деле, ваша статья отчасти не правдива. IntentService — выполняет задачи в бэкграунде, его не надо биндить, он стартуется интентом. его минус — только одна задача в одно время.
                                  Я вот регулярно использую IntentService для синхронизации данных сервер -> локальная бд. и можно удобно общаться через LocalBroadcastManager или ResultReceiver. собственно и вся необходимость передовать сложные сериализуемые объекты отпадает.

                                  А AsyncTaskи отлично кстати подходят для выкачивания картинок, особено в списках. есть на developer.android.com даже подробный гайд, как это правильно делать.

                                  А еще часто идеально вписываются лоадеры.

                                  А иногда нужно на Executorах сложную многопоточность написать с параллельными запросами.

                                  У каждого подхода свои плюсы и минусы, мне кажется стоит их комбинировать и использовать в зависимости от ситуации. А писать свою реализацию на все случаи жизни, которая будет у каждого программиста своя, по моему не клево.
                                    0
                                    1. Любой сервис либо локальный, либо удалённый. Локальный нужно байндить, удалённый — нет.
                                    2. Возникает вопрос — зачем всё усложнять? Зачем пихать сервисы, если они не нужны? В статье я описал два случая, когда действительно нужно использовать сервис — всё остальное только усложнение кода программы.
                                    3. IntentService как вы написали работает только на одном потоке, помимо этого:
                                    3.1. Неизвестно если очередь потоков
                                    3.2. Нельзя отменить работающий таск
                                    3.3. Нельзя проверить работает ли таск
                                    3.4. Нельзя норамыльным образом передать результат работы (LocalBroadcastManager больше похоже на костыль)
                                    3.5. Да и вообще — зачем он нужен? Вы используете какую-нибудь функцию сервиса для работы вашего бекграунд таска?

                                    На самом деле всё что я хотел сказать это то, что Андроидные сервисы — это НЕ решение задачи управления тасками в бекграунде как многие думают.
                                      0
                                      вы мне укажите, где написано, что IntentService нужно биндить или что он удаленный.

                                      IntentService хорош тем, что его легко писать, он не привязан к жизненному циклу UI и в нем реализована очередь запросов.

                                      он вполне себе подходит для многих задач, как по мне.

                                      я не пытался сказать, что IntentService уникален, у него есть и минусы. но мне больше нравится использовать разные подходы, доступные уже в Android SDK для разных задач, чем писать очередной AsyncRequestExecutorManager
                    +1
                    Хорошая подборка!
                    ps мне не хватило 1 дня что бы закончить её перевод.
                      0
                      Ромена Ги вы очень плохо обозвали чужим именем. Если вы опытный разработчик — обязательно должны были смотреть видео с его участием, он правильно произносит свое имя.
                        +6
                        Слава макаронам, мою опытность оценивают не по знанию произношения имён разработчиков гугла. Но спасибо, я поправлю.
                        +1
                        Пытаясь программировать под android основная проблема у меня, как бекэнд разработчика, была именно в создании интерфейсов, кастомизации их под себя, под то, что требуют дизайнеры. Есть ли какой-то ресурс, книга или что-то еще где бы подробно и глубоко освещался вопрос построения интерфесов, создания собственных интерфейсных виджетов и прочего? В большинстве мест просто расказывается как накидать на форму контролов и повесить на них обработчики, а что делать если они не устраивают и нет ничего готового?
                          0
                          +1
                          +1
                          Спасибо за включение Universal Image Loader в список самых полезных библиотек, только лучше вместо ссылки на мой профиль в Google+ поставить ссылку на GitHub репозиторий. А то перекруглили уже меня.
                          0
                          Есть ли под Android аналог эплового GameCenter?

                          Сейчас занят портированием игрушки и оказался неприятно удивлен. Год назад были новости, что гугл над чем-то своим работает, но видимо Пейдж случайно и этот сервис закрыл.

                          С помощью чего организуете у себя ачивки/доски рекордов?
                            0
                            в копилку клевых open source Android приложение GithubAndroid
                              0
                              о сторонних библиотеках для android есть неплохой, но развивающийся, сайт — www.droidbase.org. Там рассказывается о нестандартных библиотеках расширяющих базовый функционал приложения + скриншоты.
                                –2
                                бред
                                0
                                Может пригодиться: android-arsenal.com
                                На этом сайте собран большой список различных инструментов.

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое