Build Your First PHP for Android Application

Original author: Keith Vance
  • Translation
Операционная система Android повергла рынок сматрфонов в шок :). В отличии от компании Apple, которая предъявляет достаточно строгие требования к разработчикам, которые хотят выставлять свои приложения в iPhone App Store, Google создал платформу Android открытой (в оригинале wide open). В настоящее время вы можете писать приложения PHP. Парни из Irontech создали необходимое, и используя Scripting Layer для Android (SL4A), вы можете создавать на PHP приложения для Android.

Нет!
В этой статье я расскажу как установить, настроить и использовать PHP для Android и SL4A, также мы увидим демо приложения и вы получите первый опыт разработки приложений для Android на PHP.

Установка PHP для Android

Для установки PHP для Android, у вас должен быть телефон или эмулятор поддерживающий Android версии 1.5 или больше, также в настройках установки приложений, должна стоять галочка на установке приложений из неизвестных источников. После всего этого, просто установите два пакета SL4A environment и PHP for Android APK.

Установка SL4A достаточно проста, однако после установки пакета PHP for Android application, необходимо запустить его и нажать «install» для полной установки(В процессе установки программа скачивает где-то около 2 МБ). Если у вас появились проблемы с установкой, то есть видео-демонстрация на Vimeo((или здесь)).

Настройка среды разработки PHP для Android

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

После скачивания SDK, разархивируйте содержимое, запустите приложение Android, находящееся в каталоге tools, и установите эмулятор. В меню Android SDK and AVD Manager, выберите Virtual Devices и нажмите на кнопку New. Назовите ваш эмулятор (например «Droid2») и выберите Android 2.2. Введите 10 МБ в качестве размера SD Card и нажмите Create AVD.

Теперь у вас есть настроенный эмулятор, нажмите кнопочку Start. Здесь возникает некоторая сложность, вы не можете просто скопировать файлы на виртуальное устройство, которое только что создали. Вам необходимо настроить форвардинг портов (port forwarding) и поместить ваш PHP-скрипт на виртуальное устройство, используя программу под названием adb, которая является частью Android SDK. Она также находится в каталоге tools.

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

На вашем запущенном виртуальном устройстве перейдите на экран Applications и нажмите SL4A.
# на экране SL4A, нажмите кнопочку Menu, выберите View и выберите Interpreters.
# Нажмите Menu снова, выберите Start Server и выберите Private.
# Опустите область уведомлений (Android notification bar) вниз и вы увидите Службу SL4A. (Нажмите на службу и запишите номер порта, который прослушивает ваш сервер, например 47000.)
# Откройте командную строку и установите форвардинг портов, используя команду adb. Например, введите команду «adb forward tcp:9999 tcp:47000» (замените 47000 на номер вашего порта).
# Установите переменную окружения AP_PORT. На UNIX или Mac, запустите «export AP_PORT=9999». На Windows «set AP_PORT=9999».
# Для теста работы эмулятора запустите «run adb push my_script.php /sdcard/sl4a/scripts» (замените my_script.php на название вашего скрипта).

Вы также можете работать с реальным телефоном. Следуйте теми же шагами, что и с эмулятором. Чтобы облегчить процесс установите переменную окружения ANDROID_HOME, которая будет указывать на расположение вашего Android SDK и добавьте путь к каталогу tools в список путей (что-то я не особо понял как это сделать на телефоне, если читатели знают, то пусть напишут в комментариях)

Создание Android приложений на PHP

Написание приложений на PHP очень легкий процесс после того как вы настроили все что описано выше. Единственно что стоит отметить, что версия PHP для Android очень урезана. В вашем распоряжении будут основные функции PHP и поддержка JSON. А если же вы являетесь разработчиком Android, который хорошо знаком с Java фреймворком для Android, вы заметите что Scripting Layer для Android не обеспечивает доступ ко всем компонентам, которые бы вы получили, используя для разработки Java (будем надеятся что это только пока).

