Советы разработчику

В этом разделе мы попытались собрать наиболее частые вопросы, касающиеся мобильной разработки под Android. В первую очередь это ответы на вопросы, с которыми сталкиваются клиенты «FBA toolkit». Раздел FAQ будет постоянно дополняться, и мы надеемся, что здесь вы всегда сможете найти ответ на интересующий вопрос.

Библиотеки и компоненты (16)

Внешние компоненты используемые FBA Toolkit

  • ActionBarSherlock  - панель действий (Action Bar) для всех версий Android
  • OrmLite –  фреймворк для объектно-реляционного отображения Java объектов в базу данных SQL.
  • Mapsforge – оффлайн карты OpenStreetMap
  • Gson - сериализатор Java объектов в JSON формат
  • Ksoap2-android – легкая и эффективная SOAP-библиотека для платформы Android
  • Commons IO –  библиотека облегчающая работу c потоками (Input/Output)

Новый диалог выбора даты

DateTimePicker это библиотека, которая содержит красивый диалог выбора даты (как в приложении Google Agenda).
Библиотека с открытым исходных кодом, есть русская локализация.

Crouton – разноцветные уведомления

Небольшая и простая в использовании библиотека позволяющая создавать уведомления (аналог штатного Toast) c собственным стилем.

Satellite Menu – меню, кнопи полукругом при нажатии

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

Viewbadger – значок (счетчик) на любой view

Компонент позволяет добавить значок (счетчик) на любой ваш View без необходимости изменять его макет.

Navigation Drawer – панель навигации

Стандартный контрол «Панель навигации» располагается слева (автоматически скрывается) и отображает основные опции приложения.

См. так же библиотеку SherlockNavigationDrawer.

DevAppsDirect – коллекция компонент и библиотек

DevAppsDirect – специальное приложение для разработчиков в котором собраны различные библиотеки и компоненты. Вы можете ознакомится с возможностями интересующей вас библиотеки на демо-примере.

GreenDroid

GreenDroid – библиотека компонент, реализация различный виджетов пользовательского интерфейса.

См. также: “Быстрая разработка приложений с использованием библиотеки Greendroid” – статья на русском языке.

Spring For Android

Spring For Android - расширение фреймворка Spring Framework, которое предназначено для упрощения разработки приложений Android.

DroidParts

DroidParts – фреймворк включает DI, ORM, Logging, Rest и многое другое.

Работа с сетью

Loopj – асинхронный http-client основанный на обработчиках обратного вызова.

Volley –  легкая работа с сетью. Библиотека управляет обработкой и кэшированием сетевых запросов.

android-query - библиотека предназначена для быстрого и лёгкого программирования асинхронных задач, а также управления пользовательскими элементами управления. С примером использования можете ознакомится в статье на сайте Александра Климова.

Android Validator – проверка данных на формах

Android Validator – библиотека для автоматической проверки введенных пользователем данных на «формах» вашего андроид-приложения.

Universal Image Loader – удобная загрузка картинок

Universal Image Loader – мощный и гибкий инструмент для асинхронной загрузки, кэширования и отображения изображений.

PhotoView – просмотр изображений

PhotoView – компонент для просмотра изображений с поддержкой масштабирования и различные жесты, прост и удобен в использовании.

Open Intents Android Libraries – коллекция библиотек и Intent-намерений

Open Intents Android Libraries - на сайте собрана большая коллекция ссылок на сторонние библиотеки (коммерческие и с открытым исходным кодом). Даже есть список намерений (Intent)  которые вы можете вызывать из своего приложения.

Android Views

Android Views - еще один портал, на котором представлены различные библиотеки и компоненты для Android. По каждому элементу есть  краткое описание и скриншот.

Дизайн (5)

Google Android Design Guide

Google Android Design Guide – официальное руководство по дизайну Android –приложений от Google.

Android App Patterns

Android App Patterns – паттерны проектирования на реальных примерах. Коллекция скриншотов 1225 приложений сгруппированных по категориям [EN].

Android Niceties

