Koding Funksjonelle Android-apper i Kotlin Komme i gang

Mens det store flertallet av Android-apper er skrevet i Java, er det ingen regel som du ha å bruke Java for Android-utvikling. Det finnes en rekke moderne programmeringsspråk som er designet for å kjøre på Java Virtual Machine (JVM), og et av disse språkene som blir populært i Java-fellesskapet, er Kotlin. 

I den første delen av denne tredelte serien så vi på hva Kotlin er og hva det har å tilby Android-utviklere:

  • Det er 100% utskiftbart med Java, til det punktet der du kan fortsette å bruke eksisterende Java-biblioteker og rammer, og kan til og med bruke en blanding av Java og Kotlin-koden i Android-prosjektene dine. 
  • Syntaxen er designet for å føle seg veldig lik Java, noe som betyr at det bør være ganske enkelt for Java-utviklere å gripe seg til Kotlin-grunnleggende.
  • Den kombinerer funksjoner og konsepter fra både funksjonell og prosessuell programmering.
  • Den støttes godt av Android Studio. 

I denne oppfølgingsveiledningen kommer vi til å komme i gang med en viss Kotlin-utvikling. Når du kommer til slutten av opplæringen, har du opprettet en enkel Android-app som viser en tekstlinje, og er skrevet helt i Kotlin. Du vil også vite hvordan du unngår å måtte skrive en annen findViewById, ved å benytte seg av Kotlins Android-utvidelser.

Men først er det på tide å lære utviklingsmiljøet vårt å snakke et nytt språk!  

Installere Kotlin Plugin i Android Studio

Det aller første du må gjøre er å legge til Kotlin-støtte til Android Studio-installasjonen din.

Før vi begynner, må du sørge for at du kjører den nyeste, stabile versjonen av Android Studio, da du er mer sannsynlig å støte på feil med Kotlin-pluginet på eksperimentelle versjoner av Android Studio. Det er også verdt å åpne SDK Manager og sjekke om oppdateringer er tilgjengelige for noen av pakkene du har installert.

Når du er sikker på at utviklingsmiljøet ditt er oppdatert, er du klar til å installere Kotlin-plugin. Start Android Studio, og du bør se Velkommen til Android Studio vindu - hvis dette vinduet ikke vises, lukk deretter Android Studio helt og gjenoppstart det.

Gi Konfigurer ikon et klikk, og velg deretter plugins fra den etterfølgende rullegardinmenyen.

Klikk på Installer JetBrains plugins ... knapp.

Å velge Kotlin fra menyen, og klikk deretter på den grønne Installere knapp. Du må starte IDE før Kotlin-pluginet blir aktivt, så klikk enten på Start Android Studio på nytt knappen som vises eller startes på nytt IDE manuelt.

Konfigurere prosjektet ditt for å bruke Kotlin

På dette tidspunktet kan din IDE forstå og kjøre Kotlin-kode, men du må fortsatt konfigurere Kotlin hver gang du vil bruke den i et nytt prosjekt. La oss lage et nytt prosjekt og konfigurere det prosjektet for å bruke Kotlin nå. Opprett et nytt prosjekt med de valgene du har valgt, men for enkelhets skyld, velg Tom aktivitet når du blir bedt om det.

Takket være Kotlin-pluginet kan det ikke være enklere å konfigurere et prosjekt som bruker Kotlin: bare velg Verktøy fra Android Studio-verktøylinjen, etterfulgt av Kotlin og Konfigurer Kotlin i prosjektet.

Dette åpner en popup der du kan velge å konfigurere Kotlin for:

  • alle moduler
  • alle moduler som inneholder Kotlin-filer
  • eller en enkelt, navngitt modul

Siden jeg er bare skal bruke Kotlin-koden i prosjektet mitt, jeg har valgt Alle moduler. Du kan også velge hvilken versjon av Kotlin du vil bruke, vanligvis vil dette være den nyeste versjonen.  

