Nickolay.info. Тексты. Разработка Java-приложений для Android в ADT и Eclipse

В инете есть масса статей о начале разработки под Android. Только в большинстве из них много непонятного :) Я не претендую, что сделаю понятней, но свой опыт на всякий случай опишу - вдруг кому и пригодится.

По сути, Android - это ява-машина на базе операционной системы Linux. Только ява в ней - нестандартная, что и порождает необходимость ставить кучу дополнительного софта. Почти весь он медленный и глючный, но, при удачном стечении обстоятельств, позволяет написать собственное приложение, которое будет работать на вашем "андрофоне".

Для начала некоторые сокращения, которыми очень любят пользоваться Android-разработчики:

Первым делом следует загрузить и установить Java SE (пакеты JDK и JRE) с сайта Oracle.

Учтите, что JDK и JRE надо поставить до установки Eclpise и желательно именно в указанном порядке.

В некоторых мануалах написано "сначала Эклипсу и плагин, потом JDK". Но так не получалось :)

С другой стороны, если Java уже есть, обновлять до последней версии необязательно. Но версия JRE должна быть не ниже 1.6, а версия JDK - не ниже 5.0. Обычно версию легко понять даже по имени установочного файла.

В пути к приложениям не должно быть символов кириллицы и пробелов, иначе потом проблем не оберётесь. Так что ставить в папку Program Files не надо :) Для подстраховки убедитесь, что у вас есть права администратора, а учётная запись тоже имеет имя без пробелов и кириллицы ("Admin" или даже "11111" - в самый раз, а вот "Кеша" - не годится).

Теперь у нас есть среда для работы с явой и нужен инструмент разработки под Андроид. Вообще-то, есть разные среды (IDE) для разработки на Java (и не только) под Android:

Спорить об их достоинствах и недостатках можно долго, я выбрал Eclipse просто потому, что раньше не пробовал с ней работать и ещё потому, что в этом случае смогу всё скачать одним пакетом. И ещё там есть поддержка визуальной разработки интерфейса приложения, а в "Идее", вроде как, таковой не было, когда я с ней работал.

ADT plugin для Eclipse разрабатывает компания Google, а поддержкой Android в среде IntelliJ IDEA компания JetBrains занимается самостоятельно. Существует мнение что IDEA во многом лучше Eclipse как IDE для Java, но зато в Эклипсе новичку проще адаптироваться.

При выборе Eclipse достаточно загрузить Android SDK отсюда.

Это будет большой архив под 400 мегабайт, но что делать... зато, загрузив пакет "всё в одном" (архиве ZIP, имя архива для Windows будет вроде adt-bundle-windows-x86.zip), мы можем просто развернуть его в подходящую папку, например, в корень диска c: (пробелов и кириллицы в имени папки тоже на надо!)

При первом запуске файла \папка_программы\eclipse\eclipse.exe среда задаст только 2 вопроса:

Начать сразу работать не получится - сначала проверим, есть ли поддержка нужной нам платформы (версии) Android. Идём в меню Window, Android SDK Manager. Включаем, например, все пакеты в ветке Android 2.2 - и они инсталлируются. Правда, у меня они это делали только по одному, а результаты стали видны только после перезагрузки компьютера (должно быть достаточно перезапуска Eclipse).

Теперь, чтобы сделать эмулятор телефона, идём к пункту Window, Android Virtual Device Manager. Выбираем New в правой части окна, в появившемся окне вписываем имя виртуального устройства (латиницей и без пробелов, как и все имена в яве), платформу (допустим Android 2.2), размер карты памяти (допустим 512 Mb), тип дисплея (допустим HVGA). Затем жмем внизу на кнопку Create AVD.

Думаете, всё? Как бы ни так. Нужен ещё тот самый плагин, без которого Eclipse работать с нашим эмулятором не станет. Идём в меню Help, Install New Software и делаем как на рисунке:

Установка ADT, Android Development Tools

Впрочем, система может сказать, что плагин уже установлен, тогда этот шаг - лишний.

Проверим, что среда связана с папкой, куда установлен Android SDK. Жмём в меню Windows, Preferences и проверяем, что прописан верный путь к SDK (SDK Location). Можно нажать Apply.

Идём в меню File, New, Project, папка Android, Android Application Project, кнопка Next.

Вот что можно ввести и выбрать на втором шаге:

Создание нового проекта в ADT

А смысл всего этого таков:

