A Ruby programozási nyelv

Ruboto (Ruby Androidon)



1. Bevezetés

A Ruby nyelvnek már létezik Java implementációja, a JRuby. A Rubyban megírt kód a JRubyval Java-osztállyá alakítható, például webszolgáltatás létrehozásához. Azonban ez még nem teljesen működik együtt az Android rendszerrel, ezért is jött létre a Ruboto platform.

A Ruboto egy olyan platform, melynek segítségével teljes értékű Android alkalmazásokat lehet írni Ruby nyelven. Lehetővé teszi, hogy használjuk az Android API és a Java összes lehetőségét a megszokott Ruby környezetből.

2. Telepítés

Ahhoz, hogy használni tudjuk a rendszert, több dolgot előre telepítenünk kell. Jelen leírásban a Windows rendszerre való telepítés kerül bemutatásra.

Készüljünk fel, hogy a telepítés nem 5 perc, hanem bizony több időt is igénybe vehet attól függően, hogy a szükséges programok közül melyek vannak feltelepítve a célgépre.

Gyakori kellemetlenségek!
Van néhány követelmény, melyeknek meg kell felelnie a számítógépnek, amire telepíteni kívánjuk a Ruboto-t.

A fő követelmény, hogy a számítógép támogassa a virtualizációs platformokat (nekünk kell: HAXM (Hardware Accelerated Execution Manager, az Intel megoldása)), enélkül ugyanis nem lehet telepíteni a Ruboto-t. A virtualizációt elsősorban a BIOS-ban lehet könnyedén ki/bekapcsolni. Kapcsoljuk be, ha használni szeretnénk a Ruboto-t. Miután ezzel megvagyunk, nézzük meg, hogy a gép processzora támogatja-e a HAXM-ot. Erre tökéletesen alkalmas a CrystalCPUID névre hallgató program (ingyenes). Letöltés után csomagoljuk ki és indítsuk el az alkalmazást. A program kezdőképernyőjén egyből megjelenik minden fontos információ. Nekünk a VT-t kell megkeresnünk, ami a jobb alsó sarok környékén található. A gépünk támogatja a HAXM-ot, ha a VT felirat nincs elhalványítva.

HAXM támogatása

Nyilvánvaló követelmények még a Ruboto-hoz az egyes szoftverek követelményei.

A Ruboto működéséhez szükséges szoftverek (érdemes ebben a sorrendben telepíteni ezeket):

JDK és JRE

A Ruboto használatához bármelyik JDK-t használhatjuk 6-os verzió fölött. Miután letöltöttük és telepítettük a megfelelő JDK-t, be kell állítanunk a rendszer alábbi környezeti változóit:

Például:
path=%path%;C:\Program Files (x86)\Java\jdk1.7.0_25\bin; classpath=%classpath%;.; JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_25

Ezzel készen is vagyunk a Java konfigurációjával. Jöhet a következő lépés.

Android SDK

A következő lépés, hogy feltelepítjük az Android SDK-t. Telepítés után indítsuk el az SDK Managert (sdk_telepítés_helye/SDK Manager.exe). A következő 3 lépést mindenképpen csináljuk meg az SDK-n belül a normális működés érdekében:

Indítsuk el a telepítést. Ez eltarthat egy darabig. Miután elkészült a telepítés, adjunk hozzá a rendszer környezeti változóihoz egy újat ANDROID_HOME néven, aminek az értéke az Android SDK elérési útvonala legyen. Például:
ANDROID_HOME=C:\Program Files\adt-bundle-windows-x86_64-20140321\sdk

A path környezeti változót megint módosítanunk kell. Adjuk hozzá a következő elérési útvonalakat:
path=%path%;D:\Android_SDK_elérési_útvonala\platform-tools; path=%path%;D:\Android_SDK_elérési_útvonala\tools; path=%path%;D:\Android_SDK_elérési_útvonala\build-tools\18.1.1;

Ant

A Ruboto használja az Ant scripteket, ezért ezt is telepítenünk kell. Ez elérhető innen. Kövessük az oldalon leírt telepítési menetet, majd próbáljuk is ki, hogy működik. Adjuk hozzá ezt is a path környezeti változóhoz:

