Ungelöste Referenz: Kotlinx


108

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:

  1. Ich installiere das Kotlin Plugin 1.0.0-beta-35950-IJ141-11
  2. Erstellen Sie ein neues leeres Android-Projekt
  3. Konvertieren Sie die MainActivity-Datei in Kotlin (über help-> findaction-> Datei in kotlin konvertieren)
  4. 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)
    }
}

Meine Lösung war völlig anders, ich habe die Kotlin-Sprachunterstützung als offiziell aus der Datei gradle.properties entfernt und es hat wieder funktioniert. Tatsächlich wurde die Datei beschädigt und enthält einige zufällige Zeichenfolgen. Ich habe sie behoben, indem ich zu zufälligen Zeichenfolgen zurückgekehrt bin.
Lalit Fauzdar

Antworten:


188

Fügen kotlin-android-extensionsSie die Abhängigkeiten unseres Buildskripts hinzu:

1. In Ihrem build.gradle auf Projektebene

buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}

und wende das kotlin-android-extensionsPlugin an:

2. In Ihrem build.gradle auf Modulebene

apply plugin: 'kotlin-android-extensions'

Ursprüngliche Antwort:

Höchstwahrscheinlich ist es ein Fehler im Kotlin-Plugin. Ich habe ein Problem auf ihrem Tracker eingereicht .


1
Das habe ich getan, aber ich bekomme immer noch das Problem mit 1.0.0-beta-3595 :(
E-Kami

Funktioniert auch bei mir nicht (1.0.0-beta-4589) - noch eine Lösung? Fügte gerade einen Kommentar zum Ticket im Bug-Tracker hinzu.
Steffen Funke

11
Ich hatte auch dieses Problem auf 1.0.0-Beta-4589. Sie müssen auch apply plugin: 'kotlin-android-extensions'zu Ihrer build.gradle-Datei hinzufügen
Kio Krofovitch

1
Besser ausgedrückt mit einer $ kotlin_version-Variablen:compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
KarolDepka

Beachten Sie auch, wenn Sie diese Antwort ausfüllen, die ungültigen Caches / Neustart kann helfen
Beloo

38

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:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

buildscript {
    ext.kotlin_version = '1.0.1-2'
    repositories {
        jcenter()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}

android {
    compileSdkVersion 23
    buildToolsVersion "24.0.0 rc2"

    defaultConfig {
        applicationId "com.dazd.kotlindemo"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {
       main.java.srcDirs += 'src/main/kotlin'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

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:

...
apply plugin: 'kotlin-android-extensions'
...
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"

Natürlich können Sie den Klassenpfad des Kotlin-Plugins im build.gradle Ihres Projekts konfigurieren.


1
In meinem Fall (Android Studio 2.1.1, kotlin 1.0.2) hat die Aktion "Kotlin in Projekt konfigurieren" kotlin in project build.gradle anstelle von modul build.gradle konfiguriert, und dies hat geholfen.
Ivan Kušt

Überprüfen Sie Ihre ext.kotlin_versionund fügen Sie classpath...oben im Projekt Gradle. Und fügen Sie die beiden apply...zu App Gradle hinzu.
Alston

33

Ich kann es nicht in der offiziellen Dokumentation finden , aber Sie müssen das Plugin anwenden, indem Sie Folgendes zu Ihrer build.gradleDatei hinzufügen :

apply plugin: 'kotlin-android-extensions'

Ja, ich denke seit dem müssen kotlin-1.0.0-betaSie das Plugin anwenden, aber ich kann keine Quelle dafür finden! Vielen Dank!
Orgmir

2
Hinweis: Die offizielle Dokumentation wurde aktualisiert: kotlinlang.org/docs/tutorials/…
Maxime

1
Fordern Sie eine Bearbeitung über die akzeptierte Antwort an und fügen Sie diese Informationen hinzu! :)
Ramon Moraes

Die offizielle Dokumentation zeigt nun einen leeren Codeblock, in dem sich der befinden apply plugin: 'kotlin-android-extensions'sollte.
Dielson Sales

10

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.


1
Ich dachte, es wäre so etwas; Der größte Teil meines Karmas besteht darin, eine Gradle-Frage mit einem ähnlichen Problem zu beantworten.
Ionoclast Brigham

8

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:

buildscript {
    ext.kotlin_version = '1.0.0-beta-3595'
    ext.anko_version = '0.8.1'

    repositories {
        jcenter()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.kotlin"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile "org.jetbrains.anko:anko-sdk15:$anko_version"
    compile "org.jetbrains.anko:anko-support-v4:$anko_version"
}

Das hat bei mir funktioniert. Würdest du zufällig wissen, warum das das Problem behoben hat?
Joe

Die einzige Antwort zeigt genau, wo die apply plugin: 'kotlin-android-extensions'hinzugefügt werden müssen ... +1
Zelphir Kaltstahl

Aber warum das beheben?
Mo Hajr

5

hinzufügen apply plugin: 'kotlin-android-extensions'in app/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.



4

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

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

1

Nachdem ich die oben genannten Korrekturen angewendet hatte, musste ich Android Studio neu starten, damit es funktioniert.


0

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

apply plugin: 'kotlin-android-extensions'

Danach habe ich den Build synchronisiert und es hat wie erwartet funktioniert.


0

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.


0

In meinem Fall hatte ich den Code, der auf die Ansicht verweist, in a eingefügt companion object. Wie albern..


0

Bitte versuchen Sie das nächste Mal zum Abhängigkeitsblock hinzuzufügen:

dependencies {
...
compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.3.2'
...
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.