Riferimento non risolto: kotlinx


108

Sto provando a provare Kotlin e le estensioni Android di Kotlin in Android Studio. Ho provato questo sia in Android Studio v 1.5.1 su Ubuntu 14.04, sia in Android Studio v 1.5.1 su OS X El Capitan con lo stesso risultato.

Ecco cosa sto facendo:

  1. Installa il plugin Kotlin 1.0.0-beta-35950-IJ141-11
  2. Crea un nuovo progetto Android vuoto
  3. Converti il ​​file MainActivity in Kotlin (tramite help-> findaction-> converti file in kotlin)
  4. Configura il progetto per Kotlin

Vado quindi nel file content_main.xml generato e aggiungo un ID (ciao) per "Hello World!" TextView.

<?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>  

Quindi nella MainActivity convertita aggiungo una riga per impostare TextView. (mostrato sotto). Android Studio quindi mi chiede (tramite alt-invio) di inserire questa riga (mostrata anche sotto)

import kotlinx.android.synthetic.main.content_main.*

Quindi a questo punto sembra tutto a posto

ma poi quando provo a compilare questo ottengo

Unresolved reference: kotlinx
Unresolved reference: kotlinx
Unresolved reference: hello

Si noti che non ho installato il plug-in delle estensioni Android di Kotlin. Fino a un paio di giorni fa questo dovrebbe essere incluso nel plug-in principale ed è contrassegnato come obsoleto. (Infatti se provi a installarlo quando hai l'ultimo plugin, non viene installato nulla di nuovo)

Qualcuno vede cosa sto sbagliando?

Attività principale

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)
    }
}

La mia soluzione era completamente diversa, ho rimosso il supporto del linguaggio Kotlin come ufficiale dal file gradle.properties e ha funzionato di nuovo. In realtà, il file è stato danneggiato e ha alcune stringhe casuali, l'ho risolto tornando a stringhe casuali.
Lalit Fauzdar

Risposte:


189

Aggiungi kotlin-android-extensionsle dipendenze del nostro buildscript:

1. Nel tuo build.gradle a livello di progetto

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

e applica il kotlin-android-extensionsplugin:

2. Nel tuo build.gradle a livello di modulo

apply plugin: 'kotlin-android-extensions'

Risposta originale:

Molto probabilmente è un bug nel plugin Kotlin. Ho segnalato un problema sul loro tracker.


1
È quello che ho fatto ma ho ancora il problema con 1.0.0-beta-3595 :(
E-Kami

Non funziona neanche per me (1.0.0-beta-4589) - ancora qualche soluzione? Ho appena aggiunto un commento al ticket nel bug tracker.
Steffen Funke

11
Ho riscontrato questo problema anche su 1.0.0-beta-4589. Devi anche aggiungere apply plugin: 'kotlin-android-extensions'al tuo file build.gradle
Kio Krofovitch

1
Meglio espresso con una variabile $ kotlin_version:compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
KarolDepka

Nota anche se completi questa risposta, le cache invalidate / il riavvio possono aiutare
Beloo

38

Quando usi Android Studio 2.0 e kotlin 1.0.1-2, ti verrà fuori lo stesso errore. Non puoi configurare le estensioni Android di kotlin nel build.gradle del tuo progetto, devi configurare e le estensioni Android di kotlin in build.gradle di ogni modulo in questo modo:

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"
}

Ancora più importante, anche attraverso il plug-in kotlin inclusa l'estensione kotlin per Android, devi anche configurare le estensioni kotlin-android nel bulid.gradle del tuo modulo in questo modo:

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

Ovviamente, puoi configurare il classpath del plugin kotlin nel file build.gradle del tuo progetto.


1
Nel mio caso (Android Studio 2.1.1, kotlin 1.0.2) l'azione "Configura kotlin nel progetto" ha configurato kotlin nel progetto build.gradle invece che nel modulo build.gradle, e questo ha aiutato.
Ivan Kušt

Controlla il tuo ext.kotlin_versione aggiungi di classpath...cui sopra nel gradle del progetto. E aggiungi i due apply...ad app gradle.
Alston,

33

Non riesco a trovarlo nella documentazione ufficiale , ma devi applicare il plugin aggiungendo quanto segue al tuo build.gradlefile:

apply plugin: 'kotlin-android-extensions'

Sì, penso kotlin-1.0.0-betache sia necessario applicare il plugin, ma non riesco a trovare una fonte per questo! Grazie!
Orgmir,

2
Nota: la documentazione ufficiale è stata aggiornata: kotlinlang.org/docs/tutorials/…
Maxime

1
Richiedi una modifica sulla risposta accettata e aggiungi queste informazioni! :)
Ramon Moraes

La documentazione ufficiale ora mostra un blocco di codice vuoto dove apply plugin: 'kotlin-android-extensions'dovrebbe essere.
Dielson Sales

10

Apparentemente il blocco buildscript contenente la dipendenza kotlin-android-extensions deve trovarsi nel modulo app build.gradle, non in quello di primo livello.


1
Ho pensato che sarebbe stato qualcosa del genere; la maggior parte del mio karma deriva dal rispondere a una domanda graduale con un problema simile.
Ionoclast Brigham

8

Ho scoperto perché il mio non funzionava. I miei blocchi erano fuori posto e spostando il buildscript{}blocco prima dei plugin come segue l'ho fatto funzionare:

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"
}

Questo ha funzionato per me. Sapresti perché questo l'ha risolto?
Joe

L'unica risposta che mostra esattamente dove apply plugin: 'kotlin-android-extensions'deve essere aggiunto ... +1
Zelphir Kaltstahl

Ma perché questo risolverlo?
Mo Hajr

5

aggiungi apply plugin: 'kotlin-android-extensions'a app/buildgradle.

se l'hai già aggiunto, prova a rimuoverlo e sincronizza Gradle, quando la sincronizzazione è completa, quindi aggiungilo di nuovo e sincronizza nuovamente Gradle. Questo lavoro per me.



4

Il problema per me era l'ordine in cui ho applicato i plugin.

È necessario applicare il plug-in kotlin-android prima del plug-in kotlin-android-extensions

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

1

Dopo aver applicato le correzioni sopra menzionate, ho dovuto riavviare Android Studio per farlo funzionare.


0

Ecco come ha funzionato per me. Quando ho configurato per la prima volta Kotlin in Project, ho selezionato la versione 1.1.2-3 anziché 1.1.2-4 e ho aggiunto la seguente riga nel file dell'app build.gradle

apply plugin: 'kotlin-android-extensions'

dopo di che ho sincronizzato la build e ha funzionato come previsto.


0

Ho scoperto di avere il supporto per C ++ e Kotlin allo stesso tempo, il che causava problemi di compilazione.

Quando si avvia un nuovo progetto, assicurarsi che il supporto C ++ sia deselezionato e che il supporto Kotlin sia selezionato. Questo ha risolto il problema per me.


0

Nel mio caso, avevo messo il codice che fa riferimento alla vista in un file companion object. Che stupido..


0

Prova ad aggiungere al blocco delle dipendenze il prossimo:

dependencies {
...
compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.3.2'
...
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.