Уровни API в Target SDK и Minimum Required SDK могут различаться. Target SDK задает уровень API, доступный вам при разработке. Minimum Required SDK задает минимально необходимый уровень API, который должен быть на устройстве пользователя, чтобы пользователь мог скачивать ваше приложение с Google Play. Так что можно вести разработку под 2.2, и, одновременно, позволять скачивать это приложение пользователям, у которых на телефоне установлен Android 1.5. Иногда это требуется.
При выборе Target SDK иногда бывает доступно несколько вариантов с одним и тем же уровнем API, например: Android 2.3.1 и Google APIs. Второй вариант является расширением первого и содержит дополнительный функционал для простого доступа к службам и данным Google. Этот вариант потребуется вам, например, при работе с Google Maps. А так обычно он не нужен.

После нажатия кнопки Next на шаге 3 можно оставить всё как есть (обратите внимание, что если выбрана опция Create Project in WorkSpace, папка нового проекта будет внутри ранее выбранной папки для проектов), а на следующем шаге можно загрузить картинку для значка приложения вместо стандартного робота (лучше брать GIF с прозрачным фоном).

Картинку можно брать любого размера, но надо понимать, что из неё сделает среда:
в папке res/drawable-hdpi из вашей картинки будет сгенерирована иконка 72x72 пиксела;
в папке res/drawable-ldpi её размер уменьшится до 36x36 пикселов;
в папке res/drawable-mdpi - 48x48 пикселов;
в папке res/drawable-xhdpi - 96x96 пикселов.
Похоже, это версии иконки для устройств с разными типовыми разрешениями экранов.
Без последнего рисунка часто можно обойтись.

На предпоследнем шаге нужно отметить, с какого вида экрана начнёт работу приложение (если опция Create Activity установлена). "Активити" программисты из Гугля называют экраны (формы) нашего приложения. Если приложение представляет собой сервис, например, "живые обои", то ему Activity не нужна, а иначе обязательна хоть одна. Пусть будет пока BlankActivity, то есть, пустой экран, возможно, с опциональной стандартной навигацией по нему. Нажимаем Next, отвечаем на последние вопросы.

Имя формы (Activity Name) оставим MainActivity. С этим именем будет создан класс. А вот activity_name (следующее поле ввода Layout Name) по умолчанию будет называться макет экрана (layout), который система сгенерирует в папке res/layout.

Наконец, список Navigation Type отвечает за то, какой вид навигации будет на экране, при выборе вида всё показывается на картинке. Обратите внимание, если вы выбираете навигацию, которой нет в выбранной вами Minimum SDK, в верхней части окна появляется красный значок и предупреждение. Выберем пока None, ведь по идее, можно потом добавить и другие активити, а можно в имеющемся сделать несколько экранов. Просто каждое добавляемое активити должно быть прописано в манифесте. Но об этом чуть позже.

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

Вид среды разработки ADT

Структура проекта хорошо видна как в области Package Explorer, так и в папках, созданных внутри папки проекта (которая, в свою очередь лежит внутри папки проектов workspace :)

Обратим внимание лишь на главные:

Подробное описание работы со средой, конечно, выходит за рамки этой небольшой статьи, но ниже я попытался собрать ответы на типовые вопросы, возникающие в начале работы с Eclipse.

Мои несложные проекты-примеры для Android доступны в apk-файлах и исходниках (в виде проектов Eclipse) на этой странице сайта, их можно свободно использовать для отработки собственных навыков.

Маленький FAQ по Eclipse, найденные баги и особенности среды

1. Требования к компьютеру/ОС

Права учётной записи?
Запускайте и делайте всё с правами администратора, иначе результаты непредсказуемы (например, при установке плагинов).
Сборка ОС?
Win7 (32) домашняя (Starter) и прочие недовиндоус - побоку. Ставьте "семёрку" или XP Professional, многие проблемы исчезнут :)
32 или 64 разряда?
Если у вас 64-разрядная версия Eclipse, то и JRE надо скачивать 64 битный. А JDK можно, по идее, и 32-битный оставить.

2. Проблемы при установке

