Поиск по этому блогу

суббота, 12 марта 2011 г.

Pro Android 2 - Глава 1. Введение в Android

Новая платформа для нового персонального компьютера

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


Платформа Android поддерживает идею вычислений общего назначения для карманных устройств. Она представляет собой комплексную платформу с Linux-подобным стеком для управления устройствами, памятью и процессами.
Библиотеки Android охватывают телефонию, видео, графику, пользовательские интерфейсы программирования, а также ряд других аспектов устройства.
Все средства разработки под Android доступны для Java-программистов через Software Development Kit (SDK) под названием Android SDK. Android SDK поддерживает большинство Java платформ, Standard Edition (Java SE) исключая Abstract Window Toolkit (AWT) и Swing.
У Android имеется свой собственный оптимизированный JVM (Java Virtual Machine) для запуска скомпилированных Java-классов - Dalvik VM. Он был разработан с целью борьбы с ограничениями памяти, скорости процессора и производительности карманных устройств.
Архитектура платформы Android имеет следующий вид:


История Android


Google приобрел компанию Android Inc. в 2005 году, чтобы начать разработку платформы Android.
В конце 2007 года индустриальные лидеры собрались в группу Open Handset Alliance вокруг платформы Android.
В ноябре 2007 года был опубликован первый релиз SDK Android.
В сентябре 2008 года T-Mobile объявила о выпуске T-Mobile G1 - первого смартфона на базе платформы Android. Через несколько дней после этого Google объявила о наличии Android SDK Release Candidate 1.0.
В октябре 2008 года Google Сделал исходный код платформы ANdroid открытым в соответствии с открытой лицензией Apache.
В конце 2008 года Google выпустило портативное устройство под названием Android Dev Phone 1.
В сентябре 2009 года вышел релиз 1.6 ОС Android и, в течение месяца, Android 2.0.

Dalvik VM

Dalvik VM обрабатывает генерируемые файлы Java-классов и объединяет их в один или несколько Dalvik исполняемых (.dex) файлов. При этом, он уменьшает размер выходных данных наполовину по сравнению с традиционными jar-файлами.
Google также имеет хороший сборщик мусора в Dalvik VM, но он не включает JIT-компилятор в ранних релизах.
Окончательный исполняемый код в Android, после преобразования Dalvik VM, представляет собой не Java байт-код, а dex-файлы.

Сравнение Android и Java ME

Множественные конфигурации устройств: Java ME использует 2 класса (модели) для работы с небольшими устройствами - Connected Device Configuration (CDC) и Connected Limited Device Configuration (CLDC), Android - только CDC.
Простота понимания: Так как Android ориентирован только на одну модель, то в нем легче разобраться, чем в Java ME. Java ME имеет несколько моделей пользовательского интерфейса для каждой конфигурации.
Оперативность: Dalvik VM более оптимизирован и быстрее реагирует на события по сравнения со стандартной JVM, которая поддерживается аналогичной конфигурацией устройства.
Java-совместимость: Из-за Dalvik VM Android работает с DEX-байт кодом вместо Java-байт кода.
Выбор: Java ME для мобильных устройств имеет большую поддержку, так как большинство мобильных устройств поддерживают его. Но однородность, стоимость и простота разработки в Android являются вескими основаниями для разработчиков java-приложений.
Поддержка Java SE: по сравнению с поддержкой Java SE в CDC, Android поддержка Java SE является более полной, за исключением AWT и Swing.

Android Software Stack


В основу работы Android положено Linux-ядро 2.6.29, которое отвечает за драйвера устройств, доступ к ресурсам, управление питанием, а также другие обязанности ОС.
Драйвера включают драйвера для дисплея, камеры, клавиатуры, Wi-Fi, флешь-памяти, аудио и IPC (inter-process communication).
Несмотря на то, что используется Linux-ядро, приложения для Android разрабатываются в Java  и запускаются через Dalvik VM.
Следующий уровень представляют ряд C/C++ библиотек, таких как OpenGL, WebKit, FreeType, Secure Sockets Layer (SSL), C runtime library (libc), SQLite и Media.
Все C-библиотеки, базирующиеся на основе Berkeley Software Distribution (BSD) преобразованы в библиотеки для устройств работающих на базе Linux.
Все Media-библиотеки базируются на основе PacketVideo в OpenCORE.
Эти библиотеки несут ответственность за запись и воспроизведение аудио и видео форматов.
Библиотека Surface Manager контролирует доступ к системе отображения и поддерживает 2D и 3D.
Библиотека WebKit отвечает за поддержку браузера.
Библиотека FreeType отвечает за поддержку шрифтов.
SQLite является реляционной базой данных, которая доступна на устройстве.
Основные библиотеки Android Java API включают в себя телефонию, ресурсы, местоположение, пользовательский интерфейс, контент-провайдеров и пакет менеджеров (установки, безопасности и так далее).
Android также поддерживает пользовательскую Google 2D графическую библиотеку под названием Skia.
Android поддерживает наиболее распространенные форматы для аудио, видео и изображений. Также он имеет интерфейсы API для поддержки Bluetooth, EDGE, 3G, WiFi и глобальной системы мобильной связи (GSM).