Alternativt kan du konfigurere Kotlin ved å velge Hjelp fra menyen i Android Studio, etterfulgt av Finn handling ... I Finn handling bar, begynne å skrive Konfigurer Kotlin i prosjektet, og velg deretter dette alternativet når det vises.

De Konfigurer Kotlin i prosjektet alternativet gjør en rekke tweaks til prosjektet ditt build.gradle filer, så la oss se nærmere på hvordan disse filene har endret seg. Åpne prosjektnivået ditt build.gradle fil - det skal se slik ut:

buildscript // Deklarer versjonen av Kotlin som du bruker. Du vil merke at versjonen av Kotlin er nevnt i både byggeskriptet og i prosjektets kompilere avhengigheter - Versjonsnummeret må være det samme på begge steder // ext.kotlin_version = '1.0.5-2' repositories jcenter ) avhengigheter classpath 'com.android.tools.build:gradle:2.2.2' // Deklarer Kotlin Gradle-plugin som en klassepath avhengighet // classpath "org.jetbrains.kotlin: kotlin-gradle-plugin: $ kotlin_version"  allprojects repositories jcenter () 

Nå, la oss ta en titt på modulnivået ditt build.gradle fil:

søk plugin: 'com.android.application' // Gjelder Kotlin Android plugin // søk plugin: 'kotlin-android' android compileSdkVersion 25 buildToolsVersion "24.0.0" defaultConfig applicationId "com.jessicathornsby.kotlinexample" minSdkVersion 21 targetSdkVersion 21 25 versionCode 1 versjonName "1.0" buildTypes release minifyEnabled false proguardFiles getDefaultProguardFile ('proguard-android.txt'), 'proguard-rules.pro' // // Gradle vil kompilere noen Kotlin-filer finner den i src / main / java, det er god praksis å lagre Kotlin-filene dine i en dedikert Kotlin-katalog. Her kan du se at Kotlin-plugin har lagt til en src / main / kotlin-deklarasjon for å bygge.gradle, men merk at den ikke egentlig har opprettet denne katalogen, så vi lager det selv senere i denne artikkelen // sourceSets  main.java.srcDirs + = 'src / main / kotlin' avhengigheter compile fileTree (dir: 'libs', inkluderer: ['* .jar']) androidTestCompile ('com.android.support.test.espresso: espressokjerne: 2.2.2 ', unntatt gruppe:' com.android.support ', modul:' support-annotations ') kompilere' com.android.support:appcompat-v7:25.0.1 'testCompile' junit: Juni: 4.12 '// Legger til Kotlin Standard Library som prosjektberegning // kompilere "org.jetbrains.kotlin: kotlin-stdlib: $ kotlin_version" repositories mavenCentral ()

Endelig synkroniser du endringene enten ved å klikke Synkroniser nå fra popupen som vises eller ved å klikke på Synkroniser Prosjekt med Gradfiler ikonet i Android Studios verktøylinje.

Konverter alle Java-filer til Kotlin

En funksjon i Kotlin-plugin-programmet som er spesielt nyttig for Kotlin-nybegynnere, er evnen til å konvertere en hvilken som helst Java-kildefil til Kotlin, samtidig som den opprettholder full kjøretidskompatibilitet.

Å kunne se nøyaktig hvordan noen Java-fil vil oversette til Kotlin er ideell for å hjelpe deg med å lære språket, men det kan også komme til nytte i hele Kotlin-reisen din - hvis du noen gang sliter med å finne ut hvordan du skriver noe i Kotlin, kan du alltid skrive det i Java og bruk deretter denne funksjonen til å konvertere koden til Kotlin.

La oss konvertere prosjektet vårt Hoved aktivitet filen til en Kotlin kildefil. Det er to måter å påkalle Kotlin-pluginets Konverter Java-fil til Kotlin-fil handling, så enten:

  • Velg din Hoved aktivitet fil, og velg deretter Kode fra Android Studio menylinje, etterfulgt av Konverter Java-fil til Kotlin-fil.

  • Eller velg Hjelp fra menyen i Android Studio, etterfulgt av Finn handling. I den påfølgende popupen begynner du å skrive Konverter Java-fil til Kotlin-fil og velg deretter dette alternativet når det vises. Merk, du kan også starte Finn handling Sprett opp med en hurtigtast: Hvis du er på Mac, trykker du på Kommando-Skift-A nøkler, og hvis du er på Windows eller Linux, trykk deretter Kontroll-Shift-A.

