Статьи

Ruboto: первенец Ruby’s и Android

Платформа 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

view raw
test_server.rb
hosted with ❤ by GitHub

Когда мы вводим сообщение в другое текстовое поле в нашем приложении и нажимаем кнопку отправки, мы должны отобразить сообщение на стороне сервера. Какой великий день для науки! Теперь вы знаете, что делать … создайте лазерный луч смерти и управляйте им со своего устройства Android или что-то в этом роде! (Я не несу ответственности за любые жертвы!)

Что вы думаете о JRuby, Android и Ruboto? Просто игрушка или игровой автомат?