Эмулятор Android

Вместе с Android SDK для Eclipse поставляется плагин Android Development Tools (ADT). Он содержит эмулятор, который необходим для запуска, отладки и тестирования Android-приложений.
Android-эмулятор имитирует большинство функций реального устройства.
Android-эмулятор осуществляет свою деятельность на основе открытого кода технологии "processor emulator" под названием QEMU, которую разработал Фабрицио Беллард.
Процессор Android-эмулятора имеет архитектуру ARM.

Android UI

В Android использует пользовательский интерфейс (UI) четвёртого поколения. В него входят: Android UI, JavaFX, Microsoft Silverlight и Mozilla XML User Interface Language (XUL).
Пользовательский интерфейс Android представляется в виде XML-файлов.

Первичные компоненты Android

Android UI наряду с другими частями Android опирается на новую концепцию под названием Intent (намерение). В намерении объединены идеи работы с оконными сообщениями, действиями, моделью "объявление и подписка", процессами коммуникации и регистрации приложений.
Пример использования Intent класса для вызова или запуска веб-браузера:

  1. public static void invokeWebBrowser(Activity activity)
  2. {
  3.      Intent intent = new Intent(Intent.ACTION_VIEW);
  4.      intent.setData(Uri.parse("http://www.google.com"));
  5.      activity.startActivity(intent);
  6. }

Android также имеет расширенную поддержку для ресурсов, которые включают в себя такие элементы как строки, растровые изображения и файлы.
Framework автоматически создает идентификаторы для ресурсов, определённых в XML-файлах. Они описываются в классе R.java. Каждый автоматически сгенерированный ID в этом классе соответствует либо элементу в файле XML, либо целому файлу.
Ещё одной новой концепцией в Android является контент-провайдер (content provider). Content provider - это абстрактный источник данных.

Расширенный UI

С помощью XML можно создавать макеты пользовательского интерфейса в текстовом виде. Например:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
     <TextView android:id="@+id/textViewId"
                       android:layout_width="fill_parent"
                       android:layout_height="wrap_content"
                       android:text="@string/hello"
     />
</LinearLayout>

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

<menu xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- Стандартное меню -->
     <group android:id="@+id/menuGroup_Main">
          <item android:id="@+id/menu_clear"
                    android:orderOnCategory="10"
                    android:title="clear"
          />
     </group>
</menu>

Хотя Android поддерживает диалоги, все диалоги в Android являются асинхронными.
Android поддерживает 2 типа анимации: а) промежуточные кадры анимации, б) анимация кадр за кадром.
Также Android позволяет определить эти анимации в файле ресурсов в XML. Например:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
                       android:oneshot="false">
     <item android:drawable="@drawable/numbers11"
              android:duration="50" />
    ...
     <item android:drawable="@drawable/numbers19"
              android:duration="50" />
</animation-list>

Основные графические библиотеки Android поддерживают стандартные преобразования матриц, позволяют изменять масштаб, перемещать и вращать изображения.
Объект Camera в графической библиотеке обеспечивает поддержку глубины и проекции, которые позволяют строить 3D модели на 2D поверхности.
Android имеет ряд интересных идей, которые используются на главном экране телефона.
Первая из этих идей Live Folders. Используя Live Folders можно опубликовать коллекцию элементов, как папки на главном экране.
Вторая идея - идея виджетов главного экрана.
Третья идея - интегрированный Android-поиск. Она заключается в том, что можно осуществлять поиск как на устройстве, так и через Интернет.
Android поддерживает жесты на основе движения пальцами по экрану телефона. Android позволяет записывать любые случайные движения на экране в виде названия жестов. Эти жесты затем можно использовать в приложениях, чтобы указать конкретные действия.

Сервисы Android

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

Компоненты телефонии и медиа-компоненты Android

Android имеет интерфейсы API, которые охватывают компоненты аудио, видео и телефонии. Например, проигрывание аудио файлов из Интернета:

  1. private void playAudio(String url) throws Exception
  2. {
  3.     mediaPlayer = new MediaPlayer();
  4.     mediaPlayer.setDataSource(intentUrl);
  5.     mediaPlayer.prepare();
  6.     mediaPlayer.start();
  7. }
