Читать книгу «Разработка Android-приложений в деталях» онлайн полностью📖 — Тимура Сергеевича Машнина — MyBook.
image

Запуск Android-приложения из среды Eclipse

Перед тем как воспользоваться командой Run As | Android Application контекстного меню окна Package Explorer для тестирования Android-приложения в реальной среде выполнения, необходимо либо подсоединить к компьютеру реальное Android-устройство, либо создать экземпляр Android-эмулятора.

Для тестирования Android-приложения в реальном Android-устройстве нужно зайти в настройки устройства и открыть раздел Приложения. В разделе Приложения отметить флажок Неизвестные источники, затем открыть раздел Разработка и отметить флажок Отладка USB. После чего инсталлировать драйвер устройства на компьютер и подсоединить устройство к компьютеру. В результате среда Eclipse произведет опознание устройства, которое отобразится в окне Devices (команда Window | Show View | Android | Devices).

Для запуска Android-приложения выберем команду Run As | Run Configurations контекстного меню окна Package Explorer и в разделе приложения во вкладке Target отметим флажок Always prompt to pick device. Нажмем кнопку Run, в окне Android Device Chooser выберем устройство и нажмем кнопку OK. В результате Android-приложение будет инсталлировано и запущено в реальном Android-устройстве. Нажав кнопку Screen Capture панели инструментов окна Devices можно сделать снимок экрана реального Android-устройства.



Для тестирования Android-приложения в Android-эмуляторе нужно запустить приложение AVD Manager и для создания виртуального Android-устройства во вкладке Android Virtual Devices нажать кнопку Create:

В поле AVD Name: ввести имя устройства.

В списке Device: выбрать тип устройства.

В списке Target: выбрать версию Android-платформы устройства.

В списке CPU/ABI: выбрать тип процессора.

В списке Skin: выбрать оболочку эмулятора – установка аппаратной клавиатуры и отображение кнопок устройства в оболочке Android-эмулятора.

В списках Front Camera: и Back Camera: определить камеры устройства.

В разделе Memory Options: определить размер оперативной памяти и максимальный размер кучи, выделяемый для работы одного Android-приложения.

В разделах Internal Storage: и SD Card: определить размер внутренней памяти и тип/размер карты памяти устройства. Поле File: раздела SD Card: предназначено для определения образа карты памяти, созданного с использованием инструмента mksdcard набора SDK Tools.

В разделе Emulation Options: с помощью флажка Snapshot определить ускорение повторного запуска виртуального устройства, так как его состояние будет сохраняться при закрытии, с помощью флажка Use Host CPU определить ускорение работы эмулятора, так как он будет использовать CPU компьютера.

И нажать кнопку OK. В результате в окне Android Virtual Device Manager появится созданное виртуальное устройство, которое нужно запустить кнопкой Start.




Кнопка Create Device вкладки Device Definitions позволяет создать новое устройство списка Device.

При запуске кнопкой Start виртуального устройства появляется окно Launch Options определения опций запуска, в котором:

Флажки Launch from snapshot и Save to snapshot работают в случае отмеченного флажка Snapshot раздела Emulation Options: и определяют загрузку и сохранение состояния виртуального устройства при закрытии.

Флажок Scale display to real size определяет масштабирование виртуального устройства путем установки диагонали и плотности экрана.

Флажок Wipe user data позволяет при запуске виртуального устройства стереть его сохраненное состояние, при этом будет отключена опция Launch from snapshot.

Виртуальное устройство окончательно запускается кнопкой Launch окна Launch Options.



По умолчанию приложение AVD Manager создает конфигурацию виртуального устройства в каталоге [user]\.android\avd файловой системы компьютера. Если в пути данного каталога будут присутствовать русские буквы, виртуальное устройство не запустится. Кроме того, запуск виртуального устройства занимает значительное время, поэтому рекомендуется как можно реже его закрывать.

После запуска виртуальное устройство отобразится на экране компьютера.



Для запуска Android-приложения в виртуальном Android-устройстве воспользуемся командой Run As | Android Application контекстного меню окна Package Explorer.

В результате запуска Android-приложения каталог bin Android-проекта заполнится файлами и папками:

Папка classes – откомпилированные Java класс-файлы, включая классы приложения и R-классы.

