Статьи Новости Контакты

03.06.2008
Александр Козлов

Добрый монстр Android

заметка рассказывает о платформе Android, созданной как альтернативная Open-Source ОС для мобильных устройств

Итак, Android. Что это? Не робот, не игрушка, а основанная на Linux-ядре платформа для мобильных устройств. Разрабатывает ее альянс OHA (Open Handset Alliance), который создала Google.
Что мы имеем? Гигант веб-приложений и самый крупный поисковик, выпускающий свою собственную ОС для сотовых телефонов, КПК и прочих незаменимых спутников нашей жизни. Борющихся с паранойей, что Google хочет собрать данные всех жителей отдельно взятой планеты Земля, могу заранее озадачить: расслабьтесь.

Nokia рассматривает возможность своего участия в альянсе
Но, как ни странно, не один Google хочет разработать нечто подобное. В альянс входят такие ребята, как eBay, Broadcom Corporation, Marvell Technology Group, Nvidia Corporation, Qualcomm, HTC, LG, Motorola, Samsung, T-Mobile, Telefonica и многие-многие другие. Где мои любимые параноики?
Apple и Microsoft решили воздержаться.

К технической стороне Android: разработку приложений для этой операционной системы можно вести на языке Java (Java v1.5), используя Eclipse-плагин: Android Development Tool.
Доступные для разработчика библиотеки:


• Libc (en)
• SSL
• Media Framework (Packet Video OpenCore, MPEG4, H264, MP3, AAC, AMR, JPG, PNG)
• Surface Manager (библиотека сенсорного экрана)
• LibWebCore (based on WebKit)
• 2D SGL
• 3D libraries (based on OpenGL)
• FreeType
• SQLite


В отличие от стандартных линукс-приложений, которые мы можем видеть в операционных системах типа Ubuntu, Mandriva и даже Linux Kids, приложения для ОС Android подчиняются дополнительным правилам Application Framework:
• Content Providers – правило обмена данными между приложениями.


• Resource Manager – правило доступа к таким файлам, как XML, PNG, JPEG.
• Notification Manager – доступ к статус-бару.
• Activity Manager – правило управления активными приложениями.


Прежде чем я продолжу свое повествование, предадимся размышлениям.
Android, как и многие молодые, но популярные проекты, имеет свою философию. Ruby, Python и многие другие языки программирования, фреймворки – все подчиняется незыблемым правилам. Или должно, по-крайней мере.

Итак: для эффективной разработки приложений для платформы Android вам нужно придерживаться трех простых «заповедей»: быстродействие, реагирование и целостность. На этом и закончим по простой причине – эта библия Android расписана на четыре страницы. Поэтому, дабы сохранить информативность материала, а не переписывать много «умных мыслей программистов», мы продолжим дальше.

После анонсирования Android в Силиконовой долине началась пора слухов и домыслов. Стив Баллмер на одной из пресс-конференций заявил, что «у Google есть только пара строчек на бумаге, а у Windows Mobile более 150 устройств, на которые она устанавливается, и 15 миллионов покупателей».
Спустя два дня после анонса Android, 7 ноября, поступила информация о первом приложении для новой платформы. Стартап WhatsOpen.com, не делавший никаких официальных заявлений о своей разработке, создал веб-приложение демонстрирующее пользователям близлежащие магазины, кафе и другие заведения, щедро дополняя все это информацией о часах работы. What’s open – «Что открыто», работающее под "Андроидом".

Утечка информации прошла по всем законам жанра – онлайн-издание Valleymag раздобыло лицо, сообщившее о том, что в What’s open готовят секретный проект. Удалось раздобыть горсть мутноватых скриншотов, и вскользь упоминается, что Сергей Брин знает о проекте.

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

Кинув быстрый взгляд на экран своего мобильного устройства, пользователь сможет выбрать местоположение, узнать адрес, телефон, рабочие часы и приправить всю эту информацию изрядной долей собственного контента, включая изображения, рейтинги и обзоры. WhatsOpen.com обнадеживает нас: «Больше нет проблем неизвестных направлений, опозданий и закрытых магазинов».

