Статьи

Android SDK: структура приложения

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


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


Откройте Eclipse и разверните папку Package Explorer для созданного нами проекта. Внутри папки «src» вы должны увидеть пакет, который вы назвали при настройке проекта. Внутри пакета должен быть файл класса Activity, который также должен быть открыт в редакторе. В исходной папке хранятся все файлы Java, с которыми вы работаете при разработке приложений для Android.

Папки проекта

Каждый раз, когда вы создаете проект, вы создаете пакет с вашими файлами классов Java. В приложении может быть более одного пакета, и каждый пакет может содержать несколько файлов классов. Файлы классов содержат код обработки, который представляет ваше приложение пользователю, отвечает на взаимодействие с пользователем и выполняет любую необходимую обработку. По сути, файлы классов разделяют код, используемый в приложении, в соответствии с объектно-ориентированной концептуальной моделью.

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

Когда вы начинаете разрабатывать приложения, вам нужно добавить классы Java в ваш пакет (ы) в исходной папке. Типичное Android-приложение, предоставляющее пользователю пользовательский интерфейс, будет содержать как минимум один файл Activity с дополнительными классами Activity для каждого экрана в приложении. Существуют и другие типы приложений, например приложения с виджетами и службами, которые могут иметь другую структуру. Лучше всего сначала узнать о типе приложения с пользовательским интерфейсом, ориентированным на активность, а об остальных позже.

Посмотрите на файл класса Activity в вашем новом приложении. Позже мы рассмотрим больше кода Activity в этой серии, поэтому не стоит слишком беспокоиться о деталях. Это основная активность вашего приложения, которая запускается при запуске приложения. Ваше приложение может затем запустить другие действия при взаимодействии с пользователем. Когда вы создали свой проект, Eclipse настраивает приложение, чтобы использовать его в качестве основного класса. Он указан как основной вид деятельности в манифесте проекта, который мы вскоре рассмотрим.

Внутри основного класса Activity вы увидите метод onCreate , который содержит код, который будет выполняться при создании Activity, т.е. при запуске приложения. Внутри метода вы увидите следующую строку кода:

1
setContentView(R.layout.activity_main);

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

Мы рассмотрим это позже, но на данный момент обратите внимание на синтаксис R.layout.activity_main. Вот как ваш Java-код ссылается на ресурсы в приложении. Мы будем использовать аналогичный синтаксис для ссылки на ресурсы по значению их идентификатора, а также для ссылок на другие типы ресурсов, такие как изображения и значения данных. «R» представляет ресурсы приложения, а далее указывается тип элемента, в данном случае макет, хранящийся в каталоге «res / layout». Наконец, ресурс идентифицируется по его имени — в случае макета это имя файла. Синтаксис поэтому «R.type.name». Вы привыкнете к этому, когда мы начнем кодировать.

Позже в этой серии мы добавим код в файл класса Activity для обработки взаимодействия с пользователем. Разверните папку приложения «res» прямо сейчас. Внутри вы увидите несколько подпапок. Это папки, которые Eclipse и ADT создают по умолчанию при запуске нового проекта Android, но есть ряд других возможных каталогов, которые вы также можете добавить для различных типов ресурсов.


Как мы уже видели, файл макета, созданный при создании проекта, появляется в папке «res / layout». Если приложение имеет несколько экранов «Активность», оно обычно имеет файл макета для каждого. Вы также можете использовать файлы макетов для отдельных элементов пользовательского интерфейса. Когда вы создаете файл класса для Activity, вы устанавливаете макет, используя setContentView, как мы видели выше. Вы также можете определить макет в коде Java, и в этом случае он создается динамически при выполнении приложения. Однако преимущество использования XML заключается в том, что вы можете видеть визуальное представление макета во время его разработки.

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


