Kotlin einer vorhandenen App hinzufügen

Android Studio bietet vollständigen Support für Kotlin, sodass Sie Kotlin-Dateien in Ihr Projekt und konvertieren den Java-Sprachcode in Kotlin. Sie können dann alle vorhandenen Tools von Android Studio mit Ihrem Kotlin-Code verwenden. einschließlich automatischer Vervollständigung, Lint-Prüfung, Refaktorierung, Fehlerbehebung und mehr.

Wenn Sie ein neues Projekt starten und Kotlin verwenden möchten, lesen Sie die folgenden Informationen: Projekt erstellen

Beispiele finden Sie in unserer Kotlin-Codebeispiele

Kotlin einem vorhandenen Projekt hinzufügen

So fügen Sie Ihrem Projekt Kotlin hinzu:

  1. Klicken Sie auf Datei > Neu und wählen Sie eine der verschiedenen Android-Vorlagen aus, z. B. als neues leeres Fragment, wie in Abbildung 1 dargestellt. Wenn Sie die Liste nicht sehen, der Vorlagen auswählen, öffnen Sie zuerst das Fenster Projekt und wählen Sie App-Modul.

    <ph type="x-smartling-placeholder">
    </ph> Neues leeres Fragment erstellen
    Abbildung 1. Wählen Sie eine der verfügbaren Vorlagen aus, z. B. „Fragment“. oder Aktivitäten.
  2. Wählen Sie im angezeigten Assistenten Kotlin als Quellsprache aus. Abbildung 2 zeigt das Dialogfeld New Android Activity (Neue Android-Aktivität). eine neue Aktivität zu erstellen.

    <ph type="x-smartling-placeholder">
    </ph> Dialogfeld, in dem Sie Kotlin als Ausgangssprache auswählen können
    Abbildung 2. Das Dialogfeld Neue Android-Aktivität, in dem Sie Wählen Sie Kotlin als Quellsprache aus.
  3. Fahren Sie mit dem Assistenten fort.

Alternativ können Sie auf Datei > Neu > Kotlin-Datei/-Klasse zum Erstellen einer Kotlin-Standarddatei. Wenn diese Option nicht angezeigt wird, öffnen Sie das Fenster Projekt und Wählen Sie das Verzeichnis java aus. Im Fenster New Kotlin File/Class (Neue Kotlin-Datei/-Klasse) können Sie folgende Aktionen ausführen: den Dateinamen definieren und bietet mehrere Auswahlmöglichkeiten für den Dateityp: Datei, Class, Interface, Enum Class oder Object Ihre Entscheidung legt das grundlegende Gerüst fest, das in der neuen Kotlin-Datei für Sie erstellt wird. Wenn Sie Class auswählen, erstellt Android Studio eine neue Kotlin-Quelldatei mit den Name und eine übereinstimmende Klassendefinition. Wenn Sie Interface (Schnittstelle) auswählen, wird eine Schnittstelle angezeigt, in der Datei deklariert ist usw.

Wenn Sie zum ersten Mal eine neue Kotlin-Klasse oder -Datei zu Ihrem direkt ein Projekt erstellen (ohne die Android-Vorlagen verwenden), zeigt Android Studio eine Warnung, dass Kotlin nicht im Projekt konfiguriert ist (siehe Abbildung 3). Sie können Kotlin konfigurieren, indem Sie oben rechts auf Konfigurieren im Editor oder in der Ereignisprotokollbenachrichtigung unten rechts.

<ph type="x-smartling-placeholder">
</ph> Warndialogfeld, in dem Sie aufgefordert werden, Kotlin für Ihre
      Projekt
Abbildung 3: Android Studio zeigt eine Warnung an, wenn Kotlin nicht für Ihr Projekt konfiguriert ist.

Wählen Sie die Option zum Konfigurieren von Kotlin für Alle Module mit Kotlin aus. Dateien, wenn Sie dazu aufgefordert werden, wie in Abbildung 4 gezeigt:

<ph type="x-smartling-placeholder">
</ph> Kotlin-Code für alle Module konfigurieren, die Kotlin-Code enthalten
Abbildung 4: Konfigurieren Sie Kotlin für alle Module, die folgenden Text enthalten: Kotlin-Code.

Sobald Sie auf OK klicken, fügt Android Studio Kotlin zum Klassenpfad Ihres Projekts und wendet das Kotlin-Android-Plug-in auf jedes Modul an, das Kotlin-Dateien enthält. Ihre build.gradle-Dateien sollten in etwa so aussehen:

Cool

// Project build.gradle file.
buildscript {
    ext.kotlin_version = '1.4.10'
    ...
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

Kotlin

// Project build.gradle.kts file.
buildscript {
    extra["kotlin_version"] = "1.4.10"
    ...
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")
    }
}

Cool

// Inside each module using kotlin
plugins {
    ...
    id 'kotlin-android'
}

...

