Привет, Android! Разработка мобильных приложений
Қосымшада ыңғайлырақҚосымшаны жүктеуге арналған QRRuStore · Samsung Galaxy Store
Huawei AppGallery · Xiaomi GetApps

автордың кітабын онлайн тегін оқу  Привет, Android! Разработка мобильных приложений

 

Э. Бурнет

Привет, Android! Разработка мобильных приложений

Научный редактор Е. Пасечник

Переводчик А. Заика

Технический редактор Е. Пасечник

Литературный редактор Е. Пасечник

Художники Л. Адуевская, А. Шляго (Шантурова)

Корректоры Н. Викторова, Н. Викторова

Верстка Е. Егорова

 

Э. Бурнет

Привет, Android! Разработка мобильных приложений. — СПб.: Питер, 2014.

 

ISBN 978-5-459-01015-2

© ООО Издательство "Питер", 2014

 

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

 

Отзывы читателей о книге «Привет, Android»

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

Марко Гарджента (Marco Gargenta),

CEO,maracana.com

 

Третье издание книги «Привет, Android» позволит вам в кратчайшие сроки освоить разработку приложений для Android, начиная с основных понятий и заканчивая публикацией ваших приложений на Android Market. Эд делится своими обширными знаниями в данной области и касается даже таких тем, информацию по которым найти весьма непросто. Среди них — использование технологии мульти-тач (multi-touch) и OpenGL. Это руководство обязательно нужно прочитать тем, кто начинает захватывающее путешествие в мир разработки приложений для Android.

Диего Торрес Милано (Diego Torres Milano),

эксперт по Android, блогер

 

Я полностью удовлетворен книгой «Привет, Android», с ее помощью я нашел верное направление, приведшее меня к выпуску моих первых двух приложений на Android Market.

Натан Рэпп (Nathan Rapp),

основатель KMBurrito Designs

 

«Привет, Android» — это не только первое знакомство, но и приглашение для новичков и профессионалов в мир разработки для платформы Android.

Майкл Мартин PMP (Michael Martin PMP),

основатель GoogleAndBlog и Mobile Martin

Благодарности

Мне хотелось бы поблагодарить множество людей, которые сделали возможным выход этой книги, в том числе — читателей предыдущих изданий за все их замечательные предложения; моего редактора, Сюзанну Пфэлзер (Susannah Pfalser) за ее внимание к деталям; Хавьера Колладо (Javier Collado), Мэрилин Харрет (Marilynn Huret) и Стефана Нотеберга (Staffan Nöteberg) за ценные комментарии; и особенно Лизу, Майкла и Кристофера за их бесконечное терпение и поддержку.

Предисловие

Android — это программное обеспечение с открытым кодом для мобильных телефонов, созданное компаниями Google и Open Handset Alliance. Android установлен на миллионах мобильных телефонов и других устройств, и это делает его основной платформой для разработчиков программного обеспечения. Являетесь ли вы любителем или профессиональным программистом, делаете ли вы свое дело ради удовольствия или ради денег, для вас настало время побольше узнать о разработках под Android. Эта книга поможет сделать первый шаг.

Что делает Android особенным?

На рынке уже существует множество мобильных платформ, в том числе Symbian, iPhone, Windows Mobile, BlackBerry, Java Mobile Edition, Linux Mobile (LiMo) и другие. Когда я рассказываю людям об Android, они часто задают один и тот же вопрос: «Зачем нам нужен другой мобильный стандарт? А особенно тот, в котором нет „ничего для себя!“?»

Хотя многие фишки Android появились раньше, он стал первой средой, которая совместила в себе следующие особенности:

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

• Архитектура, основанная на компонентах, несущая в себе идеи, распространенные в Интернете. Различные части приложения могут быть использованы не так, как это было изначально задумано разработчиками. Вы можете даже заменить встроенные компоненты на собственные, улучшенные версии. Эта его особенность позволяет достичь нового уровня креативности в области разработки мобильных приложений.

• Множество изначально встроенных возможностей. Сервисы определения местоположения, основанные на GPS или алгоритмах триангуляции базовых станций, позволяют управлять пользовательскими приложениями в зависимости от физического расположения абонента. Полнофункциональная SQL-база данных позволяет программам, требующим подключения к Сети, работать с локальным хранилищем данных в промежутках между синхронизациями. Браузер и карту можно встроить непосредственно в приложения. Все эти встроенные возможности помогают увеличить функциональность программ и снизить затраты на разработку.

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

• Высококачественные графика и звук. Качественная, сглаженная двумерная (2D) векторная графика и анимация, вдохновленные идеями Flash, смешанные с возможностями 3D-ускорения OpenGL, предоставляют широкие возможности новым видам игровых и деловых приложений. В систему встроены кодеки для проигрывания наиболее распространенных аудио- и видеоформатов, в том числе форматов H.264 (AVC), MP3 и AAC.

• Переносимость между широким диапазоном существующего и будущего аппаратного обеспечения. Все программы для ваших мобильных устройств написаны на Java и исполняются на виртуальной машине Android Dalvik, а это значит, что ваш код можно переносить между устройствами, основанными на архитектурах ARM, x86 и другими. В систему включена поддержка множества способов ввода данных, таких как клавиатура, тач-скрин, трекбол. Пользовательский ин­терфейс может быть настроен под любое разрешение и любую ориентацию экрана.

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

Для кого предназначена эта книга?

