Платформа 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? Просто игрушка или игровой автомат?