Платформа Android — это попытка Googles запустить iPhone за свои деньги. В последние год или два он стал достойным противником. Одной из причин этого является тот факт, что он может предложить много интересного: разработчики наслаждаются возможностями и, конечно же, мобильностью, которые позволяют им легко использовать свои любимые библиотеки Java, поскольку неродные приложения Android работают на специальной виртуальной машине Java. или JVM.
JRuby — это отмеченное наградами программное обеспечение с открытым исходным кодом, которое приносит Ruby, нашу жемчужину красоты, в рабочую лошадку — JVM, которая, как я уже говорил, также поддерживает приложения Android. Короче говоря, произошло самое естественное, и родился Рубото ! Домо аригато действительно.
Поскольку я люблю как Ruby, так и Android, мне пришлось протестировать Ruboto, что я и сделал на прошлой неделе. Я подумала, почему бы не сделать небольшую статью из моего маленького приключения? (Если вы хотите написать статью о какой-нибудь классной рубиновой вещи, не стесняйтесь обращаться к нам!)
Позвольте мне сначала дать вам краткий обзор того, как все сходится, а затем я покажу вам, как это попробовать самостоятельно.
Как вы можете видеть, исходные файлы Java вместе с JAR-файлами JRuby упаковываются вместе в приложение Android, которое может запускать ваши собственные сценарии Ruby, предоставляя вам доступ к API-интерфейсам Android. Это мощный подход, поскольку он позволяет впоследствии изменять сценарии Ruby без необходимости перекомпиляции всего приложения. Здесь подразумевается, что вы можете написать код Ruby прямо на вашем устройстве и запустить его. Следует признать, что это не самый удобный способ написания кода, но на самом деле приятно иметь работающий IRB на вашем устройстве, чтобы быстро что-то попробовать.
Как это сделано?
Ради простоты и моего психического здоровья я только покажу вам, как я это сделал на своей машине с Linux. Если вы используете Mac или Windows, для вас также есть учебники .
Настройка системы
Для начала вам нужно иметь JDK (Java Development Kit) и Ant (подумайте о Bundler для Java).
sudo apt-get install default-jdk ant
Убедитесь, что у вас установлена версия Ant не ниже 1.8.1. Если нет, вы можете получить его отсюда .
Теперь учебник по Ruboto устанавливает все, что связано с Ruby через Aptitude, но я предпочитаю использовать RVM (менеджер версий Ruby). Вы можете установить его просто с помощью bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer) но сначала вы должны прочитать их руководство по установке .
После успешной установки RVM вы можете использовать его для автоматической установки среды Ruby. Я решил использовать последнюю версию JRuby, запустив rvm install jruby .
Теперь, как вы можете знать, а можете и не знать, RVM довольно прозрачно обрабатывает ваши наборы гемов для ваших версий Ruby, что позволяет нам устанавливать необходимые гемы с помощью простого gem install rake bundler ruboto jruby-jars .
Последний шаг — установить Android SDK. Для этого все, что вам нужно сделать, это загрузить SDK отсюда , извлечь его в папку по вашему выбору (psst, /opt/android-sdk/ is nice!) И добавить это местоположение в переменную пути (например, добавив что-то вроде
export PATH=${PATH}:/opt/android-sdk/tools в ваш файл ~/.bashrc )
Чтобы создать свое первое приложение на Ruboto, просто наберите ruboto gen app --package org.ruboto.example.quick_start --target android-7 и
quick_start во вновь созданный каталог quick_start .
Настройка устройства
Я просто использовал свой реальный телефон Android вместо эмулятора, но если вы предпочитаете использовать эмулятор или если что-то пошло не так, и вам нужно узнать больше деталей о процессе установки и т. Д., Просто посетите официальный учебник по началу работы с Ruboto.
Чтобы использовать ваше устройство Android для опробования вашего приложения, вам нужно разрешить неизвестные источники в Настройках / Приложениях и включить отладку по USB в Настройках / Приложения / Разработка (Настройки / Безопасность и Настройки / Developer_options начиная с Android 4.0).
Последнее, что нужно сделать, прежде чем мы сможем установить пример приложения на устройство. Вам нужно создать файл /etc/udev/rules.d/51 android.rules , добавив строку SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev" и запустите на нем быстрый sudo chmod a+r /etc/udev/rules.d/51-android.rules .
Обратите внимание, что вам нужно обменять «0bb4» на ваш фактический идентификатор поставщика. Наиболее распространенными из них должны быть
- HTC: 0BB4
- Samsung: 04E8
- Google: 18D1
- LG: 1004
- Motorola: 22B8
- Huawei: 12D1
Остальное можно найти здесь . Опять же, если вы используете Windows или Mac, вам придется делать разные вещи. Пожалуйста, зайдите и прочитайте эти инструкции.
Веселая часть
Ну, это было легко, не так ли? Серьезно, принесите пиво или что-то подобное, если вы еще этого не сделали, потому что самое интересное может наконец начаться: давайте напишем немного кода на Ruby! Теперь вы сможете собрать и установить пример приложения на свое устройство, при условии, что оно подключено через USB, с помощью простой rake install .
Так как пример приложения действительно скучный, мы должны заставить его делать что-то более веселое. Когда я начал играть, сначала подумал о том, чтобы написать небольшую игру или что-нибудь с камерой устройств, но дело в том, что этот вид проекта либо совершенно тупой, либо слишком сложный, чтобы его можно было сделать в такой маленькой статье, как эта. Мой друг рассказал мне о проекте, над которым он работает, где он хочет удаленно управлять своим модным телевизором через Ruby, и это заставило меня задуматься. Почему бы не создать небольшой скрипт, который подключается к TCP-серверу и отправляет сообщение. Мне понравилась идея, потому что это не так много кода, он быстро сделан, его легко можно превратить во что-то потенциально полезное, и я просто люблю сетевой материал.
Первое, что мы изменили, — это имя приложения в res/values/strings.xml . Сразу после этого мы открываем AndroidManifest.xml и чуть выше </manifest> в конце добавляем <uses-permission android:name="android.permission.INTERNET"> . Очевидно, это дает нашему приложению разрешение на доступ к сети. Теперь мы можем, наконец,
добавьте код Ruby в src/quick_start_activity.rb . Просто замените все в этом файле следующим кодом
| require ‘ruboto/activity’ | |
| require ‘ruboto/widget’ | |
| require ‘ruboto/util/toast’ | |
| require ‘socket’ | |
| ruboto_import_widgets :Button, :LinearLayout, :EditText | |
| $activity.start_ruboto_activity «$sample_activity» do | |
| setTitle ‘Funky TestApp’ | |
| def on_create(bundle) | |
| self.content_view = | |
| linear_layout(:orientation => :vertical) do | |
| @host = edit_text(:single_line => true, :hint => «Hostname[:port]», | |
| :layout => {:width= => :fill_parent, :height= => :wrap_content, :weight= => 1.0}) | |
| @message = edit_text(:single_line => true, :hint => «Message», | |
| :layout => {:width= => :fill_parent, :height= => :wrap_content, :weight= => 1.0}) | |
| button :text => ‘Send message!’, :width => :wrap_content, :on_click_listener => @handle_click | |
| end | |
| end | |
| @handle_click = proc do |view| | |
| begin | |
| host, port = @host.getText.to_s.split(‘:’) | |
| @sock = TCPSocket.open(host, port || 1234) if !@sock || @sock.closed? | |
| @sock.puts @message.getText.to_s | |
| rescue | |
| toast «#{$!}« | |
| @sock.close rescue nil | |
| end | |
| end | |
| end |
Запустите rake install раз, чтобы развернуть изменения на вашем устройстве.
Что делает этот код? После запуска приложения вы должны увидеть два текстовых поля и кнопку. В первом текстовом поле мы вводим имя хоста сервера в той же сети или в Интернете. На этой машине мы должны запустить TCP-сервер, что можно сделать либо с помощью всемогущего netcat ( nc -l 1234 ), либо с помощью некоторого кода Ruby.
| require ‘socket’ | |
| server = TCPServer.new(»,1234) | |
| loop do | |
| socket = server.accept | |
| while line = socket.gets | |
| puts line | |
| end | |
| end |
Когда мы вводим сообщение в другое текстовое поле в нашем приложении и нажимаем кнопку отправки, мы должны отобразить сообщение на стороне сервера. Какой великий день для науки! Теперь вы знаете, что делать … создайте лазерный луч смерти и управляйте им со своего устройства Android или что-то в этом роде! (Я не несу ответственности за любые жертвы!)
Что вы думаете о JRuby, Android и Ruboto? Просто игрушка или игровой автомат?
