wiki:Android
Last modified 6 years ago Last modified on 2011-05-17 17:27:28

Androidin ohjelmointia

Ohjelmien tekemiseen Androidille tarvitset AndroidSDK:n, joka löytyy osoitteesta http://developer.android.com/sdk/index.html SDK:n asennus on helppoa, purat vain lataamasi paketin haluamaasi paikkaan ja lisäät sen ajettavien ohjelmien polkuun (ympäristömuuttuja PATH). Windows: lataa ja aja installeri ja asennav vaikka: C:\devel\Android\android-sdk. (Jos valittaa https-jutusta, niin mene Settings-kohtaan ja ruksi http, ja sitten Installed packages ja Update All.)

Kehitys onnistuu pelkällä SDK:lla, mutta on usein mukavampaa käyttäen IDE:ä, joten esimerkiksi Eclipselle löytyy Android-liitännäiset osoitteesta http://developer.android.com/sdk/eclipse-adt.html Asennus tapahtuu perinteisesti lisäämällä Adroid-liitännäisen osoite https://dl-ssl.google.com/android/eclipse/ Eclipsen liitänänislistaan ja suorittamalla asennus. Ohjeet tähän löytyvät edellä mainitulta sivustolta http://developer.android.com/sdk/eclipse-adt.html Huomioi käyttämäsi Eclipse-versio (Ecliipse EE:m kanssa on kuulema ollut ongelmia!)

Lisää asentamasi kehityspaketin polku (tämä pitää tehdä aina kun tekee uuden WorkSpacen)

  Window/Preferences/Android/SDK Location/   C:\devel\Android\android-sdk

Valitse käytettävät Androidin versiot:

  Window/Android SDK Manager/Available Packages ja ruksi haluamasi versiot
  eikä myös Third Partysta Google Inc
  Install Selected Versions 
  ... nyt kestää, mene kahville ...

Lisää virtuaalinen laite:

  Window/Android SDK and AVD Manager/Virtual Devices /New 
    - sopiva nimi
    - targetiksi haluamasi Androidin versio (joka versiolle pitää tehdä oma laite)
    - muistin kooksi esim 10 MiB
    - sopiva näytön koko
    - tarvittaessa Hardware/New ja halauamsi ominaisuudet

1. Androidilaskuri!

Katso myös:

Autolaskuri

Aina kun saa uuden ohjelmointikielen tai kirjaston käyttöönsä, on opettavaista toteuttaa sillä autolaskuri. Androidille käyttäen Eclipseä se menee näin:

  1. Luo uusi Android-projekti:
    • Project Name: Androidilaskuri
    • Build Target: Android 1.5 (versio, joka oli asennettuna kokeilukäytössä olleeseen Samsung Galaxyyn)
    • Application Name: Androidilaskuri
    • Package Name: fi.jyu.mit.android.androidilaskuri
    • Create Activity: Androidilaskuri

Ja sitten klikkaa 'Finish'.

  1. Valitse esille Androidilaskuri -> res -> layout -> main.xml ja saat käyttöösi melko käytettävän GUI-editorin. Lisää TableLayout, siihen kolme TableRow'ta. Ensimmäiselle riville kaksi TextView'tä, toiselle kaksi Buttonia ja kolmannelle yksi Button. TextView't ovat Androideja ja Robotteja, seuraavan rivin Buttonit Androidi ja Robotti, ja viimeinen Button nollaa. Asettele elementtien ympärille vähän tilaa, ja UI on valmis. XML:nä sen pitäisi näyttää jotakuinkin tältä
