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.
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
- Android SDK
- ANT
- JRuby
- Ruboto (PC)
- Ruboto (Android)
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:
- path: hozzá kell adni a JDK bin mappájának az elérési útvonalát (például: )
- classpath
- JAVA_HOME: a JDK elérési útvonala
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:
- Töltsük le a legfrissebb verziójú Android-ot (API X, ahol X a legnagyobb az összes közül)
- Töltsük le a legfrissebb Tools-okat (Tools mappa)
- Töltsük le az Android Support Library-t (Extras mappán belül található)
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:
- Új Ruboto/Android alkalmazáshoz a könyvtárszerekezetet le tudjuk generálni
- Újabb Ruboto komponenseket tudunk generálni már meglévő alkalmazáshoz
- Egy, már meglévő alkalmazás komponenseit tudjuk frissíteni
- Hozzá tudjuk adni a JRuby-t egy már meglévő alkalmazáshoz
- Létre tudunk hozni új emulátort / el tudunk indítani egy meglévő emulátort
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:
- gen app: jelzi a Rubotonak, hogy generáljon le egy új Android alkalmazást mindenestől
- --package: az Android package nevét adja meg. A quick_start a végén a Ruboto mappán belüli mappa nevét jelzi, amibe generálódik az új projekt
- --target: megadja, hogy melyik Android verzióra készül a program (API szám szerint)
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.