Vær oppmerksom på at, avhengig av kompleksiteten til koden din, kan konverteringen ikke alltid være 100% nøyaktig, så du bør alltid sjekke konverterte koden for feil.

Din nylig konverterte Hoved aktivitet bør se slik ut:

importer android.support.v7.app.AppCompatActivity import android.os.Bundle class MainActivity: AppCompatActivity () overstyr moro onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState) setContentView (R.layout.activity_main)

Du vil også legge merke til at filens utvidelse har endret seg, forvandlet fra MainActivity.java til MainActivity.kt.

Dette kan være en enkel Aktivitet, men disse få linjene illustrerer noen av hovedtrekkene til Kotlin-syntaksen. Siden dette er vår første titt på noen faktiske Kotlin-koden, la oss velge denne klassen fra hverandre linje for linje.

Forstå Kotlin-syntaks

I Kotlin erklærer du klasser som bruker søkeordet klasse, akkurat som i Java. Men i Kotlin er klasser (og metoder) offentlige og endelige som standard, slik at du kan lage en klasse ved å skrive klasse MainActivity.

Når det gjelder å utvide en klasse, erstatter du Java strekker med et kolon, og deretter vedkall navnet på foreldreklassen. Så i første linje av vår MainActivity.kt fil, vi lager en offentlig, siste klasse kalt Hoved aktivitet som strekker seg AppCompatActivity:

klasse MainActivity: AppCompatActivity () 

Java-ekvivalenten ville være:

offentlig klasse MainActivity utvider AppCompatActivity 

Hvis du vil overstyre en klasse eller metode, må du eksplisitt deklarere det som åpent eller abstrakt.

I Kotlin defineres funksjoner ved hjelp av moro søkeord, etterfulgt av funksjonsnavn og parametere i parentes. I Kotlin kommer funksjonens navn for sin type:

overstyr moro onCreate (savedInstanceState: Bundle?) 

Dette er motsatt av Java, hvor typen kommer før navn:

Offentlig tomgang onCreate (Bundle savedInstanceState)

Vær oppmerksom på at vi ikke angir at denne metoden er endelig, som i Kotlin er alle metodene endelige som standard.

Resten av denne aktiviteten ser ganske ut som Java. Imidlertid illustrerer disse få linjene en annen viktig egenskap ved Kotlin:

super.onCreate (savedInstanceState) setContentView (R.layout.activity_main)

I Kotlin gjør du det ikke trenge for å fullføre linjene dine med semikolon, derav fravær av kolonner i den ovennevnte koden. Du kan legge til kolonner hvis du virkelig vil, men koden din vil være renere og enklere å lese uten dem.

Nå som vi har dechifrert vår MainActivity.kt fil, la oss flytte den til riktig hjem. Siden Kotlin-pluginet gikk i vanskeligheten med å legge til en src / main / kotlin erklæring til vår build.gradle fil, la oss faktisk lage denne katalogen. Dette trinnet er ikke obligatorisk, men å holde Kotlin-filene dine i en dedikert katalog vil gjøre for et mye renere prosjekt.

I Android Studio's Prosjekt Explorer, Ctrl-klikk prosjektet ditt Hoved katalog og velg Ny fra menyen som vises, etterfulgt av Directory. Navn denne katalogen Kotlin og klikk deretter OK.

Hvis du sliter med å oppdage prosjektet ditt hoved- katalog, og åpne den lille rullegardinmenyen øverst i venstre side av Prosjekt Explorer og velg Prosjekt. Du burde nå ikke ha problemer med å spotte det unnvikende src / main katalog.

Når du har opprettet en dedikert Kotlin katalog, dra din MainActivity.kt filen inn i den. Bare vær sikker på å beholde din MainActivity.kt filens eksisterende pakke navn slik at prosjektet ditt fortsatt kjører.