Android Niceties – rоллекция скриншотов некоторых самых красивых приложений Android

Android Asset Studio

Android Asset Studio - сервис, позволяет создавать иконку и тему для вашего приложения. С некоторых пор, часть функционала встроена в мастер создания нового приложения для Eclipse, Android Studio/

Androiduiux

Androiduiux – источник вдохновения для Android дизайнеров и разработчиков. С сайта можно бесплатно качать  шаблоны для разработки дизайна

Исправление ошибок (2)

“В приложении ‘Имя приложения’ произошла ошибка.

Если при запуске выводится сообщение “В приложении ‘Имя приложения’ произошла ошибка” и программа сразу закрывается.

Симптомы:
- размер исполняемого apk-файла (в каталоге bin eclipse-проекта)  меньше 1Мб.
-
 в лог выводится сообщение:

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate application <имя пакета>.App: java.lang.ClassNotFoundException: Didn't find class "<имя пакета>.App" on path...
...android.app.LoadedApk.makeApplication(LoadedApk.java:504)

Решение:

- в Eclipse правой кнопкой на проекте и выбрать Build Path -> Configure Build Path… На закладке Order and Export включить флажки Android Private Libraries и Android Dependencies

- пере-собрать проект (меню Project -> Clean…)

 

Ошибка “<имяпроекта> /gen already exists but is not a source folder. Convert to a source folder or rename it.”

Может возникнуть после обновления проекта из репозитория или после импорта проекта в рабочее пространство Eclipse.

Решение:
- в Eclipse правой кнопкой на проекте и выбрать Build Path -> Configure Build Path…
На закладке Source нажмите кнопку Add Folder… и выберите каталоги src и gen

- пере-собрать проект (меню Project -> Clean…)

Новости (1)

Android Weekly

http://androidweekly.net/ – новостной портал [EN], передовые методики и инструменты для Android разработчика

Производительность и отладка (5)

StrictMode – поиск проблем производительности

StrictMode это новое API доступное начиная с Gingerbread (2.3) которое позволяет мониторить медленные операции (ввод-вывод, сетевое взаимодействие м т.п), подробнее см. статье “Новое API в Gingerbread — StrictMode. Или боремся с ANR-диалогами

Как определить, что флаг отладки установлен

1
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE ) );
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE ) );

Этот флаг выставляется в манифесте

Трассировка

Режим трассировки позволяет разработчику оценивать скорость выполнения программы (или ее части) и определять пути по улучшению производительности.

Трассировка Activity

1. подключить трассировку приложения:

1
2
3
4
5
6
7
8
9
10
11
12
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        //трассировка в файл my.trace в корень на карточку
        Debug.startMethodTracing("my");
}
@Override
protected void onDestroy() {
        //остановить трассировку
        Debug.stopMethodTracing();
        super.onDestroy();
}
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //трассировка в файл my.trace в корень на карточку
        Debug.startMethodTracing("my");
}
@Override
protected void onDestroy() {
        //остановить трассировку
        Debug.stopMethodTracing();
        super.onDestroy();
}

2. После работы приложения под трассировщиком скопировать файл my.trace из карточки в каталог SDK tools

из командной строки: adb pull sdcard/my.trace my.trace

Если используется IDE (Eclipse, Android Studio) файл можно скопировать с помощью  File explorer из состава DDMS.

3. Запуск программы просмотра трассировки

traceview my.trace

Описание колонок:

Incl% и Inclusive – Время (и в процентах от общего времени), проведенное в этом методе, включая все методы, которые он вызывает (в миллисекундах)

Excl% и Exclusive – Время (и в процентах от общего времени), затраченное на выполнение фактически в этом методе. Без вложенных функций.

Calls+Recursive calls – Два значения: число раз, сколько раз этот метод вызывался (из вне) и сколько раз он вызывал себя

Time/ Cal – время потраченное на вызов (см. пред. столбец)

Группа “Parents” являются методами, которые будут вызывать этот метод.  Группа “Children” – вызывают данным метод