Папка dexedLibs – конвертированные в DEX-формат виртуальной машины Dalvik дополнительные библиотеки.

Папка res – ресурсы приложения.

Файл манифеста AndroidManifest. xml.

Бинарный файл resources.arsc строк приложения.

Файл classes.dex – конвертированные в DEX-формат виртуальной машины Dalvik Java класс-файлы.

APK-файл – ZIP-архив Android-приложения для инсталляции в отладочном режиме, содержащий папку META-INF с Java-манифестом MANIFEST. MF и сертификатами, папку res с ресурсами, файл манифеста AndroidManifest. xml, файл resources.arsc и файл classes.dex.

Подготовка к публикации Android-приложения

Среда выполнения Android при инсталляции приложений требует, чтобы все Android-приложения были подписаны цифровой подписью с помощью сертификата, закрытый ключ которого имеется в распоряжении разработчиков приложений. Однако в отладочном режиме инструменты сборки приложения набора Android SDK автоматически подписывают приложение специальным отладочным ключом, который генерируется и по умолчанию хранится в файле debug.keystore каталога [user]\.android. По умолчанию отладочный сертификат имеет срок действия 365 дней и по истечении этого периода необходимо удалить файл debug.keystore для повторной автоматической генерации сертификата.

Для того чтобы подготовить Android-приложение к реальной инсталляции в Android-устройстве, так как среда выполнения Android не позволит инсталлировать приложение, подписанное отладочным ключом, можно воспользоваться командой Android Tools | Export Signed Application Package контекстного меню окна Package Explorer – в результате откроется мастер Export Android Application, в поле Project: которого будет отображено имя Android-проекта и в окне которого надо нажать кнопку Next.

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

Для создания хранилища закрытого ключа в окне Export Android Application выберем переключатель Create new keystore, в поле Location: введем путь файла хранилища, в полях Password: и Confirm: введем пароль хранилища и нажмем кнопку Next.

Примечание

Для поля Location: необязательно использовать кнопку Browse – можно вручную ввести путь несуществующего файла, например, C:\Users\user\my_keystore, где файл my_keystore будет сгенерирован.

В поле Alias: введем имя ключа, в полях Password: и Confirm: введем пароль ключа, в поле Validity (years): введем срок действия сертификата более 25 лет, в поле First and Last Name: введем имя разработчика и нажмем кнопку Next, в поле Destination APK file: введем путь APK-файла Android-приложения и нажмем кнопку Finish.

В результате будет создан подписанный и готовый к публикации файл приложения, обработанный при этом оптимизирующим инструментом zipalign набора SDK Tools.

Activity-компонент

Сгенерированная мастером Android Project основа Android-проекта Blank Activity в узле src окна Package Explorer содержит файл исходного кода Activity-компонента, в котором его класс, расширяющий класс android.app.Activity, переопределяет метод onCreate ().

Данный метод является одним из методов обратного вызова Activity-компонента, которые среда выполнения Android вызывает при переходе Activity-компонента между различными состояниями его жизненного цикла. Переопределение метода onCreate () является важным, так как он вызывается при запуске Activity-компонента и предназначен для инициализации GUI-интерфейса.

Помимо метода onCreate () класс android.app.Activity предоставляет следующие методы обратного вызова для их переопределения:

onRestart – метод жизненного цикла, вызывается после того как Activity-компонент был остановлен, перед вызовом метода onStart.

onStart – метод жизненного цикла, вызывается, когда Activity-компонент становится видимым.

onResume – метод жизненного цикла, вызывается, когда Activity-компонент помещается на передний план для взаимодействия с пользователем.

onPause – метод жизненного цикла, вызывается, когда Activity-компонент помещается на задний план. После данного метода может вызываться метод onResume, если Activity-компонент помещается снова на передний план, или метод onStop, если Activity-компонент становится невидимым.

onStop – метод жизненного цикла, вызывается, когда Activity-компонент становится невидимым. После данного метода может вызываться метод onRestart или метод onDestroy.

onDestroy – метод жизненного цикла, вызывается перед уничтожением Activity-компонента программным способом методом finish класса android.app.Activity или Android-системой для освобождения ресурсов.

onActionModeFinished – вызывается при окончании работы режима контекстного меню ActionMode.