Единственное требование к читателю этой книги — понимание базовых основ программирования на Java или на похожем объектно-ориентированном языке (в крайнем случае на C#). Вам не понадобится опыт разработки приложений для мобильных устройств. Напротив, будет лучше, если вы попытаетесь забыть подобный опыт. Android настолько отличается от всего остального, что лучше начинать работу с ним «с чистого листа».

Что вы найдете в этой книге?

Книга «Привет, Android» разделена на четыре части. Материалы книги расположены по принципу «от простого к сложному» или от более общих к специализированным аспектам Android.

Через несколько глав проходит сквозной пример: игра Android Sudoku. Постепенно добавляя в игру новые возможности, вы изучите множество сторон программирования под Android, в том числе пользовательский интерфейс, мультимедийные возможности и жизненный цикл программы на Android.

В части I мы начнем с введения в Android. Именно здесь вы узнаете, как установить эмулятор Android и как использовать интегрированную среду разработки (IDE) для того, чтобы написать вашу первую программу. Затем мы расскажем о жизненном цикле Android-приложений. Программирование для Android немного отличается от того, что вы делали раньше, поэтому убедитесь в том, что вы поняли это, прежде чем двигаться дальше.

Часть II предоставляет сведения о пользовательском интерфейсе Android, двумерной графике, мультимедийных компонентах и простом доступе к данным. Эти возможности будут использованы в большинстве программ, которые вы напишете.

Часть III представляет собой более глубокое погружение в платформу Android. Здесь вы узнаете о том, как соединить вашу программу с внешним миром, о сервисах, основанных на определении местоположения, встроенной базе данных SQLLite и трехмерной графике.

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

В конце книги вы найдете приложение, которое иллюстрирует разницу между платформами Android и Java Standard Edition (SE), а также список литературы.

Что нового в третьем издании?

Третье издание этой книги обновлено для поддержки всех версий Android — от версии 1.5 до 2.2 и других. Здесь содержится краткий перечень новых возможностей, представленных в каждой из версий, и ссылки на разделы, которые раскрывают эти возможности.

Новое в версии Cupcake

В Android 1.5 (Cupcake) представлено множество улучшений платформы Android, в том числе поддержка экранной клавиатуры, видеозаписей, виджетов. Имеется более 1000 различий в Android API между версиями 1.1 и 1.51. О виджетах речь пойдет в разделе 12.1 «Привет, виджет».

Новое в версии Donut

В Android 1.6 (Donut) добавлена поддержка экранов высокой и низкой плотности размещения пикселей плюс множество менее значительных изменений, которые не затрагивают большинства разработчиков2. Вы можете узнать о том, как поддерживать эти различные форм-факторы устройств, в разделе 13.5 «Все экраны, большие и маленькие»

Новое в версии Eclair

В Android 2.0 (Eclair) добавлены: поддержка технологии мульти-тач, виртуальных клавиш, централизованного управления учетными записями, API-синхронизации; обработка подключения к док-станции; HTML5 и многое другое3. Версию 2.0 быстро заменил Android 2.1 (его тоже называют Eclair), который содержит все нововведения версии 2.0 плюс несколько исправлений4. Технология мульти-тач обсуждается в главе 11 «Мульти-тач».

Новое в версии Eclair MR1

В Android 2.1 (Eclair Maintenance Release 1) добавлены интерактивные обои, лучшая поддержка HTML5 и другие, менее значительные, улучшения5. Расширения стартового экрана, в том числе интерактивные обои и виджеты, представлены в главе 12 «Нет места лучше дома».

Новое в версии Froyo и в других версиях

Android 2.2 (Froyo) поддерживает установку приложений на внешний носитель (SD-карты), более быструю виртуальную машину Java, API OpenGL ES 2.0 и многое другое6. В разделе 13.6 «Установка на SD-карту» объясняется, как настроить вашу программу таким образом, чтобы ее можно было установить на внешний носитель, и описываются ситуации, к которых это следует и не следует делать.

Android 1.5 (или более новые версии) доступен сейчас на всех поставляемых Android-устройствах. Он установлен на все новые устройства, и, по заверениям Google, почти все более старые устройства обновлены до версии 1.5 или более поздней. Обратитесь к Android Device Dashboard7 для того, чтобы узнать, какую долю рынка занимают устройства на различных версиях платформы. Версии 1.1 или более ранние в книге не рассматриваются.

Обратите внимание на то, что пока платформа на всех устройствах будет обновлена, это может занять некоторое время, если вообще произойдет. Так, глава 13 «Написав однажды, протестируй везде» рассказывает о том, как создавать программы, которые поддерживают множество версий платформы. Все примеры из этой книги протестированы на версиях платформы от 1.5 до 2.2.

Онлайн-ресурсы

На веб-сайте этой книги (http://pragprog.com/titles/eband3/hello-android) вы найдете следующее:

• полный исходный код всех программ, использованных в этой книге;

• форум, где вы можете напрямую связаться с автором и другими Android-разра­бот­чиками (будем надеяться, что форум окажется полным до краев!).

Вы можете скачать с сайта издательства «Питер» (www.piter.com) архив с дополнительными материалами к этой книге.

Используйте представленные исходные коды для разработки собственных приложений.

Вперед >>

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

Каждая глава в этой книге завершается разделом «Вперед >>». Этот раздел содержит некоторые указания о том, куда вам следует идти дальше в том случае, если вам нужно читать книгу не по порядку. Также вы найдете там указания на другие источники информации, такие как книги и документация в Интернете, в том случае, если вы захотите узнать больше по интересующей вас теме.

Итак, чего же вы ждете? Следующая глава — глава 1 «Быстрый старт» — окунет вас прямо в глубины разработки вашей первой программы для Android. Глава 2 «Ключевые концепции» сделает шаг назад и ознакомит вас с основными концепциями и философией Android, а глава 3 «Разработка пользовательского интерфейса» углубится в пользовательский интерфейс, который является основной частью большинства программ на Android.

Ваша главная цель заключается в том, чтобы сделать ваши приложения доступными для продажи или бесплатной загрузки на Android Market. Когда вы будете к этому готовы, глава 14 «Публикация на Android Market» покажет вам, как сделать этот заключительный шаг.

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу электронной почты comp@piter.com (издательство «Питер», компьютерная редакция).

На веб-сайте издательства (www.piter.com) вы можете скачать архив с дополнительными материалами к этой книге.

Мы будем рады узнать ваше мнение!

На веб-сайте издательства http://www.piter.com вы найдете подробную информацию о наших книгах.

1 http://d.android.com/sdk/api_diff/3/changes.html

2 http://d.android.com/sdk/api_diff/4/changes.html

3 http://d.android.com/sdk/api_diff/5/changes.html

4 http://d.android.com/sdk/api_diff/6/changes.html

5 http://d.android.com/sdk/api_diff/7/changes.html

6 http://d.android.com/sdk/api_diff/8/changes.html

7 http://d.android.com/resources/dashboard/platform-versions.html

Часть I. Введение в Android

• Глава 1. Быстрый старт

• Глава 2. Ключевые концепции

Глава 1. Быстрый старт

Android, опираясь на повсеместную распространенность мобильных телефонов, сочетает в себе преимущества программного обеспечения с открытым исходным кодом, корпоративную поддержку Google и других членов Open Handset Alliance, таких, как Motorola, HTC, Verison и AT&T. Образно говоря, это мобильная платформа, которую вы не имеете права не изучить.

К счастью, начать разработку приложений для Android довольно просто. Вам даже не нужен телефон на Android — нужен лишь компьютер, где вы можете установить Android SDK и эмулятор сотового телефона.

В этой главе я покажу вам, как установить все необходимые инструменты разработчика, после чего мы начнем ими пользоваться для того, чтобы создать работающее приложение — традиционное «Hello, World» для платформы Android.

1.1. Установка инструментов

Набор инструментов разработчика для Android (SDK — Software Development Kit) работает под Windows, Linux и Mac OS X. Приложения, которые вы создадите, естественно, можно будет установить на любое Android-устройство.

Прежде чем вы начнете создавать текст программы, вы должны установить на свой ПК платформу Java, IDE (Integrated Development Environment — Интегрированную среду разработки) и Android SDK.

Java 5.0+

Для начала вам понадобится копия платформы Java. Все инструменты разработки под Android нуждаются в ней, и программы, которые вы пишете, будут использовать язык Java. Нам нужен JDK 5 или 6.

Недостаточно иметь лишь среду времени выполнения (JRE — Java Runtime Environment), вам понадобится полный комплект для разработчика. Я рекомендую скачать последнюю версию Sun JDK SE 6.0 с сайта Sun8. Практика показывает, что 32-битная версия предпочтительнее (см. врезку «32 бита против 64 битов»). Пользователи Mac OS X должны выбрать последнюю версию Mac OS X и JDK с веб-сайта Apple.

Чтобы удостовериться в том, что у вас есть нужная версия, запустите команду java–version из окна командной строки. Вот что получилось у меня, когда я запустил ее:

C:\> java -version

java version "1.6.0_14"

Java(TM) SE Runtime Environment (build 1.6.0_14-b08)

Java HotSpot(TM) Client VM (build 14.0-b16, mixed mode, sharing)

Вы должны увидеть что-то подобное с версией «1.6. …» или более поздней.

Eclipse

Далее следует установить среду разработки для Java, если у вас она еще не установлена. Я рекомендую Eclipse, так как она, во-первых, бесплатная, а во-вторых, используется и поддерживается разработчиками Google, которые создали Android.

Минимальная рекомендуемая версия Eclipse — 3.3.1, но вы всегда должны использовать самые свежие версии программных продуктов. Перейдите к странице загрузки Eclipse9, выберите Eclipse IDE for Java Developers. Обратите внимание на то, что вам нужно больше, чем просто стандартная, «классическая» платформа Eclipse SDK. Загрузите установочный пакет во временную папку, распакуйте его (обычно хватает двойного щелчка на имени файла) и переместите все распакованные файлы в отдельную папку (например, в Windows это C:\Eclipse, в Mac OS X это /Applications/Eclipse).

Если вы не хотите пользоваться Eclipse (всегда найдется кто-то, отличающийся от других), обратитесь за поддержкой других IDE, таких как NetBeans и JetBrains IDEA, к соответствующим сообществам. Или, если вы действительно являетесь ныне почти вымершим программистом-динозавром, то можете полностью забыть про IDE и пользоваться инструментами командной строки10. В этой книге мы будем пользоваться Eclipse. Если вы выбрали что-то другое, вам придется делать поправки на особенности другой интегрированной среды.

Android SDK Starter Package

Начиная с версии 2.0 Android SDK разбит на две части: SDK Starter Package и SDK Components. Для начала воспользуйтесь веб-браузером, чтобы загрузить Starter Package. Страница загрузки Android11 содержит пакеты для Windows, Mac OS X и Linux. После загрузки выбранного пакета распакуйте .zip-файл в папку для хранения временных файлов.

32 бита против 64 бит

Если вы пользуетесь 64-битной версией Windows, вы можете захотеть установить 64-битную версию Java Development Kit вместо 32-битной версии. Старые версии Eclipse имели проблемы при работе с 64-битным JDK, которые исправлены в Eclipse 3.6 («Helios»)12. Однако некоторые браузеры все еще нуждаются в 32-битных версиях Java-плагинов. За исключением тех случаев, когда вам действительно нужна 64-битная Java, лучше использовать 32-битные версии и Java и Eclipse.

По умолчанию SDK распаковывается в папку с именем android-sdk-[операционная система]_[платформа]. Например, папка с 32-разрядной SDK для Windows будет иметь имя android-sdk-windows_x86. Переместите эту папку в удобное место, например в папку C:\Google или /Applications/Google. Запомните полный путь папке с SDK, чтобы иметь возможность обратиться к ней позже из Eclipse как к установочному каталогу (install directory) SDK.

Программы, необходимые для работы Eclipse или SDK, не нуждаются в специальной установке, но я рекомендую вам добавить пути к папкам tools и platform-tools в переменную PATH.

Android SDK Components

Далее запустите программу Setup SDK. В Windows запустите файл SDK Setup.exe или SDK Manager.exe. В Linux или Mac OS X запустите программу tools/android, выберите Available Packages, установите флажки напротив каждого пакета и нажмите Install Selected.

 

Рис. 1.1. Установка Android SDK Components

Программа Setup отобразит список доступных компонентов, включая документацию, платформы, дополнительные библиотеки, USB-драйверы (см. рис. 1.1). Выберите команду Accept All и щелкните на кнопке Install. Все перечисленные компоненты будут загружены и установлены в установочную папку SDK. Обратите внимание на то, что на установку может уйти довольно много времени. Для того чтобы ускорить этот процесс, вы можете включить или отключить отдельные компоненты вместо того, чтобы устанавливать их все.

Если вы столкнулись с ошибкой HTTP SSL, отмените загрузку, выберите команду Settings в основном окне SDK и AVD Manager. Выберите параметр Force https:// sources to be fetched using HTTP:// и щелкните на кнопке Save&Apply. Выйдите из программы установки и запустите ее снова.

Следующий шаг — запуск Eclipse и ее настройка.

Плагины для Eclipse

С целью облегчения процесса разработки Google выпустил плагин для Eclipse, который называется Android Development Toolkit (ADT). Чтобы установить плагин, выполните следующие шаги (обратите внимание на то, что эти указания даны для Eclipse 3.5, — в других версиях меню и команды могут отличаться).

1. Запустите Eclipse (eclipse.exe в Windows или eclipse в Mac OS X или Linux). Если вас спросят о рабочей папке (workspace), просто согласитесь с параметрами по умолчанию и нажмите OK.

2. Выберите команду меню Help-Install New Software. Посмотрите врезку Вопрос/ответ, если у вас возникнет ошибка подключения.

3. Щелкните на ссылке Available Software Sites в появившемся диалоговом окне.

 

Рис. 1.2. Установка Android Development Toolkit

4. Нажмите кнопку Add… (Добавить).

5. Введите адрес сайта обновлений Android Development Tools: https://dl-ssl.google.com/android/eclipse/. Заполненное диалоговое окно должно выглядеть так, как показано на рис. 1.2.

6. Щелкните на кнопке OK, чтобы вернуться к списку сайтов, затем щелкните на кнопке Test Connection, чтобы проверить адрес сайта, который вы только что ввели. Если у вас возникли проблемы с этим сайтом, попробуйте использовать протокол HTTP вместо HTTPS. Когда вы убедитесь в правильности адреса, нажмите OK еще раз, чтобы вернуться в диалоговое окно Install New Software (Установка нового программного обеспечения).

7. Введите android в поле Work With и нажмите Return. В списке ниже должна появиться запись Developer Tools.

8. Установите флажок около Developer Tools и нажмите Next. Если вы получили сообщение об ошибке на данном этапе, вы, возможно, установили не ту версию Eclipse. Я настоятельно рекомендую пользоваться либо преднастроенной версией Eclipse IDE for Java Developers, либо Eclipse IDE for Java EE Development версии 3.5 или более новой.

Если у вас другой дистрибутив Eclipse, то для работы с редакторами Android вам понадобится установить плагин Web Standard Tools (WST) со всеми его предустановками.

Обратитесь к веб-страничке13 Web Tools Platform за дополнительными инструкциями и ссылками для загрузки. Все это уже встроено в рекомендованные пакеты, упомянутые ранее.

Вопрос/ответ

Появляется сообщение: «Connection Error» («Ошибка соединения»). И что мне делать?

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

Чтобы ввести в Eclipse данные о прокси-сервере, выполните команду Window —> Preferences —> General —> Network Connections (Окно —> Установки —> Общие —> Сетевые соединения) или Eclipse —> Preferences (Eclipse —> Установки) на Mac OS X, включите Manual proxy configuration (Ручная настройка прокси-сервера), введите имя сервера и номер порта и нажмите OK. Если вы не видите этого параметра, возможно, вы запустили устаревшую версию Eclipse. Попытайтесь поискать в меню Preferences —> Install/Update (Установки —> Инсталляция/Обновление) или поищите настройки по ключевому слову proxy (прокси-сервер).

9. Посмотрите список компонентов, которые будут установлены, нажмите Next, примите лицензионные соглашения и затем нажмите Finish, чтобы начать процесс загрузки и установки.

10. После успешного завершения установки перезапустите Eclipse.

11. Возможно, при следующем запуске Eclipse выведет несколько сообщений об ошибках, так как вы еще не сообщили среде разработке, где расположен Android SDK. Выберите команду меню Window —> Preference —> Android (Eclipse —> Preferences на Mac OS) и введите туда путь к папке, в которую установлен SDK, — тот путь, который вы запомнили ранее. Нажмите OK.

Вот и все! К счастью, вы должны проделать все это только один раз (или, по крайней мере, не чаще, чем появляется новая версия Eclipse или ADT). Сейчас, ­когда все необходимое установлено, настало время написать вашу первую программу.

1.2. Создание первой программы

ADT поставляется со встроенной демонстрационной программой, или шаблоном, поэтому мы собираемся использовать его для создания буквально за несколько секунд простой программы «Hello, Android». Приготовьте секундомер. Все готово? Начали!

Выполните команду меню File —> New —> Project, чтобы открыть диалоговое окно New Project. Далее выберите Android —> Android Project и нажмите Next.

Введите в окно нового проекта следующую информацию:

Project name: HelloAndroid

Build Target: Android 2.2

Application name: Hello, Android

Package name: org.example.hello

Create Activity: Hello

Min SDK Version: 8

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

Нажмите на кнопку Finish. Плагин Android создаст проект и заполнит некоторые строки по умолчанию. Когда проект будет готов к исполнению, Eclipse скомпонует и упакует его. Если вы столкнулись с ошибкой отсутствия папок с исходниками, выберите команду Project —> Clean, чтобы исправить ее.

Итак, система позаботилась о создании программы; сейчас все готово к тому, чтобы попробовать ее запустить. Для начала мы запустим ее на эмуляторе Android.

1.3. Запуск программы на эмуляторе

Для того чтобы запустить вашу Android-программу, перейдите в окно Package Explorer, щелкните правой кнопкой мыши на проекте HelloAndroid и выберите коман­ду Run As —> Android Application. Если вы следовали за нами при работе над этим примером, то, скорее всего, увидите диалоговое окно с описанием ошибки, похожее на рис. 1.4. Оно указывает на то, что мы не сообщили эмулятору, какой именно телефон эмулировать.

Создание AVD

Вам нужно создать Android Virtual Device (AVD — виртуальное устройство Android), используя либо Eclipse, либо команду android avd14. Проще использовать Eclipse, поэтому выберите Yes в диалоговом окне Android AVD Error, чтобы открыть окно AVD Manager. Позже вы можете открыть менеджер снова, выбрав команду Window —> Android SDK and AVD Manager.

Рис. 1.3. Новый проект для платформы Android

 

Рис. 1.4. Отсутствие Android Virtual Device (AVD — Виртуального устройства Android)

Поддержание плагинов в хорошем состоянии

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

Щелкните на кнопке New… и заполните поля для нового AVD следующим образом:

Name: em22

Target: Android 2.2 - API Level 8

SDCard: 64

Skin: Default (HVGA)

Этим вы сообщаете Eclipse, что нужно создать стандартное устройство, именуемое em22, которое имеет прошивку Android 2.2 (Froyo) и дисплей с разрешением half-VGA (320×480). Будет также выделено место под 64-мегабайтную виртуальную SD-карту.

Закончив установку, вы должны увидеть что-то наподобие рис. 1.6. Так как с тех пор, как написана эта книга, инструменты SDK были обновлены, картинка на вашем экране может выглядеть немного по-другому.

Щелкните на кнопке Create AVD, чтобы создать виртуальное устройство. Через несколько секунд вы увидите сообщение о том, что устройство создано. Нажмите OK, выберите AVD, затем нажмите Start… и затем Launch, чтобы запустить эмулятор. По окончании процесса закройте AVD Manager.

Cupcake vs. Donut vs. Eclair vs. FroYo vs. Gingerbread

Версии Android, которые выполняются на вашем эмуляторе (или на обычном телефоне), должны быть совместимы с целевой платформой (build target) вашей программы. Например, если вы попробуете запустить приложение, совместимое с Android 2.2 (FroYo) или Android 2.3 (Gingerbread) на телефоне с Android 1.5 (Cupcake), это приложение не будет работать, так как телефоны с Android 1.5 могут исполнять приложения либо для версии 1.5, либо для более ранних версий платформы. Телефоны с прошивкой Android 2.3, напротив, могут работать с приложениями, созданными для версий платформы 2.3, 2.2, 2.1, 2.0.1, 2.0, 1.6, 1.5 и более ранних. И пройдет еще какое-то время, прежде чем на основной массе телефонов система будет обновлена до более новой версии.

Тогда почему бы просто не использовать в качестве целевой платформы Android 1.5? К несчастью, приложения, написанные для 1.5, не всегда отображаются корректно на больших и маленьких экранах, которыми оборудованы телефоны, несущие на борту Android 1.6. Но есть простой способ сделать ваши программы совместимыми со всеми версиями Android. Смотрите главу 13 «Написав однажды, протестируй везде» для получения сведений по этому вопросу.

Экономия времени

Запуск эмулятора занимает немало времени и ресурсов. Подумайте об этом в таком ключе: когда вы включаете сотовый телефон, он загружается, как и любая вычислительная система. Закрытие эмулятора можно сравнить с выключением телефона или с вытаскиванием из него батареек. Поэтому не выключайте его ради экономии своего времени!

Оставьте окно эмулятора открытым, пока открыто окно Eclipse. В следующий раз, когда вы запустите программу на Android, Eclipse поймет, что эмулятор уже готов, и просто отправит на него новую программу для запуска.

 

Рис. 1.5. Запуск программы «Hello, Android»

Рис. 1.6. Создание AVD в Eclipse

Попробуем снова

После того как у вас появилось правильно настроенное AVD, появится окно эмулятора Android, загрузится ОС Android. Если это происходит впервые, весь процесс может занять минуту или две, но будьте терпеливы. Возможно, вам понадобится щелкнуть правой кнопкой мыши на значке проекта и выбрать команду Run As —> Android Application снова. Если вы увидите сообщение об ошибке, в котором говорится, что приложение не отвечает, выберите команду, которая позволяет продолжить ожидание. Если вы увидите хранитель экрана, проведите по нему мышью в указанном направлении для разблокирования устройства.

Eclipse отправит копию вашей программы на эмулятор для исполнения на нем. На экране вашего компьютера появляется экран приложения, а это значит, что ваша программа «Hello, Android» уже работает (рис. 1.5). Вот и все! Примите поздравления с успешным написанием вашей первой программы для Android.

1.4. Запуск на реальном телефоне

Запуск Android-программ на физических устройствах, таких как Droid или Nexus One, в процессе разработки почти ничем не отличается от запуска их на эмуляторе. Вам следует включить USB-отладку на телефоне (запустив приложение Settings и выбрав Applications —> Development —> USB Debugging), установить драйвер устройства Android USB (только для Windows) и подключить телефон к вашему компьютеру, используя USB-кабель, который поставляется в комплекте с телефоном15.

Закройте окно эмулятора, если оно все еще открыто. Пока к компьютеру подключен телефон, Eclipse будет загружать и запускать приложения на телефоне, а не на эмуляторе. Однако вы можете переключаться между эмулятором и телефоном, для этого отредактируйте ваши настройки запуска (они находятся в меню Run —> Run Configuraions), выберите закладку Target и измените параметр Target selection mode в соответствии с вашими предпочтениями. Установка режима Manual приведет к тому, что Eclipse будет предлагать вам выбор устройства каждый раз, когда вы запускаете программу. Если ваш телефон не появляется в списке устройств, это обычно указывает на проблемы с USB-драйвером или с минимальным уровнем SDK, необходимым для запуска программы, и его реальным значением. Вам может понадобиться внести изменения в файл AdobeManifest.xml, если на телефоне не установлена последняя версия Android (см. раздел 13.2, «Компоновка для множества версий Android»).

Если вы решитесь предложить написанное вами приложение другим пользователям, вы должны будете выполнить еще несколько шагов. Глава 14, «Публикация на Android Market», детально раскрывает этот вопрос.

1.5. Вперед >>

Благодаря плагинам для Eclipse создание каркасной программы для Android занимает всего несколько секунд. В главе 3 «Разработка пользовательского интерфейса» мы начнем создавать оболочку для каркасного приложения, превращая ее в реальную программу — игру Sudoku. Этот пример будет использован на протяжении нескольких глав для демонстрации возможностей API Android.

Но прежде чем двигаться дальше, потратьте несколько минут на чтение главы 2 «Ключевые концепции»). Только после того, как вы разберетесь с основными идеями, такими как деятельности (activities) и жизненные циклы (life cycles), вы можете продолжить работу.

Хотя использование Eclipse для создания Android-программ вовсе не обязательно, я настоятельно рекомендую именно эту среду разработки.

Глава 2. Ключевые концепции

После начального знакомства с Android давайте посмотрим, как он работает. Некоторые концепции Android могут показаться знакомыми — такие, как ядро Linux (Linux kernel), OpenGL и база данных SQL. Другие вы увидите впервые — такие, как концепция жизненного цикла приложений Android.

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

2.1. Общая картина

Для начала посмотрим на общую архитектуру системы — ключевые уровни и компоненты, которые составляют стек ПО с открытым исходным кодом Android. На рис. 2.1 вы видите Android «с высоты птичьего полета», далее мы рассмотрим его подробнее.

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

Ядро Linux

Android построен на прочном и надежном фундаменте: на ядре Linux. Созданную Линусом Торвальдсом (Linus Torvalds) в 1991 году Linux сегодня можно найти практически везде, в любых устройствах — от наручных часов до суперкомпьютеров. В нашем случае Linux обеспечивает уровень абстракций между оборудованием и остальными частями стека Android.

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

Некоторые утилиты, которые понадобятся при разработке, взаимодействуют с Linux. Например, команда16 ddb shell запускает командный интерпретатор Linux, в котором осуществляется ввод других команд для выполнения на устройстве. Отсюда производится проверка файловой системы Linux, просматриваются активные процессы и так далее, в зависимости от ограничений безопасности.

 

Рис. 2.1. Системная архитектура Android

Библиотеки

Уровень, следующий за уровнем ядра, содержит исходные библиотеки Android. Эти разделяемые библиотеки написаны на C или на C++, скомпилированы для конкретной аппаратной архитектуры и предустановлены на устройство разработчиком телефона.

Рассмотрим некоторые наиболее важные исходные библиотеки:

• Менеджер поверхностей. Android использует композитный менеджер окон, похожий на Vista или Compiz, но более простой. Вместо того чтобы выводить графические данные непосредственно в буфер экрана, команды отображения графики формируют закадровые битовые массивы, которые затем объединяются с другими массивами для того, чтобы сформировать изображение, которое видит пользователь. Это позволяет системе создавать различные интересные эффекты, например полупрозрачные окна и градиентные переходы.

• 2D и 3D графика: В Android двух- и трехмерные графические элементы комбинируются в единый пользовательский интерфейс. Библиотека будет использовать возможности аппаратного 3D-ускорения, если устройство ими оснащено, или быстрый программный рендеринг, если нет. Смотрите главу 4 «Введение в 2D графику» и главу 10 «3D графика в OpenGL».

• Медиа-кодеки. Android может проигрывать видеоролики и фильмы, записывать и воспроизводить аудиофрагменты в различных форматах, в том числе AAC, AVC (H.264), H.263, MP3, и MPEG4. В главе 5 «Мультимедиа» приведен интересный пример.

• База данных SQL. Android имеет «легковесную» встраиваемую реляционную базу данных17 SQLite, эта же база данных используется в Firefox и в Apple iPhone18. Используйте этот механизм для постоянного хранения данных ваших приложений. Смотрите главу 9 «Работа с SQL» — там приведен пример.

• Браузер. Для быстрого отображения HTML-контента Android использует библиотеку WebKit19. Тот же механизм используется в браузере Google Chrome, браузере Apple Safari, в Apple iPhone и платформе Nokia S60. Обратитесь к главе 7 «Объединенный мир» за примером.

Эти библиотеки не являются отдельными приложениями. Они существуют только для того, чтобы их могли вызывать высокоуровневые программы. Начиная с версии 1.5 Android позволяет писать и внедрять свои собственные библиотеки, используя Native Development Toolkit (NTK). Разработка исходных библиотек выходит за рамки данной книги, но если вы заинтересовались, почитайте об этом в Интернете20.

Среда выполнения Android

Среда выполнения Android также находится над ядром и включает в себя виртуальную машину Dalvik и библиотеки ядра Java.

Виртуальная машина (VM) Dalvik — это виртуальная машина Java в исполнении Google, оптимизированная для мобильных устройств. Весь код, который вы создаете для Android, пишется на Java и выполняется внутри виртуальной машины. Dalvik имеет следующие отличия от обычной Java-машины:

• Dalvik VM запускает файлы .dex, которые конвертируются при компиляции из стандартных файлов .class и .jar. Файлы .dex более компактны и эффективны, чем файлы классов, что является важным соображением, если принять во внимание ограничения памяти и энергопотребления устройств, для которых предназначен Android.

• Библиотеки ядра Java, которые поставляются с Android, отличаются и от библиотек Java Standard Edition (Java SE), и от библиотек Java Mobile Edition (Java ME). Однако они очень похожи. В приложении А приводится сравнение Android и стандартных библиотек Java.

Вопрос/ответ

Что такое Dalvik?

Dalvik — это виртуальная машина (VM), разработанная и написанная Дэном Бернштейном (Dan Bornstein) из Google. Ваш код компилируется в машинно-независимые инструкции, называемые байт-кодом (bytecodes), который затем исполняется на мобильном устройстве с помощью Dalvik VM.

Хотя формат байт-кода несколько специфичен, Dalvik — это виртуальная машина Java, оптимизированная для небольшого количества памяти. Это позволяет множеству экземпляров VM запускаться одновременно и пользоваться всеми преимуществами родительской операционной системы (Linux) в плане безопасности и изоляции процессов.

Бернштейн назвал Dalvik в память о рыбацкой деревне в Исландии, где некогда жили его предки.

Каркас приложений

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

Наиболее важные части фреймворка:

• Менеджер деятельностей: контролирует жизненный цикл приложения (см. раздел 2.2 «Оно живое!») и поддерживает возможности пользовательской навигации по стеку деятельностей.

• Контент-провайдеры: эти объекты включают в себя данные, которые нужно разделить между приложениями, такие как, например, контактные сведения. Смотрите раздел 2.3, «Контент-провайдеры».

• Менеджер ресурсов. Ресурсы — это все, что поставляется вместе с вашей программой, но не является кодом (см. раздел 2.4 «Использование ресурсов»).

• Менеджер расположения. Телефон на Android всегда знает, где он находится (см. главу 8 «Определение местоположения и использование сенсоров»).

• Менеджер уведомлений. Здесь весьма ненавязчиво представляются события, такие как поступление сообщения, напоминание о встрече, информация о приближении какого-либо события, уведомление о вторжении инопланетян и многое другое.

ПРИМЕЧАНИЕ

Включать и расширять

Одно из уникальных и мощных качеств Android заключается в том, что все приложения «играют на одном поле». Я имею в виду то, что системные приложения используют те же самые публичные API, которые используете вы. При желании вы можете попросить Android заменить стандартные приложения на ваши.

Приложения и виджеты

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

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

Основная часть этой книги посвящена разработке приложений, так как именно их написанием вы и будете заниматься. Разработке виджетов посвящена глава 12, «Нет места лучше дома».

При покупке телефона с Android пользователь получает множество предустановленных стандартных системных приложений, в том числе:

• программу для набора номеров;

• почтовый клиент;

• список контактов;

• веб-браузер;

• Android Market.

Используя Android Market, пользователь может загружать новые программы для запуска на своем телефоне. И именно в эту область вы сейчас входите. Закончив читать эту книгу, вы сможете написать свое собственное Killer application — захватчик рынка ПО для Android.

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

2.2. Оно живое!

На обычном рабочем столе Linux или Windows вы запускаете множество приложений и просматриваете результаты их работы в отдельных окнах. Одно из рабочих окон «активировано», то есть владеет фокусом ввода, однако все программы равноправны между собой. По своему желанию вы можете переключаться между ними и перемещать их, для того чтобы видеть свои действия и закрывать программы, которые не нужны.

Android работает не так.

В Android есть приложение переднего плана, активное приложение, которое обычно занимает весь экран, кроме строки состояния. Когда пользователь включает свой телефон, первое приложение, которое он видит, — это программа Home (Домашний экран), рис. 2.2.

Когда пользователь запускает программу, Android начинает ее исполнение и делает ее активной. Из этого приложения пользователь может вызвать другое приложение или другой экран в том же самом приложении, и так далее. Все эти программы и экраны записываются в стек приложений(application stack)системным Менеджером деятельностей. В любое время пользователь может нажать кнопку Back и вернуться к предыдущему экрану в стеке. С точки зрения пользователя, это работает почти так же, как перемещение по истории просмотров в веб-браузере, где нажатие кнопки Back возвращает его на предыдущую страницу.

 

Рис. 2.2. Приложение Home

Процесс != Приложение

Изнутри каждый экран пользовательского интерфейса представлен классом Activity (см. раздел 2.3, «Деятельности»). Каждая деятельность имеет собственный жизненный цикл. Приложение — это одна или несколько деятельностей плюс процесс Linux, содержащий их. Это звучит весьма просто, не так ли? Но не обольщайтесь; я послал вам крученый мяч.

В Android приложения могут быть «живыми» даже в том случае, если процессы «убиты». Говоря другим языком, цикл жизненной активности приложения не привязан к жизненному циклу процессов. Процессы — это одноразовые контейнеры для деятельностей. Возможно, это отличается от всего, к чему вы привыкли в других системах, поэтому давайте посмотрим на процессы поближе, прежде чем продолжить.

Жизненные циклы богатых и знаменитых

В течение жизни каждая деятельность программы Android может находиться в одном из нескольких состояний, как показано на рис. 2.3. Вы, разработчик, не контролируете состояние программы. Всем этим управляет система. Однако вы получаете уведомления, когда состояние изменяется, благодаря вызовам метода onXX().

Вы переопределяете эти методы в классе Activity, и Android вызывает их в соответствующее время:

• onCreate(Bundle): этот метод вызывается при первом запуске деятельности. Используйте его для начальной инициализации, например для создания пользовательского интерфейса. onCreate() имеет один параметр, который может быть либо установлен в null, либо содержать информацию о состоянии, ранее сохраненную методом onSaveInstanceState().

 

Рис. 2.3. Жизненный цикл деятельностей Android

• onStart(): этот метод указывает на то, что приложение готово для показа пользователю.

• onResume(): этот метод вызывается, когда деятельность может начать взаимодействие с пользователем. Это неплохое место кода для запуска анимации или музыки.

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

• onStop(): вызывается, когда деятельность больше не видна пользователю и на некоторое время не востребована. Если в системе мало памяти, onStop() может быть никогда не вызван (система может просто завершить ваш процесс).

Открывание и закрывание клавиатуры

Я предлагаю быстрый способ тестирования корректности работы вашего кода по сохранению состояния приложения. В текущей версии Android изменение ориентации экрана (между порт­ретными и ландшафтными режимами) приводит к тому, что система проходит через процессы сохранения состояния деятельности, приостановки, остановки, уничтожения, создания нового состояния деятельности из сохраненного состояния. На мобильном телефоне T-Mobile G1, например, эти процессы вызывает открытие и закрытие клавиатуры. На эмуляторе Android эти операции выполнит комбинация Ctrl+F11 или нажатие клавиш 7 или 9 на цифровой клавиатуре.

• onRestart(): вызов этого метода указывает на то, что ваша деятельность показана пользователю и вышла из состояния остановки.

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

• onSaveInstanceState(Bundle): Android вызывает этот метод для того, чтобы разрешить деятельности сохранить свое предыдущее состояние, такое как позиция курсора в текстовом поле. Обычно не требуется переопределять его, так как стандартный вариант метода сохраняет состояние всех пользовательских элементов управления автоматически.

• onRestoreInstanceState(Bundle): этот метод вызывается, когда деятельность повторно инициализирована из состояния, ранее сохраненного методом onSaveInstanceState(). Стандартная реализация метода восстанавливает состояние пользовательского интерфейса.

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

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

2.3. Строительные блоки

В Android SDK определено несколько объектов, с которыми должен быть хорошо знаком каждый разработчик. Наиболее важные из них — это деятельности (activities), намерения (intents), сервисы(services) и контент-провайдеры (content providers). Позже вы познакомитесь с примерами их использования, а сейчас мне хотелось бы кратко их представить.

Деятельности

Деятельность — это окно или экран пользовательского интерфейса. Приложение может определить одну или несколько деятельностей для поддержки различных стадий работы программы. Как говорилось в разделе 2.2 «Оно живое!», каждая деятельность ответственна за сохранение своего состояния, которое может быть восстановлено позднее как часть жизненного цикла приложения (см. раздел 3.3 «Создание стартового экрана», в котором вы найдете соответствующий пример). Деятельности расширяют класс Context, поэтому вы можете использовать их для получения глобальной информации о приложении.

Намерения

Намерение — это механизм для описания одного действия, такого как «выбрать фотографию», «позвонить домой» или «открыть двери модуля21». В Android почти все работает благодаря намерениям, и существует множество возможностей по замене или повторному использованию компонентов. Обратитесь к разделу 3.5 «Создание информационного окна», в котором вы найдете пример работы с намерениями.

Допустим, есть намерение «отправить электронную почту». Если ваше приложение должно отправить почту, активируйте это намерение. Или, при написании нового приложения для работы с электронной почтой, зарегистрируйте деятельность для обработки этого намерения и замените предустановленную программу электронной почты. Когда пользователь попытается отправить электронную почту, ваша программа будет вызвана вместо стандартной.

Сервисы

Сервис — это задача, которая выполняется в фоновом режиме без прямого взаимодействия с пользователем. Сервисы похожи на демоны Unix. Например, рассмотрим музыкальный проигрыватель. Проигрывание музыки может быть запущено по намерению, но вы хотите, чтобы она играла даже тогда, когда пользователь переместился в другую программу. Для этого код, который выполняет проигрывание музыки, должен находиться внутри сервиса. Позже другая деятельность может подключиться к этому сервису и сообщить ему, что следует переключить или остановить воспроизведение. Android поставляется с множеством встроенных сервисов вместе с удобными API для доступа к ним. В разделе 12.2 «Интерактивные обои» используется сервис для рисования анимированной картинки в качестве фона домашнего экрана.

Контент-провайдеры

Контент-провайдер — это набор данных, «завернутый» в пользовательский интерфейс API для чтения и записи. Это лучший способ разделять глобальные данные между приложениями. Например, Google предоставляет контент-провайдер для адресной книги. Вся информация здесь — имена, адреса, номера телефонов и так далее — может быть использована любыми приложениями, которым она нужна. Смотрите пример в разделе 9.5 «Использование ContentProvider».

2.4. Использование ресурсов

Ресурс — это локализованная текстовая строка, изображение или другой небольшой объем информации, в котором нуждается программа, не являющийся программным кодом. При сборке все ресурсы встраиваются в программу. Ресурсы используются для локализации продуктов или для поддержки устройств различных типов (см. раздел 3.4 «Использование альтернативных ресурсов».

Вы можете создавать и хранить ресурсы в папке res внутри проекта. Компилятор ресурсов Android (aapt)22 обрабатывает ресурсы в соответствии с именем подпапки, в которой они расположены, и форматом файла. Например, графические файлы формата PNG и JPG должны находиться в папке, название которой начинается с res/drawable, а XML-файлы, которые описывают варианты компоновки экрана, должны располагаться в папке, имя которой начинается с res/layout. Добавляйте суффиксы для отдельных языков, ориентации экрана, плотности пикселей и так далее (см. раздел 13.5 «Все экраны, большие и маленькие»).

Компилятор ресурсов сжимает и упаковывает ресурсы и затем создает класс, называющийся R, который содержит идентификаторы, использованные при обращении к этим ресурсам в программе. Такой подход немного отличается от использования стандартных ресурсов Java, обращаться к которым можно по ключевым строкам. Выполнение операций с ресурсами подобным образом позволяет Android быть уверенным в том, что все ваши ссылки верны, и экономит пространство, не храня все ключи ресурсов. Eclipse использует похожий метод для хранения и доступа к ресурсам в своих плагинах.

Мы рассмотрим пример кода для доступа к ресурсам в главе 3 «Разработка пользовательского интерфейса».

2.5. Безопасность и защищенность

Как упоминалось ранее, каждое приложение работает в собственном процессе Linux. Аппаратное обеспечение не позволяет одному процессу получать доступ к памяти другого процесса. Более того, каждому приложению присваивается индивидуальный идентификатор. Любые файлы, созданные им, не могут быть прочитаны или переписаны другим приложением.

Кроме того, доступ к определенным критическим операциям ограничен, и следует особым образом запрашивать разрешение на их использование в файле, который называется AndroidManifest.xml. Когда приложение устанавливается, менеджер пакетов либо предоставляет, либо не предоставляет разрешения, основываясь на сертификатах и, если нужно, на ответах пользователя. Вот некоторые из наиболее распространенных разрешений, которые вам понадобятся:

• INTERNET: доступ к Интернету.

• READ_CONTACTS: чтение (но не запись) данных адресной книги пользователя.

• WRITE_CONTACTS: запись (но не чтение) в адресную книгу пользователя.

• RECEIVE_SMS: отслеживание входящих SMS-сообщений (текстовых).

• ACCESS_COARSE_LOCATION: использование средств грубого определения местоположения, например вышек сотовой связи или точек доступа Wi-Fi.

• ACCESS_FINE_LOCATION: использование более точных средств определения местоположения, таких как GPS.

Например, для отслеживания входящих SMS-сообщений добавьте следующие строки в файл манифеста:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.google.android.app.myapp" >

    <uses-permission android:name="android.permission.RECEIVE_SMS" />

</manifest>

Android может также запрещать доступ к целым частям системы. Используя теги XML в AndroidManifest.xml, вы можете ограничить круг пользователей, которым разрешено запускать деятельность, запускать сервис или подключаться к нему, создавать широковещательные намерения или получать доступ к данным контент-провайдера. Этот вид управления выходит за рамки данной книги, чтобы узнать больше, почитайте онлайновую справку по модели безопасности Android23.

2.6. Вперед >>

Концепции, представленные в этой главе, будут использоваться на протяжении всей книги. В главе 3 «Разработка пользовательского интерфейса» мы будем пользоваться деятельностями и методами жизненного цикла для создания демонстрационного приложения. Глава 4, «Введение в 2D-графику», будет использовать некоторые из классов, предназначенных для работы с графикой в библиотеках Android. Медиа-кодеки будут рассмотрены в главе 5 «Мультимедиа», а тема контент-провайдеров будет раскрыта в главе 9 «Работа с SQL».

8 http://java.sun.com/javase/downloads

9 http://www.eclipse.org/downloads

10 Обратитесь к странице http://d.android.com/guide/developing/tools для получения документации по инструментам командной строки

11 http://d.android.com/sdk

12 https://bugs.eclipse.org/bugs/show_bug.cgi?id=293969

13 http://www.eclipse.org/webtools

14 http://d.android.com/guide/developing/tools/avd.html

15 Обратитесь к странице http://d.android.com/guide/developing/device.html для того, чтобы найти свежие драйверы устройств и руководства по установке.

16 http://d.android.com/guide/developing/tools/adb.html

17 http://www.sqlite.org

18 На сайте http://www.zdnet.com/blog/burnette/iphone-vs-android-development-day-1/682 вы найдете материалы по сравнению процессов разработки для iPhone и Android.

19 http://webkit.org

20 http://d.android.com/sdk/ndk

21 «Открой двери модуля, ХЭЛ!» (Open the pod bay doors, HAL!) — фраза из фильма «Космическая одиссея 2001». — Примеч. ред.

22 http://d.android.com/guide/developing/tools/aapt.html

23 http://d.android.com/guide/topics/security/security.html

10

Обратитесь к странице http://d.android.com/guide/developing/tools для получения документации по инструментам командной строки

15

Обратитесь к странице http://d.android.com/guide/developing/device.html для того, чтобы найти свежие драйверы устройств и руководства по установке.

18

На сайте http://www.zdnet.com/blog/burnette/iphone-vs-android-development-day-1/682 вы найдете материалы по сравнению процессов разработки для iPhone и Android.

21

«Открой двери модуля, ХЭЛ!» (Open the pod bay doors, HAL!) — фраза из фильма «Космическая одиссея 2001». — Примеч. ред.

Часть II. Основы Android

• Глава 3. Разработка пользовательского интерфейса

...