<?xml version="1.0" encoding="utf-8"?>
<TableLayout android:id="@+id/TableLayout01"
             android:layout_width="fill_parent" android:layout_height="fill_parent"
             xmlns:android="http://schemas.android.com/apk/res/android">
 <TableRow android:id="@+id/TableRow01"
              android:layout_width="wrap_content" android:layout_height="wrap_content">
    <TextView android:text="0" android:id="@+id/Androideja"
              android:layout_width="wrap_content" android:layout_height="wrap_content"
              android:padding="16dip" android:inputType="number">
    </TextView>
    <TextView android:text="0" android:id="@+id/Robotteja"
              android:layout_width="wrap_content" android:layout_height="wrap_content"
              android:padding="16dip" android:inputType="number" android:isScrollContainer="true">
    </TextView>
  </TableRow>
   <TableRow android:id="@+id/TableRow02"
            android:layout_width="wrap_content" android:layout_height="wrap_content">
    <Button android:text="Androidi" android:id="@+id/Androidi"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
            android:layout_marginBottom="5dip" android:layout_marginTop="5dip"
            android:layout_weight="1">
    </Button>
    <Button android:text="Robotti" android:id="@+id/Robotti"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_marginBottom="5dip" android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip" android:layout_marginTop="5dip"
            android:layout_weight="1">
    </Button>
  </TableRow>
   <TableRow android:id="@+id/TableRow03" android:layout_width="wrap_content" android:layout_height="wrap_content">
    <Button android:text="Nollaa" android:id="@+id/Nollaa"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_weight="1">
    </Button>
  </TableRow>
</TableLayout>

Lisäsin tuohon rivityksen, jotta tuo olisi luettavissa. GUI-editori kirjoitti jokaisen TableRow'n sisältöineen yhdelle riville. Ei kuitenkaan kiinnitetä GUI:n ulkoasuun enempää huomiota, vaan siirrytään koodiin. Android tukee käyttäjän muokattavia tyylejä ja teemoja, joten niitä hyödyntäen kukin saa juuri haluamansa Androidilaskuriulkoasun... toivottavasti.

  1. Kirjoitetaan ohjelma, eli muokaa metodi onCreate luokassa
    public class Androidilaskuri extends Activity {
        private TextView and;
        private TextView rob;
    
            /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            and = (TextView)findViewById(R.id.Androideja);
            rob = (TextView)findViewById(R.id.Robotteja);
    
            Button ba = (Button)findViewById(R.id.Androidi);
            ba.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    increment(and);
                }
            });
    
            Button ra = (Button)findViewById(R.id.Robotti);
            ra.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    increment(rob);
                }
            });
    
            Button nol = (Button)findViewById(R.id.Nollaa);
            nol.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    and.setText(Integer.toString(0));
                    rob.setText(Integer.toString(0));
                }
            });
        }
    
        private void increment(TextView tv) {
            int i = Integer.valueOf(tv.getText().toString());
            ++i;
            tv.setText(Integer.toString(i));
        }
    }
    

Android-ohjelmissa ei ole main-metodia, kuten Java-ohjelmissa monesti on. Sen sijaan Android-ohjelmat muodostuvat aktiviteeteista, joita meillä on nyt yksi, Androidilaskuri. Aktiviteetin toiminta koostuu eri vaiheista (katso lisää Androidin kehittäjäsivuilta aliotsikosta Activity Lifecycle), joissa kutsutaan aktiviteetin eri metodeja. Tässä käytämme luomisvaiheessa kutsuttavaa onCreate()-metodia.

