воскресенье, 20 марта 2011 г.

Android - установка и настройка среды разработки.

Программирование на Android начинается с установки Eclipse. В данной статье я рассмотрю порядок установки и настройки Eclipse для работы с Android под Windows. Причем постараюсь рассмотреть его "от" и "до", включая генерацию цифровой подписи, автоматизацию сборки приложения, настройку ProGuard и подключение средств статистического анализа.

Устанавливаем Android SDK

Начнем с установки Android SDK. Процесс подробно описан в руководстве разработчика. Первое что требуется - установить JDK. По умолчанию JDK ставится в директорию типа c:\program files\java\jdk1.6.0_24.
Android SDK требует 32-битную версию JDK, 64-битная его не устраивает.

Далее - скачать и запустить программу установки последней версии Android SDK. В настоящий момент, это installer_r12-windows.exe.

По умолчанию Android SDK ставится в директорию c:\program files\Android\android-sdk. Для того, чтобы избежать проблем с Proguard (ошибок типа Expecting class path separator ';' before 'Files\Java\...), следует устанавливать Android SDK в директорию, не содержащую в своем пути пробелы, например: c:\utils\Android\android-sdk.

После завершения установки запускаем SDK Manager. Выбираем packages, которые нужно установить. Устанавливаем все, выбрав Accept all. SDK Manager скачивает и устанавливает все выбранные пакеты, а затем перезапускается. Установка Android SDK завершена.

Устанавливаем Eclipse

Следующий шаг - установка Eclipse. Детально процесс установки изложен в руководстве разработчика. Он достаточно прост. Качаем Eclipse classic, устанавливаем. Eclipse поставляется в виде zip-архива. Распаковываем его в любую директорию, например, c:\utils\eclipse.

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

Теперь устанавливаем плагин для работы с android SDK - ADT Plugin. Запускаем Eclipse. Он предложит создать новый workspace, соглашаемся.

Желательно workspace и проекты сохранять в директории, не содержащие в путях пробелы. Иначе могут возникнуть проблемы при автоматизации сборки - команда ant release не любит пробелы в путях.

Выбираем Help>Install new software. Жмем кнопку "Add..", появляется окно "Add repository". В поле Name вводим "ADT Plugin", в поле Location указываем https://dl-ssl.google.com/android/eclipse/. Ставим галочку "Developer Tools", дважды жмем Next, принимаем лицензионное соглашение. После завершения загрузки плагина перегружаем Eclipse.

Осталось указать Eclipse путь к Android SDK. Открываем Window>>Preferences>>Android, в графе SDK Location вводим c:\program files\Android\android-sdk. Жмем кнопку "Apply" - появится список установленных API. Закрываем окно - Eclipse и Android SDK установлены.

Создаем/добавляем проект

При первом запуске Eclipse был создан пустой workspace. Добавим в него новый проект.

Выбираем File\New\Project\Android\Android Application Project, указываем название нового проекта. Выбираем Build target - версию платформы, под которую вы будете вести разработку. Задаем Min SDK Version - минимальный уровень API, необходимый для запуска вашего приложения. Задаем название приложения, название пакета (типа com.mydomain.myapp), название базовой Activity.

Пара замечаний. Уровни API в Build target и Min SDK Version могут различаться. Built target задает уровень API, доступный вам при разработке. Min SDK Version задает минимально необходимый уровень API, который должен быть на устройстве пользователя, чтобы пользователь мог скачивать ваше приложение с маркета. Так что можно вести разработку под 2.2, и, одновременно, позволять скачивать это приложение пользователям, у которых на телефоне установлен Android 1.5. Иногда это требуется.

Еще момент - при выборе Built target доступно несколько вариантов с одним и тем же уровнем API, например: Android 2.3.1 и Google APIs. Второй вариант является расширением первого и содержит дополнительный функционал для простого доступа к службам и данным Google. Этот вариант потребуется вам, например, при работе с Google Maps.


А что делать, если проект у вас уже есть и его нужно просто открыть? Помнится, меня этот вопрос поставил в тупик в свое время - нет в Eclipse пункта меню "Open project". На самом деле все просто - проект нужно импортировать в workspace. Делается это так: File>Import>General>Existing Projects into Workspace.

Генерируем подпись

Итак, проект создан и он компилируется. Для того, чтобы готовое приложение можно было установить на Android, его необходимо подписать цифровой подписью. О том как это делать, детально рассказано в руководстве разработчика. Eclipse создает подпись для отладочных билдов самостоятельно. Для релизных билдов подпись делается вручную, но так же через Eclipse.

Релизная версия приложения создается в Eclipse операцией Export. Цифровую подпись для релизной версии можно создать прямо в процессе экспорта.

Запускаем экспорт: File>Export>Android>Export Android Application. Выбираем проект, который следует экспортировать (в нашем случае, он один, выбирать нечего). Выбираем Create new keystore - создать keystore-файл, в котором будет хранится наш приватный ключ (точнее, в таком файле можно хранить сколько угодно приватных ключей, например, по одному для каждого приложения). Вводим имя файла и дважды вводим пароль, закрывающий доступ к keystore-файлу.

Теперь добавляем в keystore-файл ключ для нашего приложения. Указываем алиас - короткое имя, по которому можно будет в дальнейшем к этому ключу обращаться. Дважды вводим пароль для доступа к ключу (теперь у нас два пароля: один для доступа к keystore-файлу, другой - для доступа к ключу в keystore-файле). Вводим информацию о себе и указываем период действия ключа.

С периодом важно не ошибиться. Если срок годности вашего ключа истечет, вы не сможете подписывать им новые версии вашего приложения. А сменить ключ у приложения нельзя. Кроме того, если вы планируете размещать ваше приложение на Android Market, то срок действия ключа должен превышать дату 22 октября 2033, иначе приложение на маркет загрузить не удастся. Руководство разработчика рекомендует устанавливать срок действия ключа 25 лет.

Созданный keystore-файл и пароли к нему надежно сохраняем от доступа посторонних личностей..

Маленький нюанс. Отладочные сборки приложения Eclipse подписывает автоматически созданным keystore-файлом. Такие файлы хранятся локально, в директории типа C:\Users\UserName\.android\debug.keystore. Если вы ведете разработку на нескольких разных компьютерах, то на каждом из них у вас будет сгенерирован отдельный keystore-файл для отладочных сборок. Это сразу создаст проблемы при отладке на девайсе. Поработали на одном компьютере, установили отладочную версию приложения на девайс. Перешли на другой компьютер - новая версия поверх старой не ставится - ключи разные. Приходится каждый раз сносить приложение. Чтобы избежать таких проблем имеет смысл использовать один и тот же отладочный keystore-файл на всех компьютерах. Путь к ключу прописывается в настройках: Windows>Preferences>Android>Build. Отладочный файл debug.keystore действителен в течении 365 дней, раз в год его придется пересоздавать (старый файл нужно удалить, Eclipse создаст новый).

Создаем эмулятор и подключаем девайс

Для отладки Android приложения удобно использовать одновременно как реальный девайс, так и эмулятор. Чтобы создать эмулятор, нужно запустить SDK Manager и выбрать пункт "Virtual devices". При создании эмулятора указать название, платформу, размер SD-карты, выбрать экран и hardware.

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

Для подключения устройства Android к компьютеру вам потребуется установить USB-драйвер для данного конкретного устройства. Как это сделать и где искать драйвера написано в руководстве разработчика.

Для некоторых устройств драйвера найти крайне сложно - имеет смысл зарегистрироваться на форуме 4PDA.ru и поискать там (без регистрации файлы с форума не скачать).

Автоматизируем сборку проекта

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

Cкачиваем Ant. В настоящий момент, последняя версия apache-ant-1.8.2-bin.zip. Распаковываем архив в какую-нибудь директорию, например в c:\program files\ant\apache-ant-1.8.2.

По моему опыту, наличие пробелов в пути к Ant к каким-либо проблемам не приводит, но на 100% я это гарантировать не берусь.

Убеждаемся, что у нас правильно прописаны пути. Нам необходимо добавить две директории в %PATH%:
  • путь к утилитам Android SDK, т.е. c:\utils\Android\android-sdk\tools
  • путь к ant\bin, т.е. c:\program files\ant\apache-ant-1.8.2\bin
Кроме того, необходимо правильно инициализировать две других переменные среды:
  • JAVA_HOME должна указывать на директори JDK, т.е. на c:\program files\java\jdk1.6.0_24 (важно: к JDK, а не к JRE) (Update дек.2012: недавно вылезла проблема - перестал запускаться SDK Manager. Вылечил, указав в JAVA_HOME путь к bin директории, т.е. c:\program files\java\jdk1.6.0_24\bin)
  • ANT_HOME должна указывать на корневую директорию Ant, т.е. c:\program files\ant\apache-ant-1.8.2

Заходим в корневую директорию нашего проекта. Из командной строки выполняем команду
android update project --path .
(не потеряйте точку в конце). Будет создан файл build.xml. Его необходимо подправить. В строке <project name="MainActivity" default="help"> нужно удалить default="help".

Сборка отладочной версии уже работает. Для сборки достаточно зайти в корневую директорию нашего проекта и дать команду "ant".

Чтобы заработала сборка релиза, необходимо прописать параметры цифровой подписи релизных версий. Для этого в корневом каталоге нашего проекта создаем файл build.properties со следующим содержанием:
key.store=путь_к_файлу_keystore
key.alias=имя_алиаса
key.store.password=пароль_к_keystore
key.alias.password=пароль_к_ключу
Путь к keystore-файлу, имя алиаса и пароли, естественно, нужно подставить реальные.

Теперь для сборки релизной версии приложения достаточно зайти в корневой каталог проекта и дать команду ant release. Эта команда не любит пробелы в пути к директории проекта - так что если ваш проект сохранен в C:\document and settings\..., то команда не сработает.

Подключаем ProGuard

ProGuard нужен для обфускации и уменьшения размера кода. До недавнего времени, ProGuard приходилось подключать вручную. Вот здесь детально рассмотрено, как это сделать. Начиная с 9-ой версии SDK, ProGuard включен в состав Android SDK, так что процедура установки существенно упростилась. Все что нужно сделать - добавить в файл build.properties еще одну строчку: proguard.config=proguard.cfg.

Файл proguard.cfg уже есть в корневой директории проекта. Он генерируется при выполнении команды "android update project --path ." вместе с файлом build.xml. Один и тот же файл proguard.cfg можно использовать в разных проектах. В build.properties в этом случае потребуется указывать полный путь к файлу: proguard.config=path\proguard.cfg

Теперь команда ant release использует ProGuard. Для того, чтобы ProGuard использовался так же и при ручном экспорте из Eclipse, необходимо добавить в файл default.properties аналогичную строчку
proguard.config=proguard.cfg
Если при экспорте начнут начать вылазить ошибки, проверьте переменную среды %TEMP%: нет ли пробелов в пути к директории с временными файлами(?).

Любопытно, что заголовке файла default.properties написано следующее:

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!

Но в руководстве разработчика прямо указано, что редактировать нужно этот именно файл.

Добавляем юнит-тестирование

Средства юнит-тестирования в Android встроены, их можно использовать сразу, ничего не устанавливая. Тем не менее, есть дополнительные инструменты, позволяющие упростить процесс тестирования. На них останавливаться не буду - эта тема заслуживает отдельного поста.

Подключаем средства статистического анализа

Для Eclipse существует множество полезных плагинов. В частности, есть парочка очень неплохих плагинов для статического анализа кода: FindBugs и Checkstyle. По функционалу они напоминают FxCop и StyleCop (плагины для Visual Stuido, знакомые NET-программистам).

Статический анализ кода - штука очень полезная, позволяющая найти многие ошибки еще до запуска приложения. Так что эти плагины имеет смысл установить. Ставятся они точно тем же путем, что и ADT Plugin: вызываем Help > Install new software, в поле "Work with" указываем http://findbugs.cs.umd.edu/eclipse/ (для FindBugs) или http://eclipse-cs.sf.net/update/ (для Checkstyle).

Интересно, что FindBugs (по идее) работает с скомпилированными JAR-файлами (подобно FxCop) и не требует исходных кодов. В Android формат байткода другой. Тем не менее, FindBugs успешно работает и с Android-приложениями. Похоже, он не только байткод умеет анализировать, но и исходники напрямую.

Update: Дошли руки, разобрался со статическими анализаторами и написал подробный отчет - "Статические анализаторы кода для Android-приложения". Всего, в настоящий момент, нашлось восемь готовых к использованию анализаторов. И как минимум пять из них имеет смысл регулярно применять в работе.

Итоги

Что мы получили в итоге? Eclipse, настроенный для разработки Android приложения, плюс возможность собирать релизную версию Android приложения (полностью готовую для публикации на маркете) одной командой. Весь процесс установки занимает минут 20-30 - без учета времени скачивания компонентов.

В процессе написания данной статьи я проделал настройку Eclipse "с нуля" на виртуальной машине и постарался отметить все места, которые могут вызвать вопросы. Возможно, кое-где процесс установки описан недостаточно полно. Появятся вопросы - пишите, я постараюсь подправить описание.

20 комментариев:

  1. подскажите пожалуйста.. eclipse и IntelliJ IDEA на выходе получается размер приложения (*.apk) = 400-500 кб, хотя на самом деле 2м.. должно быть, в каких настройках и что нужно указать чтобы в *.apk добавить все ресурсы ?.. спасибо

    ОтветитьУдалить
  2. Ресурсы, по идее, добавляются в apk автоматом - достаточно их поместить в директорию res и сделать Refresh проекта в Eclipse.

    Директории res\* не поддерживают поддиректории. Файлы в res\drawable помещать можно, а в res\drawable\abc - нельзя. Физически такую директорию "abc" можно создать, но обратиться к ее содержимому через R.drawable.my_id не получится. Скорее всего, такие "нелегальные" поддиректории при сборке в apk не добавляются (не проверял). Не в этом, случайно, дело?

    Попробуйте сделать декомпиляцию apk (android-apktool или dedexer) и посмотреть, какие именно ресурсы не добавляются.

    ОтветитьУдалить
  3. чуть не так, все ресурсы нормально(drawable, assets), а вот либы компиляции с помощью которых компилится приложение не добавляются в apk.

    ОтветитьУдалить
  4. Трудно сказать в чем дело - либы я у себя в проектах не использовал, так что опыта нет. В SDK есть пример приложения TicTacToeMain, демонстрирующего использование библиотек. Библиотека там вкомпиливается в apk основного приложения. В описании написано:

    "Currently, an application must declare in its manifest any components or resources that it is using from a library project"

    может в манифесте прописано не все?

    Еще ProGuard может выбросить неиспользуемый код из APK и существенно снизить размер.

    ОтветитьУдалить
  5. Если при добавлении плагина ADT в IDE Eclipse, последний "ругается" на URL https://dl-ssl.google.com/android/eclipse/ используйте URL http://dl-ssl.google.com/android/eclipse/site.xml

    ОтветитьУдалить
  6. Если проект не запускается: ([2011-08-02 06:10:34 - Emulator] PANIC: Could not open AVD config file: C:\Users\СерГ\.android\avd\Android_2_2.avd/config.ini)
    В чем причина?

    ОтветитьУдалить
  7. Ответы
    1. Здравствуйте!
      У меня такая же проблема. В кириллице. Только путь сохраняется автоматически для avd. Я уже полностью и эклипс и сдк переустанавливала, а все равно прописывает авд в одну и ту же папку с именем пользователя.
      Подкажите, плиз, как изменить путь для сохранения авд.
      Спасибо.

      Удалить
    2. В Managing AVDs from the Command Line написано:

      When you create an AVD, the android tool creates a dedicated directory for it on your development computer...

      The android tool also creates an .ini file for the AVD at the root of the .android/avd/ directory on your computer. The file specifies the location of the AVD directory and always remains at the root the .android directory.

      By default, the android tool creates the AVD directory inside ... C:\Documents and Settings\\.android\ on Windows XP, and C:\Users\\.android\ on Windows 7 and Vista. If you want to use a custom location for the AVD directory, you can do so by using the -p option when you create the AVD

      Насколько я понимаю, есть два пути: 1) создавать AVD вручную,явно указывая путь через -p. 2) создать AVD через AVD Manager, затем вручную переместить директорию соданного AVD в нужную директорию и после этого в файле C:\Users\\.android\.ini изменить path на нужный.

      Сам не пробовал.

      Удалить
    3. Большое спасибо за ответ.
      Но проблему я решила другим образом.
      Пришлось создать новую учетную запись с латинскими буквами. именно для работы с эклипс. Так оказалось даже проще. Ничего лишнего не отвлекает :)

      Удалить
  8. про автоматизации здесь неплохо написано http://www.enterra.ru/blog/automation_builds_android_applications/

    ОтветитьУдалить
  9. Этот комментарий был удален автором.

    ОтветитьУдалить
  10. У меня windows7 домашняя 64 бита.
    Папки некоторые на кириллице.
    В процессе установки Jdk-7 u 5 после галочки I accept ... и нажатия Registration Nov получаю ошибку.
    Пробовал оба варианта: 32 и 64 бита.

    ОтветитьУдалить
  11. Здравствуйте.
    Если еще кто-то читает эту статью, вопрос, у меня при запуске SDK Manager список пакетов для загрузки не появляется. Почему-то на ноутбуке нормально все установил, а но компе с тех же дистрибутивов такая проблема...

    ОтветитьУдалить
  12. А галочки внизу в строке "Show" - "Updates/New", "Installed" - включены? Если их отключить, список будет пуст.

    В SDK Manager что то меняли в недавней ревизии 21, может попробовать новый One-click SDK installer скачать?

    ОтветитьУдалить
  13. Доброе время суток, у меня вопросов очень много, можно ли связаться с Вами в скайпе, у меня дипломная работа на эклипсе, готов проплатить Вашу аудиенцию)

    ОтветитьУдалить
    Ответы
    1. Извините, но возможности проводить консультации по скайпу у меня нет, загруженность высокая. Пишите вопросы сюда, по возможности отвечу.

      Удалить
  14. Этот комментарий был удален автором.

    ОтветитьУдалить
  15. Все вроде сделал правильно и все установил! только не пойму одного, когда открываю eclipse-file-new-other-android и тут проблема!!! вы пишете что надо открыть файл android project, но у меня такого нет у меня есть android application project и android project from existing code! что делать?

    ОтветитьУдалить
    Ответы
    1. Google поменяли слегка интерфейс в ADT плагине, но смысл не изменился. Чтобы создать полностью новый проект, в визарде следует выбирать Android Application Project. Чтобы загрузить существующий - Android Project From Existing Code.

      Удалить