Примерно так началось хождение по миру "Андроида". Впрочем, история развязывалась так, как и предполагалось. 12 ноября 2007 года в сети появился Android software development kit (SDK). Разработчикам предлагалось создавать приложения на Java и запускать на виртуальной машине Dalvik, работающей с ядром Linux. В этот же день стала доступна и документация на английском языке, выдержка из нее: «...Если вы хотите знать, как разрабатывать приложения для Android, вы находитесь в правильном месте. Этот сайт обеспечит вас всей необходимой информацией, которая поможет вам понять Android и начать создавать приложения для этой платформы прямо сейчас».

50 призов по 25 000 долларов эквивалентно 1,25 миллиона долларов, 10*$100k = $1mil и 10*$275k = $2.75mil. Всего 5 миллионов долларов, ну и что случилось с остальными 5 миллионами? Они пойдут в качестве призового фонда на отдельное соревнование, которое начнется с появлением первого аппарата с Android в продаже
И кроме того, был объявлен Android Developer Challenge с наградами общей суммой в 10 000 000 долларов. Как прокомментировала эту инициативу Google: «Для отличных приложений, созданных на платформе Android». Собственно о самом конкурсе мы поговорим чуть ниже.

В блоге Google, посвященном Android, появилось обращение Сергея Брина к коллегам и разработчикам. В видео публике показали мобильный телефон с вполне рабочей версией Android, многими интересными приложениями, примерами многозадачной работы. Почти все приложения Google вроде Google Maps, Gmail работали просто отлично. Двухмерная и трехмерная графика, включая версию Quake, – все выглядело настолько поражающим воображение, что публика начала недоумевать: «Зачем же нужно было так долго скрывать все это от общественности?» В общем, нужный эффект был произведен, слово Android повисло на языках всех разработчиков и гиков от мобильных технологий.

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

Итак, любой пользовательский интерфейс представляет собой набор каких-то инструментов. Экран с двумя полями ввода и кнопкой – пользовательский интерфейс. Activity называется определенный UI, отображаемый в данный момент. Этот класс создает для вас единичное окно, в котором вы можете разместить свой UI, для этого нужно подключить класс Activity.

import android.app.Activity{

После нужно создать класс, расширяющий класс Activity:

public class ShowClock extends Activity{
}

Главная функция, которая принадлежит классу Activity, – это функция onCreate(), в нее разработчик и пишет то, что хочет отобразить при загрузке приложения.
Отобразим простые часы, которые имеются в пакете Widgets. Делается это следующим образом:

@Override
public void onCreate (Bundle icicle){
super.onCreate(icicle);
AnalogClock cl = new AnalogClock(this);
setContentView(cl);
}

А сейчас нам необходимо подключить класс часов:

В итоге получаем следующий код:

package com.google.android.hello;

import android.app.Activity;
import android.os.Bundle;
import android.widget.AnalogClock;

public class WriteData extends Activity{
@Override
public void onCreate (Bundle icicle){
super.onCreate(icicle);
AnalogClock cl = new AnalogClock(this);
setContentView(cl);
}
}

Запускаем — и у нас есть работающее приложение-часы. Ну разве не великолепно?

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

Начать можно с создания простого интерфейса: формы логин+пин-код.
Имеем простой код:

package com.google.android.hello;

import android.app.Activity;
import android.os.Bundle;
public class HelloAndroid extends Activity {

@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
}
}

Запускаем его и видим результат: простая форма логина и пин-кода, как бы странным это ни казалось.
Как это случилось? Очень просто: команда SetContentView() загружает фон для текущего Activity-класса. Layout – это описание интерфейса. Для класса Activity мы загружаем layout.main, описание которого находится в файле main.xml, который расположен в папке layout, а тот, в свою очередь, сидит в папке res.

Теперь посмотрим на файл main.xml проекта.

На скриншоте представлена структура элементов. Главный из них – LinearLayout, содержит в себе все остальные элементы типа TextView и Editext. Они будут выводиться в том порядке, в котором отображены. У каждого из элементов есть набор атрибутов, с помощью которых мы можем им управлять. То есть если хочется сделать отступ от краев экрана, ставим атрибут android:padding = 10 dip.

