Mentre la maggior parte delle app Android sono scritte in Java, non c'è una regola per te avere utilizzare Java per lo sviluppo Android. Ci sono una varietà di linguaggi di programmazione moderni progettati per funzionare su Java Virtual Machine (JVM), e uno di questi linguaggi che sta diventando popolare nella comunità Java è Kotlin.
Nella prima parte di questa serie in tre parti, abbiamo esaminato cos'è Kotlin e cosa ha da offrire agli sviluppatori Android:
In questo tutorial di follow-up, inizieremo con lo sviluppo di Kotlin. Nel momento in cui raggiungi la fine del tutorial, avrai creato una semplice app per Android che visualizza una riga di testo - ed è interamente scritta in Kotlin. Saprai anche come evitare di dover scrivere un altro findViewById
, facendo uso delle estensioni Android di Kotlin.
Ma prima, è tempo di insegnare al nostro ambiente di sviluppo come parlare una nuova lingua!
La prima cosa che devi fare è aggiungere il supporto Kotlin alla tua installazione di Android Studio.
Prima di iniziare, assicurati di aver eseguito la versione più recente e stabile di Android Studio, poiché è più probabile che incontriate bug con il plug-in di Kotlin nelle versioni sperimentali di Android Studio. Vale anche la pena aprire l'SDK Manager e verificare se sono disponibili aggiornamenti per i pacchetti che hai installato.
Una volta che sei sicuro che il tuo ambiente di sviluppo sia aggiornato, sei pronto per installare il plugin Kotlin. Avvia Android Studio e dovresti vedere il Benvenuto in Android Studio finestra: se questa finestra non viene visualizzata, chiudi completamente Android Studio e riavvialo.
Dai il Configurazione icona un clic, quindi selezionare plugin dal successivo menu a discesa.
Clicca il Installa i plug-in JetBrains ... pulsante.
Selezionare Kotlin dal menu, quindi fare clic sul verde Installare pulsante. Dovrai riavviare l'IDE prima che il plug-in di Kotlin diventi attivo, quindi fai clic su Riavvia Android Studio pulsante che appare o riavvia manualmente l'IDE.
A questo punto, l'IDE può comprendere ed eseguire il codice Kotlin, ma dovrai comunque configurare Kotlin ogni volta che desideri utilizzarlo in un nuovo progetto. Creiamo un nuovo progetto e configuriamo quel progetto per usare Kotlin adesso. Crea un nuovo progetto con le impostazioni di tua scelta, ma per semplicità, seleziona Attività vuota quando richiesto.
Grazie al plugin Kotlin, la configurazione di un progetto per utilizzare Kotlin non potrebbe essere più semplice: basta selezionare Utensili dalla barra degli strumenti di Android Studio, seguita da Kotlin e Configura Kotlin in Project.
Questo apre un popup in cui puoi scegliere di configurare Kotlin per:
Da quando sono solo ho deciso di usare il codice Kotlin nel mio progetto, ho optato per Tutti i moduli. Puoi anche scegliere la versione di Kotlin che desideri utilizzare, in genere questa sarà l'ultima versione.
In alternativa, puoi configurare Kotlin selezionando Aiuto dalla barra dei menu di Android Studio, seguita da Trova azione ... Nel Trova azione bar, inizia a digitare Configura Kotlin in Project, e quindi selezionare questa opzione quando appare.
Il Configura Kotlin in Project l'opzione apporta una serie di modifiche al tuo progetto build.gradle file, quindi vediamo più da vicino come sono cambiati questi file. Apri il tuo progetto a livello build.gradle file - dovrebbe assomigliare a questo:
buildscript // Dichiara la versione di Kotlin che stai usando. Noterai che la versione di Kotlin è menzionata sia nel classpath del buildscript che nelle dipendenze di compilazione del tuo progetto - il numero di versione deve essere lo stesso in entrambe le posizioni // ext.kotlin_version = '1.0.5-2' repository jcenter ( ) dependencies classpath 'com.android.tools.build:gradle:2.2.2' // Dichiara il plugin Kotlin Gradle come dipendenza da classpath // classpath "org.jetbrains.kotlin: kotlin-gradle-plugin: $ kotlin_version" allprojects repositories jcenter ()
Ora, diamo un'occhiata al tuo livello di modulo build.gradle file:
applica plugin: 'com.android.application' // Applica il plugin per Android di Kotlin // applica il plugin: 'kotlin-android' android compileSdkVersion 25 buildToolsVersion "24.0.0" defaultConfig applicationId "com.jessicathornsby.kotlinexample" minSdkVersion 21 targetSdkVersion 25 versionCode 1 versionName "1.0" buildTypes release minifyEnabled false proguardFiles getDefaultProguardFile ('proguard-android.txt'), 'proguard-rules.pro' // Anche se Gradle compilerà tutti i file Kotlin che trova in src / main / java, è buona pratica memorizzare i file Kotlin in una directory Kotlin dedicata. Qui, puoi vedere che il plugin Kotlin ha aggiunto una dichiarazione src / main / kotlin a build.gradle, ma nota che non ha effettivamente creato questa directory, quindi la creeremo noi stessi più avanti in questo articolo // sourceSets main.java.srcDirs + = 'src / main / kotlin' dependencies compile fileTree (dir: 'libs', include: ['* .jar']) androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2 ', exclude group:' com.android.support ', module:' support-annotations ') compila' com.android.support:appcompat-v7:25.0.1 'testCompile' junit: junit: 4.12 '// Aggiunge la libreria standard di Kotlin come dipendenza del progetto // compila "org.jetbrains.kotlin: kotlin-stdlib: $ kotlin_version" repository mavenCentral ()
Infine, sincronizza le modifiche facendo clic Sincronizza ora dal popup che appare o facendo clic sul Sincronizza il progetto con i file Gradle icona nella barra degli strumenti di Android Studio.
Una caratteristica del plugin Kotlin che è particolarmente utile per i nuovi arrivati di Kotlin è la sua capacità di convertire qualsiasi file sorgente Java in Kotlin, mantenendo al contempo la piena compatibilità di runtime.
Essere in grado di vedere esattamente come qualunque Il file Java potrebbe tradursi in Kotlin è l'ideale per aiutarti a imparare la lingua, ma può anche essere utile in tutto il tuo viaggio Kotlin: se non riesci a capire come scrivere qualcosa in Kotlin, puoi sempre scrivere in Java e quindi utilizzare questa funzione per convertire quel codice in Kotlin.
Trasformiamo il nostro progetto Attività principale file in un file sorgente di Kotlin. Ci sono due modi per invocare i plugin di Kotlin Converti file Java in file Kotlin azione, quindi:
Seleziona il tuo Attività principale file, quindi selezionare Codice dalla barra dei menu di Android Studio, seguita da Converti file Java in file Kotlin.
O selezionare Aiuto dalla barra dei menu di Android Studio, seguita da Trova azione. Nel popup successivo, inizia a digitare Convertire il file Java nel file Kotlin e quindi selezionare questa opzione quando appare. Nota, puoi anche lanciare il Trova azione popup con una scorciatoia da tastiera: se sei su un Mac, premi il tasto Comando-Maiuscole-A chiavi, e se sei su Windows o Linux, quindi premere Control-Shift-A.
Tieni presente che, a seconda della complessità del tuo codice, la conversione potrebbe non essere sempre accurata al 100%, quindi dovresti sempre controllare il codice convertito per gli errori.
Il tuo nuovo convertito Attività principale dovrebbe assomigliare a questo:
import android.support.v7.app.AppCompatActivity import android.os.Bundle class MainActivity: AppCompatActivity () override fun onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState) setContentView (R.layout.activity_main)
Noterai anche che l'estensione del file è cambiata, trasformandosi da MainActivity.java a MainActivity.kt.
Questo potrebbe essere un semplice Attività
, ma queste poche righe illustrano alcune caratteristiche chiave della sintassi di Kotlin. Dato che questo è il nostro primo sguardo ad un vero codice Kotlin, scegliamo questa classe a parte una riga dopo l'altra.
In Kotlin, dichiari le classi usando la parola chiave classe
, esattamente come in Java. Tuttavia, in Kotlin, le classi (e i metodi) sono pubblici e finali di default, quindi puoi creare una classe semplicemente scrivendo classe MainActivity
.
Quando si tratta di estendere una classe, si sostituiscono Java si estende
con due punti, quindi collegare il nome della classe genitore. Quindi nella prima riga del nostro MainActivity.kt file, stiamo creando una classe pubblica finale chiamata Attività principale quello si estende AppCompatActivity
:
class MainActivity: AppCompatActivity ()
L'equivalente Java sarebbe:
la classe pubblica MainActivity estende AppCompatActivity
Se desideri sovrascrivere una classe o un metodo, dovrai dichiararlo esplicitamente come aperto o astratto.
In Kotlin, le funzioni sono definite usando divertimento
parola chiave, seguita dal nome della funzione e dai parametri tra parentesi. In Kotlin, il nome della funzione viene prima del suo tipo:
override fun onCreate (savedInstanceState: Bundle?)
Questo è l'opposto di Java, dove il tipo viene prima del nome:
public void onCreate (Bundle savedInstanceState)
Nota che non stiamo specificando che questo metodo è definitivo, poiché in Kotlin tutti i metodi sono definitivi per impostazione predefinita.
Il resto di questa attività è simile a Java. Tuttavia, queste poche righe illustrano un'altra caratteristica chiave di Kotlin:
super.onCreate (savedInstanceState) setContentView (R.layout.activity_main)
A Kotlin non lo fai bisogno per finire le linee con punto e virgola, quindi l'assenza di due punti nello snippet sopra. Puoi aggiungere i due punti se lo desideri, ma il codice sarà più pulito e più facile da leggere senza di essi.
Ora che abbiamo decifrato il nostro MainActivity.kt file, portiamolo nella sua vera casa. Dal momento che il plugin Kotlin ha avuto il problema di aggiungere un src / main / Kotlin dichiarazione al nostro build.gradle file, creiamo effettivamente questa directory. Questo passaggio non è obbligatorio, ma mantenere i file Kotlin in una directory dedicata renderà un progetto molto più pulito.
In Android Studio Project Explorer, Premuto il tasto Control il tuo progetto Principale directory e selezionare Nuovo dal menu che appare, seguito da elenco. Nome questa directory Kotlin e quindi fare clic ok.
Se stai lottando per individuare il tuo progetto principale directory, quindi apri il piccolo menu a discesa in alto a sinistra del Project Explorer e selezionare Progetto. Ora non dovresti avere problemi a individuare questo sfuggente src / main elenco.
Una volta creato un dedicato Kotlin directory, trascina il tuo MainActivity.kt file in esso. Assicurati di conservare il tuo MainActivity.kt il nome del pacchetto esistente del file in modo che il progetto sia ancora in esecuzione.
Inoltre, se utilizzerai Kotlin in questo progetto, potresti voler eliminare il file Giava directory, piuttosto che ingombrare il tuo progetto con directory vuote e non necessarie.
Dal momento che Kotlin si compila in bytecode, un'applicazione scritta in Kotlin sembra esattamente la stessa di un'applicazione scritta in Java, quindi prova ad installare questa app sul tuo dispositivo Android o su un AVD compatibile: dovrebbe sembrare che nulla sia cambiato.
Se continui a lavorare con Kotlin nel tuo progetto, prima o poi avrai bisogno di iniziare a creare nuovi file Kotlin invece di convertire semplicemente quelli Java esistenti.
Per creare un file Kotlin, Premuto il tasto Control il tuo app / src / main / Kotlin directory e selezionare Nuovo> Attività Kotlin.
Dai un nome alla tua classe e seleziona classe dal menu a discesa. La tua nuova classe dovrebbe assomigliare a questo:
class SecondActivity
A questo punto, la tua attività è vuota. Per arrivare al punto in cui è possibile iniziare ad aggiungere alcune funzionalità reali, è necessario completare alcuni passaggi. In primo luogo, aggiungi il importare
dichiarazioni che si desidera utilizzare. L'unica differenza tra le istruzioni di importazione in Kotlin e le istruzioni di importazione in Java è che non è necessario terminare ogni riga con un punto e virgola. Per esempio:
importare android.app.Activity import android.os.Bundle import android.app.Activity
Dovrai quindi specificare la classe che stai estendendo, utilizzando lo stesso formato che abbiamo visto nella nostra MainActivity.kt file:
class SecondActivity: Activity ()
Successivamente, è necessario ignorare le attività onCreate
metodo:
override fun onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState)
Ora puoi aggiungere qualsiasi funzionalità tu voglia a questa attività (e nella prossima sezione, ti mostrerò come usare le estensioni di Kotlin per manipolare i widget dell'interfaccia utente, quindi questo potrebbe essere un buon punto di partenza), ma un ultimo bit di configurazione devi completare è dichiarare la tua attività Kotlin nel tuo Manifesto. Ciò segue esattamente la stessa formula della dichiarazione di una nuova attività Java, ad esempio:
findViewById
Ora che abbiamo padroneggiato le basi, diamo un'occhiata più da vicino a cosa sia Kotlin veramente in grado di iniziare con una funzionalità che può davvero ridurre la quantità di codice boilerplate che è necessario scrivere.
In Android, ogni volta che vuoi lavorare con qualsiasi vista
in un'attività, è necessario utilizzare il findViewById
metodo per ottenere un riferimento a quella vista. Questo fa findViewById
uno dei più importanti, ma anche uno dei bit più frustranti del codice che ti ritroveresti a scrivere più e più volte, e al di sopra di di nuovo nei tuoi progetti Android. Il findViewById
il metodo è un'enorme fonte di potenziali bug e se stai lavorando con più elementi dell'interfaccia utente nella stessa attività, allora tutti quelli findViewById
s può davvero ingombrare il tuo codice, rendendolo difficile da leggere.
Mentre ci sono un certo numero di librerie, come Butter Knife, che mirano a rimuovere la necessità di findViewById
s, queste librerie richiedono ancora di annotare i campi per ciascuna vista, il che può portare a errori e sembra ancora un grande sforzo che sarebbe meglio investire in altre aree del progetto.
Il plug-in Kotlin per Android Extensions (che è stato recentemente incorporato nel plug-in standard di Kotlin) promette di fare findViewById
una cosa del passato, offrendoti i vantaggi delle librerie citate senza l'inconveniente di dover scrivere codice aggiuntivo o spedire un runtime aggiuntivo.
Puoi usare le estensioni di Kotlin per importare vista
riferimenti nei tuoi file sorgente. A questo punto il plugin Kotlin creerà una serie di "proprietà sintetiche" che ti consentiranno di lavorare con queste viste come se fossero parte della tua attività, in particolare, questo significa che non devi più usare findViewById
per individuare ciascuno vista
prima che tu possa lavorare con esso.
Per utilizzare le estensioni, devi abilitare il plug-in Kotlin Android Extensions in ogni modulo, quindi apri il tuo livello di modulo build.gradle file e aggiungere il seguente:
applica il plugin: "kotlin-android-extensions"
Sincronizza queste modifiche facendo clic su Sincronizza ora apparire.
È quindi possibile importare i riferimenti a un singolo vista
, utilizzando il seguente formato:
importare kotlinx.android.synthetic.main..
Ad esempio, se il tuo acitivity_main.xml il file contiene a TextView
con l'ID textView1
, quindi devi importare il riferimento a questa vista aggiungendo quanto segue al tuo Attività
:
import kotlinx.android.synthetic.main.activity_main.textView1
Saresti quindi in grado di accedere textView1
all'interno di questa attività usando solo il suo ID e senza a findViewById
intuizione!
Diamo un'occhiata alle estensioni in azione, aggiungendo a TextView
a noi activity_main.xml file, importandolo nel nostro MainActivity.kt file e utilizzando le estensioni per impostare il TextView
Il testo è programmaticamente.
Inizia creando il tuo TextView
:
È quindi possibile importare il TextView
nel tuo MainActivity.kt, e imposta il suo testo usando solo il suo ID:
import android.support.v7.app.AppCompatActivity import android.os.Bundle import kotlinx.android.synthetic.main.activity_main.myTextView class MainActivity: AppCompatActivity () override fun onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState ) setContentView (R.layout.activity_main) myTextView.setText ("Hello World")
Nota, se vuoi lavorare con più widget dallo stesso file di layout, puoi importare l'intero contenuto di un file di layout in un colpo solo, usando la seguente formula:
importare kotlinx.android.synthetic.main..*
Ad esempio, se volessi importare tutti i widget dal tuo activity_main.xml file, quindi aggiungerai quanto segue alla tua attività:
kotlinx.android.synthetic.main.activity_main. *.
In questa seconda parte, abbiamo coperto la configurazione del tuo ambiente di sviluppo per supportare Kotlin, e ho osservato quanto sia facile convertire il tuo codice Java esistente in Kotlin. Abbiamo anche esaminato alcune delle principali caratteristiche della sintassi di Kotlin e introdotto le estensioni Android Kotlin nel nostro progetto.
Nella terza e ultima puntata, vedremo alcune funzionalità più avanzate del linguaggio Kotlin che, come sviluppatore Android, dovresti trovare particolarmente utile.