dependencies {
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

Kotlin

// Inside each module using kotlin
plugins {
    ...
    kotlin("android")
}

...

val kotlin_version: String by rootProject.extra

dependencies {
    implementation("androidx.core:core-ktx:1.3.2")
    implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version")
}

Quellorganisation

Neue Kotlin-Dateien werden standardmäßig in src/main/java/ gespeichert. um sowohl Kotlin- als auch Java-Dateien an einem Ort zu sehen. Wenn Sie die Daten Kotlin-Dateien aus Ihren Java-Dateien entfernen, können Sie Stattdessen src/main/kotlin/. In diesem Fall müssen Sie auch Verzeichnis in Ihrem sourceSets wie unten dargestellt:

Cool

android {
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

Kotlin

android {
    sourceSets {
        getByName("main") {
            java.srcDir("src/main/kotlin")
        }
    }
}

Vorhandenen Java-Code in Kotlin-Code konvertieren

Um Java-Code in Kotlin zu konvertieren, öffnen Sie die Java-Datei in Android Studio und wählen Sie Code > Java-Datei in Kotlin-Datei konvertieren Alternativ können Sie auch einen neuen Kotlin-Code erstellen (File > New > Kotlin File/Class) (Datei > Neu > Kotlin-Datei/-Klasse) aus und fügen Sie dann Ihren Java-Code in für diese Datei. Android Studio zeigt dann eine Aufforderung an und bietet an, Ihren Code zu konvertieren. Kotlin-Code ein, wie in Abbildung 5 gezeigt. Klicken Sie zum Umwandeln auf Ja. Sie können optional Klicken Sie auf das Kästchen Dieses Dialogfeld beim nächsten Mal nicht mehr anzeigen, weil dadurch zukünftige Conversions generiert werden. automatisch.

<ph type="x-smartling-placeholder">
</ph> Kotlin-Code für alle Module konfigurieren, die Kotlin-Code enthalten
Abbildung 5: In Android Studio kann Java-Code in Kotlin konvertiert werden.

Codekonvertierung und Null-Zulässigkeit

Durch den Konvertierungsprozess von Android Studio wird funktionell äquivalenter Kotlin-Code erzeugt das kompiliert und ausgeführt wird. Wahrscheinlich müssen Sie jedoch weitere Optimierungen für den konvertierten Code vornehmen. Sie können beispielsweise optimieren, wie verarbeitet der konvertierte Code Typen, für die Nullwerte zulässig sind.

In Android ist es üblich, die Initialisierung von View-Objekten und anderen bis das Fragment oder die Aktivität, an die sie angehängt sind, entsprechenden Lebenszyklusstatus. Vielleicht haben Sie einen Verweis auf eine in einem Ihrer Fragmente einfügen, wie im folgenden Snippet gezeigt:

public class JavaFragment extends Fragment {

    // Null until onCreateView.
    private Button button;

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_content, container,false);

        // Get a reference to the button in the view, only after the root view is inflated.
        button = root.findViewById(R.id.button);

        return root;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        // Not null at this point of time when onViewCreated runs
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ...
            }
        });
    }
}

Auch wenn die Variable „button“ keine NULL-Werte enthält, ist sie für alle praktischen Zwecke sollte niemals null sein, wenn es in diesem Beispiel verwendet wird. Da ihr Wert jedoch nicht die bei der Erstellung zugewiesen wurden, behandelt der generierte Kotlin-Code Button. als Typ, der Nullwerte zulässt, und verwendet den Nicht-Null-Assertion-Operator zum Entpacken der Schaltfläche wenn Sie wie unten gezeigt einen Klick-Listener hinzufügen:

class JavaFragment : Fragment() {

    // Null until onCreateView.
    private var button: Button? = null

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?): View? {
        ...
        // Get a reference to the button in the view, only after the root view is inflated.
        button = root.findViewById(R.id.button)
        ...
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        // Not null at the point of time when onViewCreated fires 
        // but force unwrapped nonetheless
        button!!.setOnClickListener { }
    }
}

Diese Conversion ist in diesem Fall weniger ideal als die Verwendung von lateinit. werden gezwungen, den Schaltflächenverweis mit einer Nicht-Null-Assertion oder einem Safe-Aufruf zu entpacken und zwar an jedem Ort, auf den er zugreifen kann.

In anderen Fällen ist null eine gültige Variablenzuweisung auf Grundlage Ihrer Anwendungsfall der Anwendung, wobei ein Safe-Call-Operator (?.) mit einem beendenden Elvis verwendet wird (?:) ist eine bessere Methode zum sicheren Entpacken des Objekt, das Nullwerte zulässt, oder in einen sinnvollen Standardwert ungleich Null umgewandelt werden. Android Studio haben nicht genügend Informationen, um dies während Conversion-Prozess. Die Standardeinstellung ist zwar eine Assertion, die nicht null ist, Sie sollten aber und den konvertierten Code nach Bedarf anpassen.

Weitere Informationen

Weitere Informationen zur Verwendung von Kotlin- und Java-Code in Ihrem Projekt finden Sie unter Java-Code über Kotlin aufrufen

Weitere Informationen zur Verwendung von Kotlin in Unternehmensszenarien finden Sie unter Kotlin für große Teams verwenden

Informationen zu idiomatischen Kotlin-Wrappern für vorhandene Android APIs finden Sie unter Android KTX