<?xml  version=«1.0»  encoding=«utf-8»?><br  />  
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  
android:orientation="vertical"  
android:background="#c7c7c7"  
android:layout_width="fill_parent"  
android:layout_height="fill_parent"    
android:padding="10dip"><br  />  
<TextView    
android:layout_width="fill_parent"    
android:layout_height="wrap_content"    
android:text="Login"  /><br  />  
<EditText    
android:maxLines="1"    
android:layout_width="fill_parent"    
android:layout_height="wrap_content"    
id="@+id/login"  /><br  />  
<TextView    
android:layout_width="fill_parent"    
android:layout_height="wrap_content"    
android:text="Pin  code"  /><br  />  
<EditText    
android:maxLines="1"    
android:layout_width="fill_parent"    
android:layout_height="wrap_content"    
android:password="true"    
id="@+id/pin"  /><br  />  
</LinearLayout></i>

Надеюсь, с атрибутами все ясно. Перейдем к добавлению эффекта shake нашей формы. Суть эффекта – анимация, если пользователь вводит пин-код длиной более четырех символов – окно ввода трясется. При правильном пин-коде осуществляется переход в следующее окно. Для этого нужно добавить процедуру, которая активируется после того, как пользователь ввел данные, в классе Activity создается два объекта:

EditText editLogin;
EditText editPassword;

Связываем это с описанием в файле main.xml через id и добавляем функцию setOnClickListener(), которая ждет ввода.

public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);

editLogin = ((EditText) this.findViewById(R.id.login));
editPin = ((EditText) this.findViewById(R.id.pin));
editPin.setOnClickListener(this);
}

Инструменты разработчика:
эмулятор,
плагин Android Development Tools для Eclipse,
Dalvik Debug Monitor Service,
Android Debug Bridge,
Android Asset Packaging Tool,
Android Interface Description Language,
sqlite3,
Traceview,
mksdcard,
dx,
activityCreator
Итак, весь код с комментариями:


// Подключение используемых классов
import android.app.Activity;
import android.app.NotificationManager;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.EditText;

public class HelloAndroid extends Activity implements View.OnClickListener{
EditText editLogin;
EditText editPin;

@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);

editLogin = ((EditText) this.findViewById(R.id.login));
editPin = ((EditText) this.findViewById(R.id.pin));
editPin.setOnClickListener(this);
}

public void onClick(View v) {
// Создаем объект анимации, его описание хранится в xml-файле shake.xml
Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);

// Создаем объект всплывающего окна
NotificationManager nm = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);

// Копируем пин-код который ввел пользователь в переменную pass
String pass = editPin.getText().toString();

// Проверяю, равна ли длина 4
if(pass.length() == 4)
{
// Выводим всплывающее окно с текстом «Welcome + логин пользователя»
nm.notifyWithText(R.id.login,
«Welcome »+editLogin.getText().toString(),
NotificationManager.LENGTH_SHORT, null);

// Создаем класс перехода
Intent intent = new Intent();
intent.setClass(HelloAndroid.this, WelcomeAndroid.class);
startActivity(intent);

//Закрываем текущий Activity-объект
finish();
}
else
{
// Если пин-код неправильной длины, — применяем анимацию
editPin.startAnimation(shake);

// Выводим всплывающее окно «Wrong pin, must be 4 digits»
nm.notifyWithText(R.id.login,
«Wrong pin, must be 4 digits»,
NotificationManager.LENGTH_SHORT, null);

// Очищаем форму ввода пин-кода
editPin.setText(«»);
}
}

Чуть подробнее стоит остановиться на некоторых моментах: классе Intent, с помощью которого осуществляются переходы между Activity-окнами. Мы хотим запустить новое окно, делаем для него описание welcome.xml:

<?xml  version=«1.0»  encoding=«utf-8»?><br  />  
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  
android:orientation="vertical"  
android:background="#c7c7c7"  
android:layout_width="fill_parent"  
android:layout_height="fill_parent"    
android:padding="10dip"><br  />  
<TextView    
android:layout_width="fill_parent"    
android:layout_height="wrap_content"    
android:text="Welcome  Android"  /><br  />  
</LinearLayout></i>

Соответственно, intent.set(HelloAndroid.this, WelcomeAndroid.class) устанавливает переход, а функция startActivity(intent) осуществляет его.

При вводе правильного четырехзначного пин-кода и логина – переход в следующее окно.
Для анимации, кроме прочего, нужно создать xml. Для этого в папке res создадим папку anim и в ней два файла: cycle_7.xml, shake.xml.
Также не забываем добавить в AndroidMainfest.xml:

