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:
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!
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.
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:
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.
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.
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.
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:
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 findViewById
s 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 findViewById
s, 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 TextView
s 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. *.
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.