Подробнее про утилиту Traceview читайте в этой статье (EN).
В 1С аналогичный механизм (наиболее близкое понятие) называется «Замер производительности».

Установка свойства alpha на View снижает производительность

Если есть возможность, используйте альтернативные варианты установки прозрачности:

textcoloralphaviewalpha

Источник (EN)

Robotium – автоматизация тестирования

Robotium – удобный фреймворк для автоматизации тестирования  андроид­- приложений.

Ссылки (2)

Уроки, примеры и документация на русском языке

  • Google Android …это несложно – цикл статей и примеров для начинающего разработчика.
  • Хабраиндекс для статей по программированию под Android – статьи, примеры и советы с одноименного ресурса
  • Блог Дарьи Ряжских – статьи профессионального разработчика Android т.ч. и полезная информация для начинающего по адаптерам и xml-drawables ресурсам
  • AndroidForums.ru – faq, советы и многое другое. Есть книги по разработке на английском и русском языках.
  • Сайт Александра Климова – цикл статей и примеров для начинающего разработчика. Подробно описаны основы: жизненный цикл, ресурсы, манифест. Часть статей в отрытом доступе, прочие доступны за символическую плату.

Уроки, примеры и документация на других языках

  • Android SDK – основной ресурс для разработчика Android
  • Google I/O Developer Conference – материалы с конференций Google, в т.ч. новые практики и советы
  • Stack Overflow – faq в т.ч и по Android. Если отчаялись искать ответ на свой вопрос, спросите здесь
  • Vogella – база знаний  разработчика Android + Eclipse. Большое количество качественных примеров и уроков
  • CommonsWare – AdvAndroid - руководство разработчика, книгу можно скачать в PDF формате.
  • Java Code Ggeeks –  различные примеры и советы для профессионального разработчика Android.
  • Dzone Javalobby - ваша персональная техно-вселенная.  Примеры, советы, уроки и новости Android.

Эмулятор (3)

Интернет через прокси на эмуляторе

Настройка доступа в интернет с эмулятора довольно нетривиальная задача, особенно если у вас корпоративная сеть через proxy с NTLM-аутентификацией.  Ни один из вариантов, найденных в интернете, не дал положительного результата. Наш вариант:

1. Установите на компьютер локальный прокси, программу CNTLM. В файле настроек cntlm.ini укажите данные авторизации: Username, Password, Domain. Измените порт, если требуется, по умолчанию: 3128.

2. Проверьте работу прокси. Для этого в браузере установите в свойствах подключения ваш прокси, адрес: 127.0.0.1 и порт: 3128. Если все работает, можете регистрировать запуск программы CNTLM как сервис.

3. Запустите Android эмулятор и в настройках: Settings ->Wireless&Networks->MobileNetworks->AccessPointNames->Telkila (или T-Mobile USA)-> укажите прокси 10.0.2.2 и порт: 3128.

Внимание, на эмуляторе надо указывать именно 10.0.2.2  а не 127.0.0.1 это специальный алиас на ваш компьютер разработчика

Это метод работает для эмуляторов Android 2.3 и выше,  для предыдущих необходимо дополнительно указывать прокси в командной строке запуска:
emulator -avd avd21 -http-proxy http://127.0.0.1:3128
где avd21 имя созданного эмулятора.

Как переместить образ эмулятора в другой каталог

Данную операцию можно выполнить из командной строки, например:
android move avd -n gapi3 -p c:\AndroidEmul\gapi3
где
gapi3 – имя ранее созданного эмулятора
c:\AndroidEmul\gapi3 – новый каталог эмулятора

Другой вариант – перенести «вручную» :
1. В профиле пользователя c:\Users\<username>\.android\avd\<имя эмулятора>.avd переносим каталог в новое место
2. В профиле пользователя, в файле настроек этого эмулятора c:\Users\<username\.android\avd\<имя эмулятора>.ini указываем новый путь в параметре path

Как разогнать эмулятор Android?

Читайте соответствующую статью на Хабре. Эмулятор Android x86 работает действительно быстро, почти как реальное Android устройство.