<i><activity  class=".WelcomeAndroid"  android:label="@string/app_name"></i></p><p>  
.apk

Вот и все о построении интерфейсов и переходах между ними.

Уже сейчас существует множество интересных разработок для Android, в их числе – Z-машина; она была разработана компанией Infocom в 1979 году как виртуальная машина, позволяющая играть в текстовые приключения. В дальнейшем была реализована на многих платформах – наверняка многие видели нечто подобное.

Несмотря на все это, у Android есть одна проблема, которая сильно напоминает известную головоломку с курицей и яйцом. Google пытается всеми силами подтолкнуть разработчиков к написанию программ для ОС "Андроид", но в продажу не поступило еще ни одного устройства с ней на борту – и это очень сильно тормозит как развитие платформы, так и качество и количество приложений для нее (проверить качество пока вообще нет возможности, кроме как в эмуляторе).

Задача для участников — создать свое любимое приложение для мобильных телефонов. Принимаются программы любого типа, однако приветствуются инновационность и, конечно, полезность разрабатываемых приложений
Однако и разработчики, и просто любители поэкспериментировать запускали ОС на различных серийных устройствах, например Qtek 9090. На нем же, кстати, была продемонстрирована работа пакета приложений, выпущенных компанией A La Mobile, в который входили: браузер, аудиоплеер, Google maps, игры, календарь, менеджер контактов, калькулятор, заметки и приложение для набора номеров. Необходимый минимум, назовем его так, вот только менеджер SMS-сообщений забыли.

Естественно, и сама Google показывала несколько прототипов устройств на базе Android. Эту идею подхватили дизайнерские студии, и вуаля – в сеть вывалилось огромное количество высококачественных изображений концептов мобильных телефонов (скорее, конечно, мобильных компьютеров).

Как я и обещал, немного о Android Developers Challenge. 22 апреля 2008 года закончилась подача заявок, и Google торжественно сообщила о 1788 работах из более чем 70 стран. Как отмечают в Google, среди представленных работ были приложения для социальных сетей, утилиты, инструменты для разработчиков и многое другое.
С этим конкурсом была связана одна забавная история: в МТИ (Массачусетский технологический институт) есть профессор по имени Хал Абельсон, раздавший задание о разработке приложения для Android 20 своим студентам, которые сейчас должны быть очень благодарны своему профессору по двум причинам: первая – они уже выиграли 25 000 долларов в первом отборочном туре и прошли в полуфинал; вторая — есть шанс получить 125 000 долларов.

Было признано, что наиболее популярным типом сервиса является так называемый LBS: Location-Based Services, что можно перевести как «сервисы, зависящие от вашего местоположения». Этот тип сервисов и предполагался Google как один из наиболее перспективных для платформы Android.

Однако список победителей остался неоглашенным – «анонимность» стала вторым именем разработчиков...

Ну и в конце концов, компания T-Mobile заявила, что к концу этого года выпустит на рынок свой мобильный телефон Android-based.

Так что зеленый монстрик наступает по всем фронтам. Сдаем города и села?

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

Главный ресурс по "Андроиду" от Google. Здесь можно скачать SDK с документацией (которая, по сути, является копией этого сайта).
Cайт интегрированной среды разработки Eclipse, которую удобно использовать для разработки приложений для Android.
Различные полезные статьи на русском.

Cайт
альянса Open Handset Alliance.
Официальное видео от "Гугла" об "Андроиде".
Официальная англоязычная группа новостей по разработке приложений для "Андроида". В данный момент очень активная (более 100 сообщений в день).
Официальный блог разработчиков Android.
Android на SourceForge.
Собственно главный разработчик "Андроида". Я думаю, в представлении не нуждается.
Англоязычный блог.
Android Wiki.
Android на "Википедии". На английском здесь.




Скоро на сайте

  • Wordpress

    Серия статей о плагинах к движку WordPrress
  • AJAX

    Проекты и продукты, ориентированные на AJAX
  • Новые сервисы Google

    Обзор новых сервисов Google
 

Copyright © 2003—2018 Все права защищены

При использовании материалов сайта ссылка на hostinfo.ru обязательна

  • хостинг от .masterhost
  • Rambler's Top100