path=%path%;C:\Program Files\Apache Software Foundation\apache-ant-1.9.4\bin;

Ezzel készen is volnánk, többet nem kell foglalkozni az Ant beállításaival.

JRuby

A Ruboto képes együttműködni az összes fő Ruby-Java implementációval, mint például a JRuby, vagy a Rubinius. Most a JRuby-t fogjuk használni. Telepítsük az alap beállításokkal. Telepítés után ellenőrizzük, hogy működik-e a JRuby. Ezt a következő paranccsal tehetjük meg a parancssorból:

jruby -v

Ha működik, akkor valami ilyesmi üzenetet kell, hogy kapjunk:
jruby 1.7.12 (1.9.3p392) 2014-04-15 643e292 on Java HotSpot(TM) Client VM 1.7.0_25-b16 [Windows 8-x86]

Ruboto (PC)

A Ruboto telepítéséhez nyissunk egy új parancssor ablakot, majd gépeljük be a következőt:

jruby -S gem install ruboto

Ez a parancs elvégzi nekünk a Ruboto gem telepítését a gépünkre.

A Ruboto-val meg tudjuk csinálni a következőket:

Ruboto (Android)

Ahhoz, hogy a Ruboto-s alkalmazások fussanak Android-os eszközünkön, arra is telepíteni kell a megfelelő futtatási környezetet. Mivel manaság szinte minden készüléken van Google Play áruház, ajánlott onnan letölteni a Ruboto Core környezetet. Ha ezt nem telepítjük az eszközünkre, de rátöltünk egy Ruby-ban megírt Android programot, akkor indításkor kapunk egy figyelmeztetést, hogy telepíteni kéne a Ruboto Core-t, hogy fusson az alkalmazásunk. Maga ez a Core alkalmazás biztosítja a Ruby-ban megírt aklamazások számára a "virtuális" futtatási környezetet.

Utolsó simítások

Letutolsó lépésként ellenőrizni kell, hogy a Ruboto számára szükséges összes komponens fel van-e telepítve. Nyissuk meg a parancssort, majd írjuk be a következő parancsot:

ruboto setup

Ha valamilyen program még hiányzik a Ruboto fejlesztéshez, azt ez a parancs telepíti (persze előtte megkérdez minket, hogy szeretnénk-e telepíteni a szükséges programokat).

Ezzel készen vagyunk a fejlesztői környezet telepítésével.

3. Egyszerű Ruboto Alkalmazások

Az alkalmazások futtatásához kell egy Android-ot futtató eszköz. Ez lehet virtuális emulátor is akár, de ez a lassúsága miatt nem nagyon ajánlott. Inkább egy saját fizikai eszközön futtassuk a megírt programjainkat, mert ugyan a Ruby-ban megírt app-ok minden Android-os funkciót támogatnak, a betöltődésük sokkal lassabb, mint egy Java nyelven írt app betöltési ideje. Az emulátor alapból is nagyon lassú még a csúcsgépeken is, szóval tényleg csak akkor használjunk emulátort, ha rengeteg felesleges időnk van.

Új Ruboto projekt létrehozása

Nyissuk meg a parancssort, majd navigáljunk ahhoz a mappához, ahova az új projektet szeretnénk elkészíteni. Legyen ez mondjuk a C:\Ruboto mappa. Gépeljük be a parancssorba a következő parancsot az új projekt legenerálásához:

ruboto gen app --package org.ruboto.example.quick_start --target android-18

A parancs egyes részeiek a jelentése:

Egyszerű alkalmazások készítése