Вы увидите несколько папок в каталоге ресурсов с «drawable» в названии. Они хранят файлы изображений, которые использует ваше приложение. Эти файлы изображений могут быть цифровыми файлами изображений, которые вы готовите вне Eclipse, с такими форматами, как PNG или JPEG. Кроме того, вы можете определить некоторые элементы рисования, используя XML-код для описания форм, цвета и внешнего вида. Если у вас есть файл в ваших папках для рисования, вы можете ссылаться на него в файлах макета приложения или в коде Java. Это позволяет встраивать изображения в пользовательский интерфейс вашего приложения.

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


В вашем каталоге res вы увидите несколько папок со значениями в заголовке. Они предназначены для значений данных, которые вы хотите использовать в своем приложении. Такие значения могут включать текстовые строки и числа. Папки значений содержат файлы XML, в которых указаны одно или несколько значений. Каждый список включает в себя имя и значение в вопросе. Другие файлы в приложении, такие как классы Java или файлы макетов, могут ссылаться на значения, используя их имена. Типичным использованием такого значения будет сохранение текстовой строки для отображения в элементе пользовательского интерфейса, таком как кнопка.

Различные файлы значений в приложении предназначены для того, чтобы вы могли адаптировать значения к конкретным размерам экрана и уровням API. Если одно и то же значение можно использовать на разных устройствах, его можно сохранить в простой папке «values».


Если вы загляните в основную папку своего приложения, вы увидите файл проекта Manifest. Откройте его в редакторе, дважды щелкнув по нему. Вы увидите графический интерфейс с его содержанием. Перейдите на вкладку «AndroidManifest.xml» в нижней части окна редактора, чтобы увидеть код XML. Этот файл определяет несколько аспектов приложения в целом. Eclipse и ADT встраивают определенные элементы в манифест при создании приложения, основываясь на настройках, выбранных вами при создании проекта. Вы можете добавить другие элементы в манифест вручную. Например, если вы добавляете другие действия в свое приложение.

Вкладка «Манифест»

Мы разберем некоторые основные элементы, чтобы понять Манифест, но есть много других элементов, которые вы можете включить. В списке Manifest для вашего нового проекта приложения вы увидите элемент Использования-sdk , в котором мы указываем минимальный и целевой уровни API. Элемент приложения содержит атрибуты, указывающие программу запуска и имя приложения. Внутри элемента приложения находится элемент Activity, указанный в качестве основного Activity для запуска, когда приложение запускается через элемент intent-filter . Когда вы добавляете новые действия в приложение, вы добавляете новый элемент активности для каждого.

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


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

Как мы видели выше, вы можете ссылаться на ресурсы, используя «R.» синтаксис. Eclipse и ADT управляют системой, которая ссылается на ресурсы в вашем приложении из Java. Когда вы добавляете или редактируете ресурсы в своем проекте, Eclipse записывает в файл «R.java», что, в свою очередь, позволяет ссылаться на ресурсы с помощью «R.». Когда вы начнете работать с файлами Java, вы увидите, что Eclipse предложит вам предложения, когда вы обратитесь к R , упрощая управление ресурсами в вашем приложении.

Файл «R.java» хранится в папке «gen». Не пытайтесь редактировать этот файл напрямую , он автоматически генерируется при редактировании ресурсов в вашем проекте. Система управляет этим процессом, присваивая уникальный целочисленный идентификатор каждому ресурсу в вашем приложении.

Совет. Когда вы начинаете разрабатывать приложения для Android, у вас могут возникнуть проблемы с R. Если Eclipse отображает сообщение об ошибке, касающееся R , в частности, «R не может быть преобразован в переменную», проверьте в верхней части файла класса оператор импорта с «R», например «import android.R;». Если вы найдете это распространенным, особенно если вы скопировали и вставили код в свой файл, удалите оператор импорта. Если у вас есть другие проблемы со ссылками на ресурсы через R, убедитесь, что в файлах ресурсов нет ошибок. Если проблема не устранена, попробуйте очистить проект с помощью «Проект», «Очистить». Если ничего не работает, попробуйте перезапустить Eclipse.

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