То что обеспечивает SL4A — это только фасад к подмножеству Android API. (Полный список методов, обеспечиваемых SL4A, доступен тут ) В чем же прикол PHP для Android — вы можете легко разрабатывать приложени е и видеть его работу, написав всего лишь несколько строк кода. Давайте рассмотрим приложение, которое работает с котировками, которое занимает меньше 60 строк кода.

  1. <?php
  2. define('QUOTE_SERVER', 'http://quoter.take88.com/?ticker=%s');
  3. require_once("Android.php");
  4. $droid = new Android();
  5. $action = 'get_tickers';
  6. $tickers = '';
  7. while (TRUE) {
  8.   switch ($action) {
  9.   case 'quote':
  10.   $droid->dialogCreateSpinnerProgress("Querying stock information server ...", "Please wait");
  11.   $droid->dialogShow();
  12.   $quotes = @array_slice(json_decode(file_get_contents(sprintf(QUOTE_SERVER, $tickers))), 0, 3);
  13.   $droid->vibrate();
  14.   $droid->dialogDismiss();
  15.   // Possible data points.
  16.   // "SYMBOL","NAME","LAST_TRADE","MORE_INFO","LAST_TRADE_DATE","LAST_TRADE_TIME","OPEN","DAYS_HIGH","DAYS_LOW","DIVIDEND_SHARE","PE_RATIO","52_WEEK_LOW","52_WEEK_HIGH","VOLUME"
  17.   $output = '';
  18.   for ($i = 0, $cnt = count($quotes); $i < $cnt; $i++) {
  19.     $output .= "Company: " . $quotes[$i]->NAME ."\n";
  20.     $output .= "Ticker: " . $quotes[$i]->SYMBOL . "\n";
  21.     $output .= "Last trade: $" . $quotes[$i]->LAST_TRADE . "\n";
  22.     $output .= "\n";
  23.   }
  24.     $output = html_entity_decode($output, ENT_QUOTES, "UTF-8");
  25.   // Something is wrong with '
  26.   $output = str_replace("'", "'", $output);
  27.   $droid->dialogCreateAlert("Your stock quotes", $output);
  28.   $droid->dialogSetPositiveButtonText("Get new quote");
  29.   $droid->dialogSetNegativeButtonText("Exit");
  30.   $droid->dialogShow();
  31.   $response = $droid->dialogGetResponse();
  32.   if ($response['result']->which == 'negative') {
  33.     $action = "exit";
  34.   } else {
  35.     $action = 'get_tickers';
  36.   }
  37.   break;
  38.   case 'get_tickers':
  39.   $response = $droid->getInput("Stock Tickers (max. 3)", "Enter Tickers.\nSeparate with spaces.");
  40.   
  41.   $tickers = str_replace(' ', '+', $response['result']);
  42.   $droid->vibrate();
  43.   $action = 'quote';
  44.   break;
  45.   case 'exit':
  46.   $droid->exit();
  47.   exit();
  48.   break;
  49.   }
  50. }
  51. ?>
* This source code was highlighted with Source Code Highlighter.


Скопируйте и поместите этот код в редактор, сохраните под именем quoter4android.php и загрузите его в эмуляторе. Если эмулятор не запущен, запустите его, настройте форвардинг портови загрузите quoter4android.php, используя adb.

Для запуска приложения в вашем эмуляторе, перейдите на экран приложения, нажмите иконку SL4A и нажмите quoter4android.php.

Для установки quoter4android.php на ваш телефон, вы можете настроить форвардинг портов, но легче соединить телефон с компьютером через USB и скопировать скрипт в каталог sl4a/scripts. Однако для запуска скрипта, необходимо отсоединить его от компьютера, иначе вы не увидите установленные скрипты, а зщатем кликните иконку SL4A.

Заключение