Metodissa luodaan GUI aiemmin tehdyn XML-tiedoston mukaan metodikutsulla setContentView(R.layout.main). Luodut komponentit löytyvät vastaavilla nimillä, eli esimerkiksi Robotti-nappia klikkaamalla suoritettava laskurin kasvatus lisätään oliolle Button ba, joka löytyy metodille findViewById() annettavalla tarkenteella R.id.Robotteja.

  1. Luo ajoympäristö Android-ohjelmille valitsemalla Eclipsestä Window > Android SDK and AVD Manager, tai klikkaamalla puhelinmen näköistä ikonia työkalurivillä. Virtual Devices listassa pitää olla ainakin yksi laite-emulaatio, jonka voi luoda klikkaamalla New...-nappia listan oikealla puolella. Anna laitteelle nimi, valitse API-versio (vaikka 1.5, niin pysymme synkassa Samsungin Galaxyn kanssa). SD-kortille kannattaa määritellä kokoa vaikka 512 MB, mutta muut asetukset kelpaavat oletuksinaan.
  1. Aja Androidilaskuri valitsemalla Eclipsen valikoista Run > Run, tai klikkaamalla Run-ikonia työkalurivillä. Eclipse kyselee, miten softa ajetaan, valitse Android Application. Jos tulee virheitä tai muita kummallisuuksia, peruuta niistä pois ja varmista, että äsken muokattu java-luokka on valittuna Eclipsen Package Explorer näkymässä.
  1. Jos haluat ajaa ohjelman Android-puhelimessa (tai muussa Android-laitteessa), pitäisi sen onnistua seuraavasti:
    • Laita Android-puhelin debuggaustilaan, mikä löytyy Galaxyn suomennoksessa kohdasta Säätimet > Sovellukset > Kehitys > USB-virheenkorjaus (kyllä, tuo on käännöskukkanen, sillä USB-virheenkorjaushan viittaa USB-liitännän protokollan mahdolliseen virheenkorjaukseen, eikä häröjen perkaamiseen).
    • Varmista, että puhelimesi osaa jutella tietokoneesi ja käyttöjärjestelmäsi kanssa USB:n yli. Mac OS X toimii ilman asennuksia. Windowsissa joudut asentamaan sopivan ajurin. Ubuntu Linuxissa joudut säätämään USB asetuksia. Tarkat ohjeet löytyvät osoitteesta http://developer.android.com/guide/developing/device.html kohdasta Setting up a Device for Development.
    • Aivan kuten edellä, aja tai debuggaa softa Run > Run tai Run > Debug, ja valitse ajokohteeksi puhelimesi.

Kuva ois kiva, joten:

Androidilaskuri Eclipsellä emulaattorissa ajettuna

Jep, kuvassa on eri koodi kuin esimerkissä. Pahoittelen, etten jaksa enää editoida...


Ja sitten vielä varoituksen sanat: Ylläoleva softa on kirjoitettu ihan vaan koodia suoltaen. Se ei välttämättä tai edes todennäköisesti ole hyvä esimerkki siitä, miten Android-ohejlmia tehdään. Tämä on vain siitä, miten Android-softa saadaan aikaiseksi, ajettua ja debugattua, jopa Android-puhelimessa.

2. Olet Tässä! - Google Maps Androidissa

2.1 Esivalmistelut

Google Mapsia varten sinun tulee ladata myös Google API -emulaattori Eclipseen. Alla olevassa Google Maps -esimerkissä (Olet Tässä!) käytimme versiota 1.5. Tämän lisäksi tarvitset Googlelta konekohtaisen autentikointikoodin, joka kirjataan AndroidManifest.xml -tiedostoon. Koodin saa osoitteesta http://code.google.com/intl/fi/android/maps-api-signup.html (Windows: tarvittava komento:

keytool -list -keystore debug.keystore

annetaan hakemistossa jossa on tiedosto debug.keystore, yleensä käyttäjän hakemistossa (esim: C:\Documents and Settings\vesal\.android). Komento pyytää salasanaa ja siihen tyhjä. Sitten tulostuva avain kopioidaan Googlen sivulle)

GPSn testaamiseen voi käyttää Eclipsen omaa DDMS-palikkaa, joka osaa antaa GPS-tietoja suoraan emulaattorille. Jos sitä ei kuitenkaan saa toimimaan, voi käyttää myös telnetiä. Tällöin on otettava yhteys emulaattoriin komennolla "telnet localhost 5554". Paikkadataa voi antaa telnetin sisällä kahdella tapaa: ensimmäinen antaa yksittäisiä paikkoja (esim. geo fix 23.2353 62.4523) ja toinen osaa antaa pidempiä nmea-datapätkiä (esim. geo nmea $GPGGA,001431.092,0118.2653,N,10351.1359,E,0,00-19.6,M,4.1,M0000*5B).

