Referencia sin resolver: kotlinx


108

Estoy intentando probar Kotlin y las extensiones de Android de Kotlin en Android Studio. Probé esto tanto en Android Studio v 1.5.1 en Ubuntu 14.04 como en Android Studio v 1.5.1 en OS X El Capitan con el mismo resultado.

Esto es lo que estoy haciendo:

  1. Instalo el complemento Kotlin 1.0.0-beta-35950-IJ141-11
  2. Crea un nuevo proyecto de Android en blanco
  3. Convierta el archivo MainActivity a Kotlin (a través de ayuda-> findaction-> convertir archivo a kotlin)
  4. Configurar el proyecto para Kotlin

Luego entro en el archivo content_main.xml generado y agrego una identificación (hola) para el "¡Hola mundo!" Vista de texto.

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

Luego, en la MainActivity convertida, agrego una línea para establecer TextView. (mostrado a continuación). Android Studio me pide (a través de alt-enter) que inserte esta línea (también se muestra a continuación)

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

Entonces en este punto todo parece estar bien

pero luego, cuando trato de compilar esto, obtengo

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

Tenga en cuenta que Yo no instalo la Kotlin Android extensiones plugin. A partir de hace un par de días, se supone que ahora está incluido en el complemento principal y está marcado como obsoleto. (De hecho, si intenta instalarlo cuando tiene el último complemento, no se instala nada nuevo)

¿Alguien ve lo que estoy haciendo mal?

Actividad principal

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

Mi solución fue completamente diferente, eliminé el soporte de idioma Kotlin como oficial del archivo gradle.properties y funcionó nuevamente. En realidad, el archivo se corrompió y tiene algunas cadenas aleatorias, lo arreglé volviendo a cadenas aleatorias.
Lalit Fauzdar

Respuestas:


189

Agregue kotlin-android-extensionslas dependencias de nuestro buildscript:

1. En su build.gradle a nivel de proyecto

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

y aplicar el kotlin-android-extensionscomplemento:

2. En su build.gradle a nivel de módulo

apply plugin: 'kotlin-android-extensions'

Respuesta original:

Lo más probable es que sea un error en el complemento Kotlin. Presenté un problema en su rastreador.


1
Eso es lo que hice, pero sigo teniendo el problema con 1.0.0-beta-3595 :(
E-Kami

Tampoco me funciona (1.0.0-beta-4589), ¿alguna solución todavía? Acabo de agregar un comentario al ticket en el rastreador de errores.
Steffen Funke

11
También tuve este problema en 1.0.0-beta-4589. También debe agregar apply plugin: 'kotlin-android-extensions'a su archivo build.gradle
Kio Krofovitch

1
Mejor expresado con una variable $ kotlin_version:compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
KarolDepka

También tenga en cuenta que si completa esta respuesta, la invalidación de cachés / reinicio puede ayudar
Beloo

38

Cuando usa Android Studio 2.0 y kotlin 1.0.1-2, obtendrá el mismo error. No puede configurar las extensiones de Android kotlin en build.gradle de su proyecto, necesita configurar y las extensiones de Android kotlin en build.gradle de cada módulo de esta manera:

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

Lo más importante, incluso a través del complemento kotlin que incluye la extensión kotlin para Android, también necesita configurar las extensiones kotlin-android-extensions en el bulid.gradle de su módulo de esta manera:

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

Por supuesto, puede configurar la ruta de clase del complemento kotlin en el archivo build.gradle de su proyecto.


1
En mi caso (Android Studio 2.1.1, kotlin 1.0.2) la acción "Configurar kotlin en el proyecto" configuró kotlin en el proyecto build.gradle en lugar de build.gradle del módulo, y esto ayudó.
Ivan Kušt

Verifique su ext.kotlin_versiony agregue lo classpath...mencionado anteriormente en el proyecto gradle. Y agregue los dos apply...a la aplicación gradle.
Alston

33

No puedo encontrarlo en la documentación oficial , pero debe aplicar el complemento agregando lo siguiente a su build.gradlearchivo:

apply plugin: 'kotlin-android-extensions'

Sí, creo que desde entonces kotlin-1.0.0-betanecesitas aplicar el complemento, ¡pero no puedo encontrar una fuente para eso! ¡Gracias!
Orgmir

2
Nota: La documentación oficial se ha actualizado: kotlinlang.org/docs/tutorials/…
Maxime

1
Solicite una edición de la respuesta aceptada y adjunte esta información. :)
Ramon Moraes

La documentación oficial ahora muestra un bloque de código vacío donde apply plugin: 'kotlin-android-extensions'debería estar.
Dielson Sales

10

El bloque buildscript que contiene la dependencia kotlin-android-extensions aparentemente necesita estar en el módulo de aplicación build.gradle, no en el de nivel superior.


1
Pensé que sería algo así; la mayor parte de mi karma proviene de responder una pregunta de Gradle con un problema similar.
Ionoclast Brigham

8

Descubrí por qué el mío no funcionó. Mis bloques se extraviaron y al mover el buildscript{}bloque antes de los complementos de la siguiente manera, lo hice funcionar:

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

Esto funcionó para mí. ¿Sabrías por qué eso lo solucionó?
Joe

La única respuesta que muestra exactamente dónde se apply plugin: 'kotlin-android-extensions'debe agregar ... +1
Zelphir Kaltstahl

Pero, ¿por qué esto lo arregla?
Mo Hajr

5

añadir apply plugin: 'kotlin-android-extensions'en app/buildgradle.

si ya lo ha agregado, intente eliminarlo y sincronizar Gradle, cuando la sincronización esté completa, luego agréguelo y sincronice Gradle nuevamente. Esto funciona para mí.



4

El problema para mí fue el orden en que apliqué los complementos.

Debe aplicar el complemento kotlin-android antes que el complemento kotlin-android-extensions

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

1

Después de aplicar las correcciones mencionadas anteriormente, tuve que reiniciar Android Studio para que funcionara.


0

Así es como funcionó para mí. Cuando configuré Kotlin por primera vez en Project, seleccioné la versión 1.1.2-3 en lugar de 1.1.2-4 y agregué la siguiente línea en el archivo de la aplicación build.gradle

apply plugin: 'kotlin-android-extensions'

después de eso, sincronicé la compilación y funcionó como se esperaba.


0

Descubrí que tenía soporte para C ++ y Kotlin al mismo tiempo, lo que estaba causando problemas de compilación.

Al iniciar un nuevo proyecto, asegúrese de que la compatibilidad con C ++ esté desmarcada y la compatibilidad con Kotlin esté marcada. Eso me solucionó el problema.


0

En mi caso, puse el código que hace referencia a la vista en un archivo companion object. Que tonto..


0

Intente agregar al bloque de dependencia lo siguiente:

dependencies {
...
compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.3.2'
...
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.