С SL4A и PHP for Android можно сделать много интересных вещей; эта статья всего лишь маленькая демонстрация возможностей. Все эти приложения очень молоды — новая версия SL4A вышла когда я писал эту статью — и в будущем мы будем получать все новые и новые возможности.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 59

    –57
    Говнокод — теперь и на Android.
      +2
      Здесь скорее иллюстрируется возможность написания кода для Android не только на Java.
      Плюсами такого подхода является, что теперь можно писать код практически на любом языке.
      Однако «говнокод» тут не пройдет, так как если приложение написано кривыми руками, то его вряд ли установят
        +3
        Я еще несколько месяцев назад писал игрушечные приложения под андроид на Scala и на Ruby. Возможность писать под андроид на языках, отличных от явы — не новость.
        +30
        говно люди пишут, языки тут не при чем.
          +7
          Facebook: javascript + php +… Посмотрите на скорость + качество. Долго ещё будут продолжаться языковые войны?
            0
            Будут продолжаться до тех пор пока молотком будут забивать шурупы.
            В фейсбуке php используется по своему прямому назначению — шаблонизатор в фротненде. И то пришлось компилятор допиливать.

            habrahabr.ru/blogs/personal/100020/
              +1
              Какой шаблонизатор в каком фронт-енде? Там всё написано на PHP, который частично скомпилирован.
                0
                Таки пройдите по ссылке
                  +2
                  Таки читал, и не только это, и не только читал.
                  Есть отдельные компоненты, написанные на других языках, но основная работа по прежнему выполняется на PHP.

                  PS прочтите оригинал приведённой вами статьи
                    –4
                    Прочитал. Не вижу корявости в переводе.

                    Заберу слова насчет шаблонизатора обратоно. На пхп написана и большая бизнесс логики связаной с отдачей контента, но с использованием HipHop. Небольшая цитата с гита:
                    «One of the explicit design goals leading into HipHop was the ability to continue writing complex logic directly within PHP. Companies with large PHP codebases will generally rewrite their complex functionality directly as PHP extensions in either C or C++. Doing so ends up reducing the number of people who are able to work on the company’s entire codebase. By keeping this logic in PHP, Facebook is able to move fast and maintain a high number of engineers who are able to work across the entire codebase.» Т.е. фейсбуковцы посчитали что дешевле написать свой компилятор чем переписать все с нуля.

                    В тоже время смотрим на отдельные компоненты: Отдача картинок видео — не пхп. Api — не спроста они Tornado купили. Чат — эрланг. кеширование c++, база данных своя. Почти вся инфраструктура C, Java. Какую часть этого айсберга представляет собой пхп мне не совсем понятно но говорить что основная работа лежит на PHP как минимум не корректно.

                    В тоже время это лишь подтверждает тезис о том что PHP хорош на своем месте.
                      +2
                      Про HipHop уже обсуждалось — компилировать на нём весь код смысла не имеет.

                      Прочитал. Не вижу корявости в переводе.
                      но говорить что основная работа лежит на PHP как минимум не корректно
                      This has allowed Facebook to get much more out of its web servers since Facebook relies heavily on PHP to serve content.
                        –4
                        Согласен перевод совсем не о том.
                        Тем не мение аргумента не понял. Да отдача контента сильно завязана на пхп и фейсбук вынужден был изобрести свой компилятор. Но откуда вы делает вывод что основная работа висит на php?
                          0
                          1. У слова serve есть и другие значения.
                          2. Просмотрите их вакансии по позициям Software Engineer, практически в каждой встретите «Code primarily using PHP, C++»
                          3. Информация с различных high load & scalability ресурсов и конференций (правда за актуальность ничего не скажу)
                          4. Возможно, я и ошибся в оценке, и сейчас у них всё по другому.
                        0
                        В тоже время смотрим на отдельные компоненты… Какую часть этого айсберга представляет собой пхп мне не совсем понятно но говорить что основная работа лежит на PHP как минимум не корректно.

                        Не инфраструктура, а API. У каждой цели есть свои лучшие решения. Вот как раз единственные кто забивают молотком шурупы — это те кто ищут единый универсальный язык для любой задачи. Существует помимо реализации еще куча факторов. Если необходимо выдать быстро и недорого рабочий сайт, то сомневаюсь что будут писать на Java, хотя умудряются. А дальше можно смотреть, если «пипл схавал» — то дорабатывать или переписывать частями… Честно говоря я РНР воспринимаю как средство очень быстрого прототипирования ресурса.
              • UFO just landed and posted this here
                  +2
                  Зачем переделывать?
                  • UFO just landed and posted this here
                0
                Знавал одного «умника», сначала он пару лет сам писал говнокод на PHP

                — Смотри какой классный селект кейс я сделал, 9999 строк, менеджер уже похвалил
                — Да ты крутооой :(

                Потом он пересел на Java, т.к. за неё больше платят, и стал частенько поговаривать, что наше «PHP говно и писать на нём можно только говнокод».
                  0
                  я уж на секунду(не более) понадеялся что холивар пройдет мимо топика, но нет…
                  –14
                  зачем…
                    +4
                    Это стратегия — захват рынка
                    Больше разработчиков — больше приложений, но это написано в самом первом абзаце перевода
                      –10
                      ну против самого SL4A я ничего не имею, но пых пых на андроиде… не очень у меня приятные ощущения о нем с веб-стороны… хотя может тут и получится что-нибудь толковое. но я бы предпочел питон :)
                        +3
                        Думаю и под питон появится, если начинание прижевётся.
                          0
                          оно не появится, оно уже есть, в рамках этого же SL4A :)
                            +4
                            Чудесно. К чему тогда ваше «зачем»?
                            0
                            питон, перл и даже Луа. и кажется еще пара каких-то языков
                            0
                            Мне кажется, что в данном контексте имеются ввиду десктопные приложения
                            И здесь, наверное, все таки есть разница относительно веба
                              0
                              Никогда не видели говнокод на питоне? :) Фигня это всё, что качество кода зависит от языка. Я хоть на Java, хоть на Python, хоть на С/С++/С# (насчёт Lisp и Forth не уверен, ещё не пробовал их в вебе) такие простыни спагетти кода в процедурном стиле могу выдать для, например «ещё одного бложика», что мой же код в процедурном же стиле на php будет казаться идеалом.
                            +2
                            Почему бы и нет?
                            0
                            Делать-то можно, только как это потом распространять, если оно так сложно в установке? Чисто для себя поиграться?
                              +1
                              Что сложно? Единожды установить 2-а дополнительных пакета?
                              Да я 20 установлю, если потребуется для необходимого мне приложения.
                                +7
                                Для себя не сложно. Вы когда-нибудь сталкивались с хомячками «обычными пользователями»?

                                чтобы они произвели всю эту процедуру — они должны быть просто нереально мотивированы — на грани жизни и блокировки странички вконтакте
                                  0
                                  Не знаю как конкретно с PHP, но с другими языками SL4A можно собирать обычный .apk
                              +4
                              Это анонсировалось давно, да.
                              Наконец то без лишней головной боли смогу написать пару приложений для личных нужд.
                              Огромное спасибо за перевод, будем ковырять =)
                                0
                                теперь бы ещё MONO туда же, чтоб майкрософт удавился %)
                                  –1
                                  Добавить полешек в патентные войны? Понимаю.
                                    0
                                    • UFO just landed and posted this here
                                        0
                                        Ещё два плюса и можете публиковать :)
                                        • UFO just landed and posted this here
                                            0
                                            Нет, же… Я смотрю что у вас карма +3, и ещё два плюса вам в карму даст вам возможность публиковать статьи в блоги.
                                            • UFO just landed and posted this here
                                                0
                                                Попросите своих знакомых, в твиттере, либо где-то ещё, что бы вам подняли карму до +5.

                                                Я бы с радостью, но мне нельзя голосовать повторно.

                                                PS Я сам недавно попросил в твиттере что бы мне подняли карму для того что бы опубликовать статью :)
                                      0
                                      Какой красивый пример… dialogSetPositiveButtonText()… без шаблонов под дизайн. На Java хоть пожилой xml.

                                      Не эмулятор а игрушка мол ребята для iphone делали портирование java на object c через xmlvm… чем мы хуже.

                                      Ребята. Читайте родную android-документацию и пишите на java.
                                        +6
                                        Строка 26 в коде — это лишь для посвященных?
                                          0
                                          Магия О_О
                                            0
                                            Парсер лох просто…
                                              0
                                              Видимо имелся в виду &_apos;?
                                            0
                                            Полный список методов, обеспечиваемых SL4A, доступен тут


                                            «Тут» не открывается :(

                                            И это… Насколько я понимаю готовое приложение на пхп можно каким то дивным образом потом превратить в apk и запускать на любом девайсе а не тех, на которых уставленасвязка интерпретатора + SL4A?
                                            0
                                            Еще бы штатную возможность писать на сях, было бы вообще обалденно, а так очень радует тенденция развития сторонних средств разработки.
                                              0
                                              ndk?
                                            • UFO just landed and posted this here
                                                0
                                                поправил
                                              • UFO just landed and posted this here
                                                  0
                                                  Выше уже ответили — это парсер-лох, вместо первой кавычки должно быть &_apos; только без подчёркивания.
                                                  • UFO just landed and posted this here

                                                Only users with full accounts can post comments. Log in, please.