Ich versuche, Kotlin und die Kotlin Android-Erweiterungen in Android Studio auszuprobieren. Ich habe dies sowohl in Android Studio v 1.5.1 unter Ubuntu 14.04 als auch in Android Studio v 1.5.1 unter OS X El Capitan mit dem gleichen Ergebnis versucht.
Folgendes mache ich:
- Ich installiere das Kotlin Plugin 1.0.0-beta-35950-IJ141-11
- Erstellen Sie ein neues leeres Android-Projekt
- Konvertieren Sie die MainActivity-Datei in Kotlin (über help-> findaction-> Datei in kotlin konvertieren)
- Konfigurieren Sie das Projekt für Kotlin
Ich gehe dann in die generierte Datei content_main.xml und füge eine ID (Hallo) für die "Hallo Welt!" Hinzu. Textübersicht.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.gmail.npnster.mykotlinfirstproject.MainActivity"
tools:showIn="@layout/activity_main">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:id="@+id/hello"
/>
</RelativeLayout>
Dann füge ich in der konvertierten MainActivity eine Zeile hinzu, um die Textansicht festzulegen. (siehe unten). Android Studio fordert mich dann (über Alt-Enter) auf, diese Zeile einzufügen (siehe auch unten).
import kotlinx.android.synthetic.main.content_main.*
An diesem Punkt scheint also alles in Ordnung zu sein
aber wenn ich dann versuche, dies zu kompilieren, bekomme ich
Unresolved reference: kotlinx
Unresolved reference: kotlinx
Unresolved reference: hello
Beachten Sie, dass ich das Kotlin Android-Erweiterungs-Plugin nicht installiert habe. Seit ein paar Tagen soll dies nun im Haupt-Plug-In enthalten sein und ist als veraltet markiert. (Wenn Sie versuchen, es zu installieren, wenn Sie das neueste Plugin haben, wird nichts Neues installiert.)
Hat jemand gesehen, was ich falsch mache?
Hauptaktivität
import android.os.Bundle
import android.support.design.widget.FloatingActionButton
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.Toolbar
import android.view.View
import android.view.Menu
import android.view.MenuItem
import kotlinx.android.synthetic.main.content_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toolbar = findViewById(R.id.toolbar) as Toolbar
setSupportActionBar(toolbar)
print("setting text view value to hey")
hello.text = "hey"
val fab = findViewById(R.id.fab) as FloatingActionButton
fab.setOnClickListener { view -> Snackbar.make(view, "Replace this with your own action", Snackbar.LENGTH_LONG).setAction("Action", null).show() }
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.menu_main, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
val id = item.itemId
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true
}
return super.onOptionsItemSelected(item)
}
}
Antworten:
Fügen
kotlin-android-extensions
Sie die Abhängigkeiten unseres Buildskripts hinzu:1. In Ihrem build.gradle auf Projektebene
und wende das
kotlin-android-extensions
Plugin an:2. In Ihrem build.gradle auf Modulebene
Ursprüngliche Antwort:
Höchstwahrscheinlich ist es ein Fehler im Kotlin-Plugin. Ich habe ein Problem auf ihrem Tracker eingereicht .
quelle
apply plugin: 'kotlin-android-extensions'
zu Ihrer build.gradle-Datei hinzufügencompile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
Wenn Sie Android Studio 2.0 und Kotlin 1.0.1-2 verwenden, werden Sie das gleiche Problem feststellen. Sie können kotlin android-Erweiterungen nicht in build.gradle Ihres Projekts konfigurieren. Sie müssen kotlin android-Erweiterungen in build.gradle jedes Moduls wie folgt konfigurieren:
Selbst wenn das Kotlin-Plugin die Kotlin-Android-Erweiterung enthält, müssen Sie die Kotlin-Android-Erweiterungen im bulid.gradle Ihres Moduls wie folgt konfigurieren:
Natürlich können Sie den Klassenpfad des Kotlin-Plugins im build.gradle Ihres Projekts konfigurieren.
quelle
ext.kotlin_version
und fügen Sieclasspath...
oben im Projekt Gradle. Und fügen Sie die beidenapply...
zu App Gradle hinzu.Ich kann es nicht in der offiziellen Dokumentation finden , aber Sie müssen das Plugin anwenden, indem Sie Folgendes zu Ihrer
build.gradle
Datei hinzufügen :quelle
kotlin-1.0.0-beta
Sie das Plugin anwenden, aber ich kann keine Quelle dafür finden! Vielen Dank!apply plugin: 'kotlin-android-extensions'
sollte.Der Buildscript-Block, der die Abhängigkeit von Kotlin-Android-Erweiterungen enthält, muss sich anscheinend im App-Modul build.gradle befinden, nicht im Top-Level-Block.
quelle
Ich fand heraus, warum meine nicht funktionierte. Meine Blöcke wurden verlegt und indem
buildscript{}
ich den Block wie folgt vor die Plugins verschob, funktionierte er:quelle
apply plugin: 'kotlin-android-extensions'
hinzugefügt werden müssen ... +1hinzufügen
apply plugin: 'kotlin-android-extensions'
inapp/buildgradle
.Wenn Sie es bereits hinzugefügt haben, versuchen Sie, es zu entfernen und Gradle zu synchronisieren. Wenn die Synchronisierung abgeschlossen ist, fügen Sie es wieder hinzu und synchronisieren Sie Gradle erneut. Diese Arbeit für mich.
quelle
Das Entfernen des folgenden Imports hat das Problem für mich behoben.
quelle
Das Problem für mich war die Reihenfolge, in der ich die Plugins angewendet habe.
Sie müssen das Kotlin-Android-Plugin vor dem Kotlin-Android-Erweiterungs-Plugin anwenden
quelle
Nachdem ich die oben genannten Korrekturen angewendet hatte, musste ich Android Studio neu starten, damit es funktioniert.
quelle
So hat es bei mir funktioniert. Als ich Kotlin zum ersten Mal in Project konfiguriert habe, habe ich die Version 1.1.2-3 anstelle von 1.1.2-4 ausgewählt und die folgende Zeile in die App-Datei build.gradle eingefügt
Danach habe ich den Build synchronisiert und es hat wie erwartet funktioniert.
quelle
Ich fand heraus, dass ich gleichzeitig Unterstützung für C ++ und Kotlin hatte, was zu Buildproblemen führte.
Stellen Sie beim Starten eines neuen Projekts sicher, dass die C ++ - Unterstützung deaktiviert und die Kotlin-Unterstützung aktiviert ist. Das hat das Problem für mich behoben.
quelle
In meinem Fall hatte ich den Code, der auf die Ansicht verweist, in a eingefügt
companion object
. Wie albern..quelle
Bitte versuchen Sie das nächste Mal zum Abhängigkeitsblock hinzuzufügen:
quelle