Új projekt generálásánál sok másik fájl mellet létrejön egy ruby fájl, amire nekünk szükségünk van a kezdéshez. Használjuk az előbb bevezetett C:\Ruboto mappát továbbra is. A Ruboto mappában van egy src mappa. Ebbe kerülnek a program konkrét forráskódjai. Kezdetnek kapunk egy quick_start_activity.rb nevű fájlt. Ez lesz a programunk fő belépési pontja, vagy mondhatjuk úgy is, hogy a main osztály.
Nem mennék bele részletesen az Android specifikus nyelvi eszközök mélyebb magyarázatába, azokat mindenki megtalálja az Android-os résznél, vagy az Android dokumentációjában.
Kezdésnek nézzük meg, hogy miből áll össze egy Hello World alkalmazás a Ruboto-ban. A forráskódja a következő lehet:

require 'ruboto/widget' ruboto_import_widgets :TextView class QuickStartActivity def on_create(bundle) super setTitle "Hello World Activity" setContentView( text_view :text => "Hello, World!", :text_size => 30.0, :gravity => (android.view.Gravity::CENTER_HORIZONTAL | android.view.Gravity::CENTER_VERTICAL)) end end

Nézzük meg, hogy melyik sorban mi is történik.
Az első sorban meghívjuk a widget könyvtárat, ami a TextView-t (szöveges nézet, label) tartalmazza, majd a második sorban konkrétan a TextView-t hívjuk meg.
A harmadik sorban az on_create függvény a belépési pontja egy Android activity-nek (mint a main függvény a legtöbb programozási nyelvben), ami automatikusan meghívódik a program futtatásakor.
A super az ősosztály alapján inicializál.
A setTitle "title" beállítja a képernyő címét a kívánt string értékre.
A setContentView a dolgok érdekesebb része. Itt tudjuk beállítani a nézet tartalmi részét. A Hello World alkalmazáshoz csupán egy TextView szükséges, ami tartalmazza a megfelelő szöveget. A méretet is meg lehet adni; jelen esetben ez 30 pixel. A gravity paraméter a szöveg elhelyezkedését adja meg: vertikálisan és horizontálisan is középre kerül a szöveg.

Következő lépésként nyissuk meg a quick_start_activity.rb fájlt, ami automatikusan legenerálódik a csomag létrehozásakor. A fájl tartalma valami ilyesmi lesz:
class QuickStartActivity def on_create(bundle) super setTitle "Hello World Activity" setContentView( text_view :text => "Hello, World!", :text_size => 30.0, :gravity => (android.view.Gravity::CENTER_HORIZONTAL | android.view.Gravity::CENTER_VERTICAL)) end def onCreate(bundle) super set_title 'Domo arigato, Mr Ruboto!' self.content_view = linear_layout :orientation => :vertical do @text_view = text_view :text => 'What hath Matz wrought?', :id => 42, :layout => {:width => :match_parent}, :gravity => :center, :text_size => 48.0 button :text => 'M-x butterfly', :layout => {:width => :match_parent}, :id => 43, :on_click_listener => proc { butterfly } end rescue Exception puts "Exception creating activity: #{$!}" puts $!.backtrace.join("\n") end private def butterfly @text_view.text = 'What hath Matz wrought!' toast 'Flipped a bit via butterfly' end end

Ennél a lényegi rész a content_view-től (10. sor) kezdődik. Ebben definiálunk egy szöveg nézetet és egy gombot. Az alkalmazás tulajdonképpen azt csinálja, hogy a gomb lenyomásakor meghívja a butterfly metódust, ami a @text_view változón keresztül megváltoztatja a szöveg nézet szövegét.

További leírásokat a különböző Android specifikus komponensekhez itt találunk.

Projektek fordítása és futtatása

Először is engedélyezni kell a debug módot az eszközünk beállításaiban. Csak ez után tudunk programot fordítani az Androidos eszközünkre.
A projektek fordításához és futtatásához a következő batch scriptet érdemes használni, mivel ha újra akarjuk fordítani és futtatni az alkalmazást, akkor mindig törölni kell a bin mappa tartalmát manuálisan (valószínűleg valamilyen bug miatt). Tegyük be egy batch fájlba a következő kódot:

del /q bin\* FOR /d %%x IN ("bin\*") DO @rd /s /q %%x rake install start pause

Miután sikeresen lefordul a programunk, a számítógéphez csatlakoztatott eszközünkön automatikusan elindul az alkalmazás.