Mar 20, 2016
Sisältö
• Tutustutaan SDK:n sisältöön• Käännöstiedostot• Emulaattori• Käännetään ohjelma emulaattorille• Tutustutaan käytettävään sovelluskehittimeen
SDK:n rakenne
• Hakemistorakenne \Symbian\<versio>\<platformversio>\– Epoc32\
• binäärit, headerit, libraryt• kaikki kääntämiseen ja linkitykseen tarvittava
– Examples\• Symbianin esimerkkikoodeja• Lajiteltu aihealueittain
– Series60Doc• Symbian OS & S60 dokumentaatiota
– Series60Ex• S60 spesifisiä esimerkkikoodeja
– Seris60Tools• Apuohjelmia PC:lle ja päätelaitteelle
\epoc32\
• Release\– Target platform riippuvat binäärit (DLL:t ja lib:t)– Emulaattori: Release\<platform>\EPOC.exe– Emulaattorin z: -aseman juuri: release\<platform>\z\– Käännetyt DLL:t ja niitä vastaavat lib:t -> release\
<platform>\• Include\
– C++ headerit• WINS\
– Emulaattorin c: -aseman juuri: WINS\c\
\epoc32\
• Data\– EPOC.ini - Emulaattorin konfiguraatiotiedosto– EPOC.bmp – Emulaattorin ”skini”
• Build\– Jokaiselle projektille oma alihakemisto– Käännösprosessiin liittyvät tiedostot
• Visual Studion projektifile• Makefile:t• DLL rajapinnan kuvaustiedostot (.def)• Paljon tiedostoja, joista ei tarvitse välittää
Symbian spesifiset lähdekoooditiedostot
• Symbian platformissa on erillaisia normaalista (.cpp & .h) poikkeavia tiedostoja
• Näillä tiedostoilla määritellään erillaisia Symbian platformille ominaisia asioita– Moduulit– MBM-bittikarttatiedostot– MIF-tiedostot (2nd ed FP3->)– Resurssitiedostot
Projektimäärittely (bld.inf)
• Määrittelee Symbian ohjelmisto kokonaisuuden, joka yleensä käännetään kerrallla
• Kokonaisuus koostuu yhdestä tai useammasta moduulista (.dll, .app, .exe)
PRJ_PLATFORMSWINSARMI
PRJ_MMPFILESMyApplication.mmpMyEngine.mmp
• Syntaksi– PRJ_PLATFORMS määrittelee mille kaikille varianteille projekti
käännetään– PRJ_MMPFILES listaa moduulit, jotka kuuluvat projektiin.
Moduulimäärittely (.mmp)
• MMP-tiedosto määrittelee modulin• Syntaksi
– Tuotettavan modulin nimiTARGET MyFunkyLibrary.dll
– Tuotettavan modulin tyyppi (app, dll, tsy, jne...)TARGETTYPE dll
– Tuotettavan modulin UID (unique ID)UID 0x1000008D 0x01098FDC
– Polku, josta lähdekooditiedostot haetaan (huomaa ”..\” koska mmp-tiedosto sijaitsee group\ -hakemistossa)SOURCEPATH ..\FunkySrc
Moduulimäärittely (.mmp)
• Syntaksi– Listataan lähdekooditiedostot (.cpp), jotka käännetään
moduuliinSOURCE CFunkyBase.cpp CGeorgeClinton.cppSOURCE CFunkontainer.cpp
– Listataan ”käyttäjän” headerhakemistot, joihin viitataan #include ”MyHeader.h”USERINCLUDE ..\src ..\inc // private headers
– Listataan ”systeemin” headerhakemistot, joihin viitataan #include <e32std.h>SYSTEMINCLUDE \epoc32\include
– Listataan linkitettävät kirjastotLIBRARY euser.lib cone.lib bafl.lib
– Lisäksi paljon muuta• MMP:n syntaksi määrittely löytyy SDK helpistä
Resurssilähdetiedosto (.rss)
• Resurssitiedostot ovat binääritiedostoja, jotka voivat sisältää mitä tahansa dataa
• Resursseilla voidaan määritellä esim. käyttöliittymä komponenttien sisältö (menut, jne...)
• Resurssitiedostot mahdollistavat laitteen lokalisoinnin• Resurssitiedosto käännetään rss-tiedostosta.• Lisää resursseista ja niiden käytöstä myöhemmillä
harjoituskerroilla...
Resurssiheaderit (.rh, .hrh, .loc)
• .hrh –tiedostot ovat .rss –tiedostojen headereita.– Aivan kuin .cpp <-> .h
• .rh –tiedostot määrittelevät erillaisia resurssistruktuureja (menu, painonappi, ihan mitä vain...)– Luonnollisesti voit myös itse määritellä uusia
resurssistruktuureja• .loc –tiedostot ovat lokalisointia varten. Yleensä
resurssitiedostoon sijoitettavat tekstit määritellään loc-tiedostoissa– loc-tiedosto includoidaan resurssitiedostoa
käännettäessä aivan kuten .hrh-tiedostotkin
Projektin hakemistorakenne
• Symbian OS projektissa lähdetiedostot on jaoteltu ”standardihakemistoihin”
• Platform ei vaadi hakemistoihin jakamista, mutta se helpottaa työskentelyä
• Eri tyyppiset tiedostot helppo löytää, kun tietää mistä etsiä
• Looginen jaottelu– Eri modulien koodit eri hakemistoihin– Helpottaa, jos tarvitsee perehtyä tuntemattomaan
koodiin
\MyProject\
• Group\– Projektin kuvaustiedosto
• bld.inf– Modulien kuvaustiedostot (.mmp)
• MyApp.mmp • MyEngine.mmp• jne...
– Kaikille moduleille yhteiset tiedostot• MyApp.hrh • MyAppConstants.h
– Resurssitiedostot (.rss)• MyApp.rss
\MyProject\
• Aif\– Resurssitiedosto, josta AIF-tiedosto käännetään
• MyAppAif.rss– Muut AIF-tiedostoon liittyvät tiedostot, esim. ikonit
• XXXSrc\– C++ lähdekooditiedostot (.cpp)– Jokaiselle modulille oma Src –hakemisto
• Esim. MyEngineSrc– Sisältää myös modulille sisäisiä headereita
• BWINS/BMARM\– Rajapintamäärittelytiedostot (.def)– Eri varianteille oma hakemisto
\MyProject\
• XxxInc\– Jokaisen modulin headereille oma hakemisto– Esim. MyEngineInc, MyCommsModuleInc– Hakemistoon tulee ainoastaan ne header tiedostot, joiden kuuluu
näkyä modulin ulkopuolelle. Moduulin sisäiset headerit laitetaan modulin Src –hakemistoon.
• CMyEnginePublicAPI.h => MyEngineInc• CMyEngineInternalClass.h => MyEngineSrc
• Data\– Ikonit– Äänet– Sekalainen projektiin liittyvä data
• Doc\– Projektin dokumentaatio
Komentorivi käännöstyökalut
• bldmake– Käytetään kun projekti aloitetaan tai siihen liitetään
uusia moduleja– > bldmake bldfiles
• Luo \epoc32\build\ hakemiston alle tarvittavat hakemistot
• Luo abld.bat:n• abld.bat
– Hoitaa kääntämisen, linkkaamisen, makefile:n teon, .lib filejen generoinnin, jne...
– > abld commands
Emulaattori
• Käynnistyy komentoriviltä EPOC.EXE tai F5/Ctrl-F5 (MSVC)
• Emulaattori on Windows-ohjelma• Käännetyt ohjelmat käyttävät Windowsin
kirjastoja– WINS UDEB kääntö
• Oikealle puhelimelle tehtävä esim. THUMB UREL kääntö jonka jälkeen tehdään SIS-paketti (tai ROM image)
– Näitä ei voi ajaa emulaattorissa– Kurssilla ei tehdä omia imageja
Emulaattori
NavigointiEmulaattorin näppäimet ja niiden merkitysPikanäppäimet:
– § = OK– Alt-1 = Left softkey– Alt-2 = Right softkey– Backspace = C– Home = Application key– Shift = Edit key– 0 – 9 = 0 – 9, kuten puhelimessa
Emulaattori
NavigointiEmulaattorin näppäimet ja niiden merkitysPikanäppäimet:
– § = OK– Alt-1 = Left softkey– Alt-2 = Right softkey– Backspace = C– Home = Application key– Shift = Edit key– 0 – 9 = 0 – 9, kuten puhelimessa
Emulaattori
NavigointiEmulaattorin näppäimet ja niiden merkitysPikanäppäimet:
– § = OK– Alt-1 = Left softkey– Alt-2 = Right softkey– Backspace = C– Home = Application key– Shift = Edit key– 0 – 9 = 0 – 9, kuten puhelimessa
Emulaattori
NavigointiEmulaattorin näppäimet ja niiden merkitysPikanäppäimet:
– § = OK– Alt-1 = Left softkey– Alt-2 = Right softkey– Backspace = C– Home = Application key– Shift = Edit key– 0 – 9 = 0 – 9, kuten puhelimessa
Emulaattori - Options
• Left softkey avaa Options-valikon• Valikosta löytyy ohjelman
lisätoimintoja• Päätoiminnot löytyvät ensimmäisestä
näkymästä
Emulaattori – Ohjelman käynnistys
• OK suorittaa komennon, esim. avaa ohjelman
• Esimerkkinä Phonebook-sovellus• Ohjelmasta poistutaan joko
Options/Exit tai valitsemalla päänäkymästä Exit
Emulaattori – Application key
• Ohjelman voi jättää taustalle painamalla Application keytä
• Pitämällä Application keytä pohjassa saa listan käynnissä olevista sovelluksista (ns. fast swap window)
• Siirtyminen tapahtuu OK-näppäimellä tai Left softkeyllä
Kääntäminen Visual C++:lla Step by step...
• Avaa command prompt (cmd.exe)• Mene ….\series60ex\helloworldplus\group\ –hakemistoon• > bldmake bldfiles
– Hakemistoon ilmestyy abld.bat• > abld makefile vc6
– Luo MSVC++ projektitiedoston \epoc32\build\......\helloworldplust\Group\helloworldplus\WINS –hakemistoon
• Käynnistä Visual Studio• File/Open Workspace -> avaa projektitiedosto helloworldplus.dsw
yllä olevasta hakemistosta• Tarkista että aktiivinen variantti on UDEB
– Build/Set active configuration• Käännä
– Build / Build HelloWorld.app (F7)
Testaaminen emulaattorilla
• Käynnistä emulaattori – Build / Execute (ctrl+F5)– Ensimmäisellä kerralla projektitiedoston luonnin
jälkeen Visual Studiolle pitää kertoa emulaattorin paikka \epoc32\release\wins\udeb\epoc.exe
– Voit käynnistää emulaattorin myös komentoriviltä• Käynnistä HelloWorldPlus emulaattorissa
HelloWorldin muokkaaminen
• Tutustu CHelloWorldPlusAppView–luokan Draw() metodiin• Muokkaa Draw() metodia, niin että tekstin paikka vaihtuu
– ” gc.DrawText( timeAsText, TPoint( 20,20 ) );”• Käännä HelloWorld.app uudelleen ja kokeile muutoksia
emulaattorissa– Huom! Emulaattoria ei tarvitse sammuttaa kääntämisien välillä.– Ei linkkaudu? Sammuta HelloWorldPlus applikaatio
emulaattorissa ja käännä uudelleen• Applikaation menussa olevat tekstit luetaan resurssitiedostosta.
Kokeile muuttaa jotakin menutekstiä.– Data\helloworldplus.loc– Resurssi tiedosto ei käänny? Emulaattori pitää resurssitiedoston
lukittuna vaikkei applikaatio olisikaan käynnissä => emulaattori pitää sammuttaa resurssitiedoston kääntämisen ajaksi.
MSVC – Debuggaus
• Mene CHelloWorldPlusAppUi::HandleCommandL metodiin ja paina F9 = Breakpoint rivillä case EHelloWorldPlusCommand
• Käynnistä emulaattori debug moodissa Visual Studiosta (F5)
• Options/Hello World Plus! Suoritus pysähtyy em. kohtaan• Nyt olemme Debuggerissa ja voimme tutkiskella ohjelman toimintaa
lähemmin!
MSVC – Debuggaus
• F10 = Step over– Suorittaa kursorin kohdalla olevan lausekkeen
• F11 = Step into– ”Astuu sisään” kursorin kohdalla olevaan
lausekkeeseen– Esim. ilmaisujen (expression) tarkastelu
• F5 jatkaa ohjelman suoritusta– Breakpointit jäävät voimaan
• Huom: jos debugattavan koodin lähdekoodia ei ole saatavilla, saat vastaasi assembler-dumppia
• Lopeta debuggaus valitsemalla Debug/Stop debugging (Shift-F5)