Пути к папкам?
Если при создании AVD из Эклипсы в пути есть русские буквы - будет плохо. Нигде в путях не надо русских букв, да и пробелов тоже
Кодировка файлов?
А вот кодировка везде должна быть Юникод (UTF-8) без BOM, учтите это при "ручной" работе с файлами проекта, копипастении и т.д. Блокнот Windows не подходит, а встроенный редактор "Эклипсы", или Far Manager, или Notepad++ - да.
Android SDK не видит JDK?
Случается, что Android SDK "не видит" JDK при инсталляции. Достаточно просто во время установки вернуться на экран назад (на том экране, где сообщение о том, что JDK не установлен, нажать "Back" или "Назад"), а потом снова продолжить установку - Android SDK установится без предупреждений.
Как узнать версию платформы Эклипсы в пакете "все в одном" (Android Developer Tools)?
Help, About ADT, кнопка Eclipse.org (где-то пятая слева) Или если у вас как-то по другому - то смотрите в окне помощи информацию об org.eclipse.platform
Что такое Juno, Indigo, Helios, Galileo, Ganymede, Europa?..
Идиотская маркировка версий Eclipse. В принципе, это разные версии, но и разные пакеты тоже. Так как установка Eclipse сводится к разворачиванию архива, их можно поставить все одновременно в разные папки.
Как узнать, какая именно Eclipse у вас?
Для ADT нужен Eclipse не ниже 3.6. Galileo - это 3.5, далее идут Helios (3.6), Indigo(3.7) и Juno(3.8). А версия эта написана в меню Help, About ADT, кнопка Eclipse.org (где-то вторая справа; не путать с версией Eclipse Platform :) Здесь именно версия средств разработки на Java от eclipse, org.eclipse.jdt.
Как русифицировать Eclipse?
Поможет Бабель :) Переходим по ссылке, находим "Babel Language Pack Update Site" для своей версии (см. выше, как узнать), копируем адрес ссылки, что написана ниже, делаем из неё правильный адрес. Например, у меня Juno, значит я ищу "Babel Language Pack Update Site for Juno" и создаю ссылку вида
http://download.eclipse.org/technology/babel/update-site/R0.10.0/juno

В Eclipse заходим в меню Help, Install new software, нажимаем кнопку Add, чтоб добавить новый репозитарий (рядом с полем Work with; так у них называется ссылка для закачки). В поле ввода Location вставляем ссылку, ждём, пока Eclipse получит содержимое по ссылке, находим в списке Babel Language Pack in Russian, отмечаем его галочкой и жмём Next, соглашаясь с лицензионным договором. Всё ставится, перезапускаем Eclipse (сама предложит) и имеем русскую версию. Но вообще-то не торопитесь с этим - везде в мануалах, как правило, приводятся англоязычные названия команд.

Как деинсталлировать зря установленные пакеты?
В том же окне Android SDK Manager отметить нужные галочки и нажать кнопку Delete Packages :)
Как удалить Android SDK полностью?
Удалить папки и на всякий случай можно почистить утилитой CCleaner. По идее, Eclipse не пишется в реестр, только в файлы в папках юзера.

3. Проблемы при работе с кодом

Eclipse ругается на класс R в коде: R cannot be resolved to a variable
Пробуем меню Project - Clean. Если не помогает - для имени пакета package производитель.приложение; вставьте в каждый проблемный файл строку импорта import производитель.приложение.R;
Не помогло, ругается, а ошибки в коде нет...
Попробуйте Window - Run Android Lint. Если ещё будут баги - кликайте на Refresh.
Предупреждение, что не установлена KB nature, KB product и т.п.
Правой кнопкой мыши на ошибке, Quick Fix (Быстрое исправление), и всё запустилось :)
Как открыть сохраненный проект?
Удивительно, но через меню File - Import - General - Existing Projects into Workspace, показать папку проекта. Если открылся успешно, нажимаем сочетание клавиш Ctrl+F11 или зелёную стрелку "Run".

И ещё, не обязательно закрывать проекты вообще. Если в Project Explorer щёлкнуть правой клавишей мыши на названии проекта (HelloWorld, к примеру), там в контекстном меню есть пункт Close Project. Если нажмёте, проект запакуется. Затем Open Project'ом из того же меню можно открыть обратно.

Скачал исходники какого-то проекта, развернул, но не могу открыть у себя в Eclipse...
Правильный путь таков: File - Create - Project - открыть список (+) Android - Android Project from Exisiting Code. Скачанное при этом пусть лучше лежит в другой папке, например, папка_eclipse\sources.
Ой, закрыл нужную панель, как вернуть вид панелей по умолчанию?
Меню Окно - Сброс проекции.
Не найдено SDK при компиляции и т.п.
Нажимаем правую кнопку на "Мой компьютер" и выбираем "Свойства". На вкладке "Дополнительно" жмём на "Переменные среды", в разделе "Системные переменные" выбираем строчку "Path" и жмём кнопку "Изменить". Добавляем в конец строки полный путь до директории sdk/tools/, предварительно отделив его точкой с запятой ";". Добавляемый путь должен заканчиваться "слешем", например C:\eclipse\android-sdk-windows\tools\
Как узнать или поменять горячие клавиши, непривычно?
Сочетание клавиш Ctrl+Shift+L - вызывается весь список горячих клавиш. Если 2 раза нажать Ctrl+Shift+L, то перейдём в окно редактирования горячих клавиш.
Пропадают и появляются строки в редакторе разметки при кликах мыши по ним.
Жмём Ctrl+Shift+F. И ещё - достаточно писать аккуратно и не делать по двадцать пробелов между блоками - проблем не будет.