onActionModeStarted – вызывается при запуске режима контекстного меню ActionMode для Activity-компонента.

onActivityResult – при запуске другого Activity-компонента методом startActivityForResult вызывается после закрытия запущенного Activity-компонента для обработки возвращаемых им результатов.

onAttachFragment – вызывается при присоединении объекта Fragment к объекту Activity между вызовами методов жизненного цикла Fragment. onAttach и Fragment. onCreate.

onAttachedToWindow – вызывается при присоединении окна Activity-компонента к Window-менеджеру, метод может быть использован вместо метода onCreate.

onBackPressed – вызывается при нажатии пользователем клавиши Back.

onConfigurationChanged – вызывается при изменении конфигурации устройства во время работы Activity-компонента, при этом информацию о новой конфигурации предоставляет объект android.content.res.Configuration.

onContentChanged – вызывается при изменении GUI-интерфейса Activity-компонента при вызове метода setContentView.

onContextItemSelected – вызывается при выборе элемента контекстного меню.

onContextMenuClosed – вызывается при закрытии контекстного меню.

onCreateContextMenu – вызывается при создании контекстного меню – меню, которое открывается при долгом нажатии на GUI-элементе.

onCreateDescription – вызывается перед вызовом метода onPause.

onCreateNavigateUpTaskStack – вызывается при создании стека задач.

onCreateOptionsMenu – вызывается при создании меню опций – меню, которое связано с Activity-компонентом.

onCreatePanelMenu – вызывается для инициализации содержимого меню (меню опций или контекстного меню).

onCreatePanelView – вызывается при создании панели меню.

onCreateThumbnail – вызывается перед вызовом метода onPause и позволяет определить для Activity-компонента значок, а не скриншот.

onCreateView – вызывается для создания фрагментом GUI-интерфейса.

onDetachedFromWindow – вызывается при отсоединении окна Activity-компонента от Window-менеджера.

onGenericMotionEvent – вызывается для необработанного события MotionEvent.

onKeyDown – вызывается для необработанного события KeyEvent при нажатии клавиши.

onKeyLongPress – вызывается для необработанного события KeyEvent при долгом нажатии.

onKeyMultiple – вызывается для необработанного события KeyEvent при многократном нажатии одной клавиши.

onKeyShortcut – вызывается для необработанного события KeyEvent при нажатии комбинации клавиш.

onKeyUp – вызывается для необработанного события KeyEvent при освобождении клавиши.

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

onMenuItemSelected – вызывается при выборе элемента меню.

onMenuOpened – вызывается при открытии меню.

onNavigateUp – вызывается при нажатии кнопки Up.

onNavigateUpFromChild – вызывается, если дочерний Activity-компонент использует Up-навигацию.

onNewIntent – при запуске данного Activity-компонента другим Android-компонентом вызывается для уже существующего экземпляра Activity-компонента переднего плана своей задачи, имеющего атрибут android: launchMode=«singleTop» файла манифеста, или если вызывающий Android-компонент использует метод startActivity с флагом FLAG_ACTIVITY_SINGLE_TOP Intent-объекта, вместо создания нового экземпляра Activity-компонента.

onOptionsItemSelected – вызывается при выборе элемента меню опций.

onOptionsMenuClosed – вызывается при закрытии меню опций.

onPanelClosed – вызывается при закрытии панели меню.

onPostCreate – вызывается после вызова метода onRestoreInstanceState.

onPostResume – вызывается после вызова метода onResume.

onPrepareNavigateUpTaskStack – вызывается перед созданием стека задач.

onPrepareOptionsMenu – вызывается перед открытием меню опций.

onPreparePanel – вызывается перед открытием панели меню.

onProvideAssistData – вызывается, когда пользователь запрашивает помощь.

onRestoreInstanceState – вызывается после метода onStart для восстановления состояния Activity-компонента из объекта android. os. Bundle.

onSaveInstanceState – вызывается перед уничтожением Activity-компонента, перемещенного с переднего плана, Android-системой для освобождения ресурсов памяти. Данный метод предназначен для сохранения состояния Activity-компонента в объекте android. os. Bundle в виде пар имя-значение. Измененный объект Bundle передается Android-системой в методы onCreate (Bundle) и onRestoreInstanceState (Bundle).

onSearchRequested – вызывается при запуске поиска.