А вот пример проигрывания аудио-файлов с локального устройства:

  1. private void playLocalAudio() throws Exception
  2. {
  3.     // Этот файл располагается в директории /res/raw/ и называется "music_file.mp3"
  4.     mediaPlayer = MediaPlayer.create(this, R.raw.music_file);
  5.     mediaPlayer.start();
  6. }
Android связывает все эти вещи в приложении путем создания одного XML-файла, который определяет все пакеты приложения. Этот файл называется AndroidManifest.xml. Пример:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
               pachage="com.ai.android.HelloWorld"
               android:versionCode="1"
               android:verionName="1.0.0">
     <application android:icon="@drawable/icon"
                        android:label="@string/app_name">
          <activity android:name=".HelloWorld"
                        android:label="@string/app_name">
               <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
          </activity>
     </application>
</manifest>


Java-пакеты Android

android.app: используется для реализации модели программы для Android. Включает классы приложения, представляющие запуск и остановку, а также набор связанных классов, элементы управления, диалоги, предупреждения и уведомления.
android.bluetooth: предоставляет классы для работы с Bluetooth функциональностью. Основные классы - BluetoothAdapter, BluetoothDevice, BluetoothSocket, BluetoothServerSocket и BluetoothClass.
android.content: реализует концепцию контент-провайдеров.
android.content.pm: реализует Package Manager. Менеджер пакетов знает о разрешениях, установленных пакетах, установленных провайдерах, установленных службах, установленных компонентах, а также установленных приложениях.
android.content.res: предоставляет доступ к файловым ресурсам - как структурированным, так и неструктурированным.
android.database: реализует идеи абстрактной базы данных.
android.database.sqilte: необходим для реализации концепций из пакета android.database с помощью физической базы данных SQLite .
android.gesture: этот пакет содержит все классы и интерфейсы необходимые для работы с определёнными жестами пользователя.
android.graphics: содержит классы Bitmap, Canvas, Camera, Color, Matrix, Movie, Paint, Path, Rasterizer, Shader, SweepGradient и TypeFace.
android.graphcs.drawable: необходим для реализации рисование изображений и анимации.
android.graphics.drawable.shapes: необходим для реализации форм, в том числе: ArcShape, OvalShape, PathShape, RectShape и RoundRectShape.
android.hardware: содержит классы для работы с физическими устройствами.
android.location: содержит классы Address, GeoCoder, Location, LocationManager и LocationProvider.
android.media: содержит классы MediaPlayer, MediaRecorder, Ringtone, AudioManager и FaceDetector.
android.net: реализует API основных уровней сокетов сети. К первичным класса относятся Uri, ConnectivityManager, LocalSocket и LocalServerSocket. Кроме того, следует отметить, что Android поддерживает HTTPS на уровне браузер, а также на сетевом уровне. Android также поддерживает JavaScript в своем браузере.
android.net.wifi: содержит классы, необходимые  для управления WiFi соединениями.
android.opengl: содержит вспомогательные классы, реализующие  OpenGL ES операции.
android.os: предоставляет сервисы операционной системы Android, доступные через язык программирования Java.
android.preference: дает возможность приложениям иметь пользователей и управлять их предпочтениями.
android.provider: включает в себя набор контент-провайдеров придерживающихся android.content.ContentProvider интерфейса.
android.sax: содержит эффективный набор вспомогательных классов, включающих API для XML (SAX) разбора.
android.speech: содержит константы, использующиеся в распознавании речи.
android.speech.tts: обеспечивает поддержку преобразования текста в речь.
android.telephony: содержит классы CellLocation, PhoneNumberUtils и TelephonyManager.
android.telephony.gsm: позволяет собирать адреса мест на основе вышек сотовой связи
android.telephony.cdma: обеспечивает поддержку для CDMA.
android.text: содержит классы для обработки текста.
android.text.method: предоставляет классы для ввода текста в различные элементы управления.
android.text.style: обеспечивает набор стилей для частей текста.
android.utils: содержит классы Log, DebugUtils, TimeUtils и Xml.
android.view: содержит классы Menu, View, ViewGroup и обратные вызовы.
android.view.animation: обеспечивает поддержку для промежуточных кадров анимации.
android.webkit: содержит классы, представляющие веб-браузер.
android.widget: содержит все элементы управления, которые обычно выводятся с помощью View класса.
com.google.android.maps: содержит классы MapView, MapController и MapActivity классы, необходимые для работы с Google Maps.

В целом, Android Java API содержит более 40 пакетов и более 700 классов.

3 комментария:

  1. на самом деле полезная инфа, мало где найдёшь норм сведения об андроиде на русском... спс автору, так держать

    ОтветитьУдалить
  2. Автор молодец. Изложил все коротко и понятно.
    Продолжай так дальше.

    ОтветитьУдалить
  3. Спасибо, буду стараться :-)

    ОтветитьУдалить