4. Проблемы при отладке

Где в Eclipse находится файл apk моего приложения?
Файл Ваши_проекты\Имя_проекта\Имя_проекта.apk. После очистки проекта его там не будет, запустите в эмуляторе - создастся заново. Это будет так называемая отладочная версия, уже подписанная автоматически. Релизная версия приложения тоже создается в Eclipse. Достаточно нажать правой кнопкой на папке проекта в Package Explorer и дальше Export, Android, Export Android Application. Там нужно будет указать ключевой файл (цифровую подпись), если она есть, но, я так понимаю, обычно её у нас нет, так что будет предложено её создать.
А как правильно создать цифровую подпись в ADT?
Выбираем проект, который следует экспортировать. Выбираем Create new keystore - создать keystore-файл, в котором будет хранится наш приватный ключ. Вводим имя файла и дважды - пароль, закрывающий доступ к keystore-файлу. На следующем шаге экспорта указываем alias - короткое имя, по которому можно будет в дальнейшем к этому ключу обращаться. Дважды вводим пароль для доступа к ключу (да, паролей теперь 2 - для доступа к keystore-файлу и для доступа к ключу в keystore-файле).

Указываем период действия ключа (число лет). С периодом важно не ошибиться, т.к. если срок годности ключа истечёт, вы не сможете подписывать им новые версии приложения. А сменить ключ у приложения нельзя. Кроме того, для размещения приложения на Google Play (бывший Android Market) срок действия ключа должен превышать дату 22 октября 2033, иначе приложение на маркет загрузить не удастся. Руководство разработчика рекомендует устанавливать срок действия ключа на 25 лет. Наконец, вводим информацию о себе (достаточно первой строки с именем или псевдонимом). Созданный keystore-файл и пароли к нему надёжно сохраняем. У меня приложение, подписанное "правильным" ключом, установилось на телефон вместо "отладочного" только после того, как я полностью удалил данные и само приложение через стандартное меню "Настройки" Андроида.

Как управлять эмулятором?
Стандартный эмулятор очень тормозной, зато закрывать его окно каждый раз не нужно, после перекомпиляции он поймёт, что приложение изменилось. В первый раз подождите старта виртуального Андроида на эмуляторе, это может занять минуту-две. В окне эмулятора клавиша F2 работает как кнопка "меню" приложения, Esc как кнопка "Назад", на экране также работает выбор мышкой и "протаскивание" ей (например, на списках). В программе Custom locale эмулятора можно выбрать русскую локаль.
Приложение не проходит этапы uploading apk/installing apk, или при каждом запуске открывает новую копию виртуалки, даже если та открыта...
Скорее всего, слабый или не сконфигурированный компьютер. Среда запускает новый эмулятор, не дождавшись ответа от запущенного. Из папки папка_программы\sdk\platform-tools\ можно попробовать выполнить командную строку
adb connect 127.0.0.1
Как выводить отладочную информацию?
Логирование описано здесь. В меню включите панель Окно, Показать панель, LogCat.
Что значит "Re-installation failed due to different application signatures"?
Скорее всего, приложение компилировалось с разных компьютеров, отчего ключи, которыми оно подписано, разные. Очистить проект или удалить приложение вручную из папки проектов. Путь к ключу прописывается в настройках: меню Windows, Preferences, Android, Build, см. поле Debug keystore.
Ура, я закончил свой HelloWorld, можно ли уже загрузить на Google Play и прославиться?
Да, если не жалко $25 и не забудете подписать приложение нормальным ключом вместо отладочного. Отладочный файл debug.keystore действителен в течении 365 дней, раз в год его придется пересоздавать. Для этого под Windows нужно удалить старый файл из папки %USERPROFILE%/.android
Какие файлы и папки добавить в архив при копировании исходников проекта?
Достаточно папок assets (туда копируются ресурсы вроде шрифтов и мультимедийных файлов), res со всеми вложенными папками (вроде drawable-hdpi, drawable-ldpi, drawable-mdpi, layout, menu, values, xml), src с исходными текстами классов и файлов AndroidManifest.xml, project.properties (в последнем обычно только строка вида target=android-8). Можно ещё папку .settings, если там что-то есть (например, указание что все файлы проекта хранятся в кодировке UTF-8). Всё остальное сгенерируется при импорте проекта.

Рейтинг@Mail.ru

вверх гостевая; E-mail