Også, hvis du bare skal bruke Kotlin i dette prosjektet, vil du kanskje slette Java katalog, i stedet for å rote opp prosjektet ditt med tomme og unødvendige kataloger.

Siden Kotlin kompilerer til bytecode, føles et program som er skrevet i Kotlin akkurat det samme som et program som er skrevet i Java, så prøv å installere denne appen på Android-enheten din eller en kompatibel AVD. Det burde føles som om ingenting har endret seg.

Opprette Ekstra Kotlin-filer

Hvis du fortsetter å jobbe med Kotlin i prosjektet ditt, må du før eller senere begynne å lage nye Kotlin-filer i stedet for å konvertere eksisterende Java-enheter.

Å opprette en Kotlin-fil, Ctrl-klikk din app / src / main / Kotlin katalog og velg Ny> Kotlin Aktivitet.

Gi klassen ditt et navn og velg klasse fra rullegardinmenyen. Din nye klasse skal se slik ut:

klasse SecondActivity 

På dette tidspunktet er aktiviteten din tom. For å komme til det punktet der du kan begynne å legge til ekte funksjonalitet, må du fullføre noen få trinn. Først legger du til importere uttalelser du vil bruke. Den eneste forskjellen mellom importeringserklæringer i Kotlin og importerklæringer i Java er at du ikke trenger å fullføre hver linje med et semikolon. For eksempel:

importer android.app.Activity import android.os.Bundle import android.app.Activity

Du må da spesifisere klassen du strekker, ved hjelp av det samme formatet vi så i vår MainActivity.kt fil:

klasse SecondActivity: Aktivitet () 

Deretter må du overstyre aktiviteten onCreate metode:

overstyr moro onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState)

Du kan nå legge til hvilken funksjonalitet du vil ha denne aktiviteten (og i neste avsnitt vil jeg vise deg hvordan du bruker Kotlin-utvidelser til å manipulere UI-widgets, så dette kan være et bra sted å starte), men en siste bit av oppsettet du må fullføre erklærer din Kotlin-aktivitet i din manifest. Dette følger nøyaktig samme formel som deklarerer en ny Java-aktivitet, for eksempel:

   

Kotlin Android Extensions: Wave Farvel til findViewById

Nå som vi har mestret grunnleggende, la oss se nærmere på hva Kotlin er egentlig i stand til å starte med en funksjon som virkelig kan kutte mengden av boilerplate kode du trenger å skrive.

I Android, hver gang du vil jobbe med noen Utsikt I en aktivitet må du bruke findViewById metode for å få en referanse til den visningen. Dette gjør findViewById en av de viktigste, men også en av de mest frustrerende biter av kode som du finner deg selv å skrive om og om igjen, og over igjen i Android-prosjektene dine. De findViewById Metoden er en stor kilde til potensielle feil, og hvis du jobber med flere brukergrensesnittelementer i samme aktivitet, så er alle de findViewByIds kan virkelig rote opp koden din, noe som gjør det vanskelig å lese.

Mens det finnes en rekke biblioteker, som Butter Knife, som tar sikte på å fjerne behovet for findViewByIds, krever disse bibliotekene fortsatt at du annoterer feltene for hver visning, noe som kan føre til feil og fortsatt føles som mye innsats som ville være bedre investert i andre områder av prosjektet ditt.  

Kotlin Android Extensions-plugin (som nylig er innlemmet i standard Kotlin-plugin) lover å lage findViewById en ting fra fortiden, som gir deg fordelene ved de nevnte bibliotekene uten ulempen ved å måtte skrive noen ekstra kode eller sende en ekstra runtime.

Du kan bruke Kotlin-utvidelser for import Utsikt referanser til kildefilene dine. På dette punktet vil Kotlin-pluginet opprette et sett med "syntetiske egenskaper" som gjør at du kan jobbe med disse visningene som om de var en del av aktiviteten din - det betyr at du ikke lenger trenger å bruke findViewById å finne hver Utsikt før du kan jobbe med det.