2.2 Projektin luonti ja ohjelma

  1. Luo uusi Android-projekti:
  • Project Name: OletTassa
  • Build Target: Google APIs 1.5 (vanhin eli todennäköisesti yhteensopivin)
  • Application Name: Olet Tässä!
  • Package Name: fi.jyu.mit.android.gps.oletTassa
  • Create Activity: OletTassa
  1. Järjestelmä luo automaattisesti paljon tiedostoja, mutta keskitytään ensin ulkoasuun, kuten edellisessäkin esimerkissä. Muokattava tiedosto on siis automaattisesti generoitu xml-tiedosto kansiossa OletTassa -> res -> layout -> main.xml.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:orientation="vertical"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">
    
    <TextView 
        android:layout_height="20dip"
        android:layout_width="fill_parent" 
        android:id="@+id/location" 
        android:layout_above="@+id/mapView"
        />

    <com.google.android.maps.MapView 
        android:id="@+id/mapView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:enabled="true"
        android:clickable="true"
        android:apiKey="api_key_here" <!-- Googlen autentikointikoodi tulee tälle riville -->
        />
            
</LinearLayout>
  1. Päivitä AndroidManifest (OletTassa -> AndroidManifest.xml) näyttämään tältä:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="fi.jyu.mit.android.gps.oletTassa" android:versionCode="2"
        android:versionName="1.0.1">
        <application android:label="@string/app_name"
                android:debuggable="false" android:icon="@android:drawable/ic_menu_compass"> <!-- ohjelman ikonin vaihtaminen vapaaehtoista -->
                
                <uses-library android:name="com.google.android.maps" />  <!-- Käytetään karttoja -->

                <activity android:name="OletTassa" android:label="@string/app_name"
                        android:screenOrientation="portrait" android:launchMode="singleTask">
                        <intent-filter>
                                <action android:name="android.intent.action.MAIN" />
                                <category android:name="android.intent.category.LAUNCHER" />
                        </intent-filter>
                </activity>

                
        </application>
        <!-- minimiversio, jolla kartat toimivat -->
        <uses-sdk android:minSdkVersion="3" />
        <!-- Otetaan tarvittavat käyttöluvat GPS- ja internet-palikoille -->
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.INTERNET" />
</manifest> 
  1. Tehdään uusi hakemisto "menu" kansioon "res". Tämän jälkeen luodaan seuraavanlainen valikkotiedosto kansioon OletTassa -> res -> menu -> optionsmenu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:id="@+id/mnuStartStop" android:title="Start/Stop" android:icon="@android:drawable/ic_media_pause"/>
        <item android:id="@+id/mnuExit" android:title="Exit" android:icon="@android:drawable/ic_menu_close_clear_cancel" />
</menu>
  1. Tallenna sivun alalaidassa oleva kuva molli.png kansioon OletTassa -> res -> drawable saadaksesi kustomoidun osoitinkuvan käyttöön.
  1. Itse koodi löytyy OletTassaKoodi-sivulta. Näinkin pieneen ohjelmaan tarvitaan yllättävän valtava määrä import-lauseita, aliohjelmia ja kikkakolmosia. Koodi on kuitenkin kommentoitua ja sen pitäisi olla suhteellisen helppolukuista.
  1. Ohjelma voidaan ajaa emulaattorissa aivan kuten edellinenkin esimerkki, mutta sitä varten täytyy tehdä omanlaisensa emulaattori. Luo uusi emulaattori valitsemalla Eclipsestä Window > Android SDK and AVD Manager, tai klikkaamalla puhelinmen näköistä ikonia työkalurivillä. Luo uusi emulaattori valitsemalla New... ja valitse API-versioksi GoogleAPIs 1.5. Muuten voit toimia kuten ylemmässäkin esimerkissä. Muista käynnistää uusi emulaattorisi ennen ajoyritystä.

Jos sinulla ei näy GoogleAPIs vaihtoehtona, sinun täytyy ladata oikeat päivitykset kohdasta Available Packages.

  1. Valmis ohjelma näyttää ajattaessa jotakuinkin tältä:

Vielä osoitinmölli käytettäväksesi:

Teimme myös ohjelmasta komponenttiversion, jonka toimivuutta on vaikea testata, sillä emulaattorimme menivät rikki. Koodit löytyvät kuitenkin täältä: OletTassaKomponentti ja GoogleMapsActivity. Muut tiedostot kuten yllä.

Bensalaskuri - Tiedon tallentaminen tietokantaan Androidissa

BensaLaskuri

Attachments