Hvis du vil bruke utvidelser, må du aktivere Kotlin Android Extensions-pluginet i hver modul, så åpne modulnivået build.gradle fil og legg til følgende:

bruk plugin: 'kotlin-android-extensions'

Synkroniser disse endringene ved å klikke på Synkroniser nå popup. 

Du kan deretter importere referanser til en enkelt Utsikt, bruker følgende format:

importer kotlinx.android.synthetic.main..

For eksempel, hvis din acitivity_main.xml filen inneholdt a TextView med ID textView1, så vil du importere referansen til denne visningen ved å legge til følgende i din Aktivitet:

importer kotlinx.android.synthetic.main.activity_main.textView1

Du vil da kunne få tilgang textView1 innenfor denne aktiviteten ved hjelp av sin ID alene - og uten en findViewById i sikte!

La oss se på utvidelser i aksjon, ved å legge til en TextView til vår activity_main.xml fil, importerer den til vår MainActivity.kt fil, og bruk utvidelser for å angi TextViews tekst programmatisk.  

Begynn med å lage din TextView:

   

Du kan deretter importere TextView inn i din MainActivity.kt, og sett sin tekst kun ved hjelp av sin ID:

importer android.support.v7.app.AppCompatActivity import android.os.Bundle import kotlinx.android.synthetic.main.activity_main.myTextView klasse MainActivity: AppCompatActivity () overstyr moro onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState ) setContentView (R.layout.activity_main) myTextView.setText ("Hello World")

Merk at hvis du vil arbeide med flere widgets fra samme layoutfil, kan du importere hele innholdet i en layoutfil i et fall, ved hjelp av følgende formel:

importer kotlinx.android.synthetic.main..*

For eksempel, hvis du vil importere alle widgets fra din activity_main.xml fil, så legger du til følgende i aktiviteten din:

kotlinx.android.synthetic.main.activity_main. *. 

Konklusjon

I denne andre trenden dekket vi opp å sette opp utviklingsmiljøet ditt for å støtte Kotlin, og så på hvor enkelt det er å konvertere din eksisterende Java-kode til Kotlin. Vi så også på noen av de viktigste egenskapene til Kotlin-syntaksen, og introduserte Kotlin Android-utvidelser i vårt prosjekt. 

I tredje og siste avdrag vil vi se på noen mer avanserte funksjoner i Kotlin-språket som, som en Android-utvikler, bør du finne spesielt nyttig.

  • Forstå samtidighet på Android ved hjelp av HaMeR

    I denne opplæringen vil vi utforske HaMeR (Handler, Message and Runnable) rammeverket, en av de kraftigste samtidige modellene som er tilgjengelige på Android. Du vil ...
    Tin Megali
    Android SDK
  • Kom i gang med Firebase for Android

    Opprette en back-end-server krever et ferdighetssett som de fleste uavhengige apputviklere mangler. Heldigvis er det Firebase, en skybasert plattform som ...
    Ashraff Hathibelagal
    Android SDK
  • Android fra scratch: Maskinvare sensorer

    En av tingene som gjør utviklingen for mobile enheter forskjellig fra andre plattformer, er at en mobiltelefon eller nettbrett er fullpakket med sensorer og ...
    Paul Trebilcox-Ruiz
    Android SDK
  • Kom i gang med en Android App-mal på 60 sekunder

    CodeCanyon har hundrevis av Android app-maler som du kan bruke til å hoppe starte utviklingen din. Denne videoen viser deg hvordan du installerer og tilpasser en ...
    Ashraff Hathibelagal
    Android SDK
  • Ta bilder med din Android-app

    Google Play-butikken har dusinvis av kameraprogrammer, hver av dem gjør det mulig å ta bilder eller gjøre noe unikt med bildene fra ...
    Ashraff Hathibelagal
    Android SDK
  • Praktisk samtidighet på Android med HaMeR

    I denne opplæringen vil vi utforske HaMeR (Handler, Message and Runnable) rammeverket, en av de kraftigste samtidige modellene som er tilgjengelige på Android. Med en…
    Tin Megali
    Android SDK