Référence non résolue: kotlinx


108

J'essaye d'essayer Kotlin et les extensions Kotlin Android dans Android Studio. J'ai essayé cela à la fois dans Android Studio v 1.5.1 sur Ubuntu 14.04 et dans Android Studio v 1.5.1 sur OS X El Capitan avec le même résultat.

Voici ce que je fais:

  1. J'installe le plugin Kotlin 1.0.0-beta-35950-IJ141-11
  2. Créer un nouveau projet Android vierge
  3. Convertir le fichier MainActivity en Kotlin (via help-> findaction-> convertir le fichier en kotlin)
  4. Configurer le projet pour Kotlin

Je vais ensuite dans le fichier content_main.xml généré et j'ajoute un identifiant (bonjour) pour le "Hello World!" Affichage.

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

Ensuite, dans le MainActivity converti, j'ajoute une ligne pour définir le TextView. (indiqué ci-dessous). Android Studio me demande ensuite (via alt-enter) d'insérer cette ligne (également illustrée ci-dessous)

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

Donc à ce stade tout semble bien

mais quand j'essaye de compiler ça, j'obtiens

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

Notez que je n'ai pas installé le plugin d'extensions Kotlin Android. Il y a quelques jours, cela est censé être inclus dans le plug-in principal et est marqué comme obsolète. (En fait si vous essayez de l'installer lorsque vous avez le dernier plugin, rien de nouveau n'est installé)

Quelqu'un voit ce que je fais de mal?

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

Ma solution était complètement différente, j'ai supprimé le support de la langue Kotlin comme officiel du fichier gradle.properties et cela a fonctionné à nouveau. En fait, le fichier a été corrompu et contient des chaînes aléatoires, je l'ai corrigé en revenant à des chaînes aléatoires.
Lalit Fauzdar

Réponses:


189

Ajoutez kotlin-android-extensionsles dépendances de notre buildscript:

1. Dans votre build.gradle au niveau du projet

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

et appliquez le kotlin-android-extensionsplugin:

2. Dans votre build.gradle au niveau du module

apply plugin: 'kotlin-android-extensions'

Réponse originale:

C'est probablement un bogue dans le plugin Kotlin. J'ai déposé un problème sur leur tracker.


1
C'est ce que j'ai fait mais j'ai toujours le problème avec 1.0.0-beta-3595 :(
E-Kami

Cela ne fonctionne pas non plus pour moi (1.0.0-beta-4589) - une solution pour le moment? Je viens d'ajouter un commentaire au ticket dans le bug tracker.
Steffen Funke

11
J'ai également eu ce problème sur 1.0.0-beta-4589. Vous devez également ajouter apply plugin: 'kotlin-android-extensions'à votre fichier build.gradle
Kio Krofovitch

1
Mieux exprimé avec une variable $ kotlin_version:compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
KarolDepka

Notez également que si vous remplissez cette réponse, l'invalidation des caches / redémarrage peut aider
Beloo

38

Lorsque vous utilisez Android Studio 2.0 et kotlin 1.0.1-2, vous rencontrez le même problème. Vous ne pouvez pas configurer les extensions kotlin android dans build.gradle de votre projet, vous devez configurer et kotlin android extensions dans chaque module build.gradle comme ceci:

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

Plus important encore, même grâce au plugin kotlin inclus l'extension android kotlin, vous devez également configurer les extensions kotlin-android-extensions dans bulid.gradle de votre module comme ceci:

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

Bien sûr, vous pouvez configurer le classpath du plugin kotlin dans build.gradle de votre projet.


1
Dans mon cas (Android Studio 2.1.1, kotlin 1.0.2), l'action «Configurer kotlin dans le projet» a configuré kotlin dans le projet build.gradle au lieu de build.gradle du module, et cela a aidé.
Ivan Kušt

Vérifiez votre ext.kotlin_versionet ajoutez classpath...mentionné ci-dessus dans le classement du projet. Et ajoutez les deux apply...à l'application gradle.
Alston

33

Je ne le trouve pas dans la documentation officielle , mais vous devez appliquer le plugin en ajoutant ce qui suit à votre build.gradlefichier:

apply plugin: 'kotlin-android-extensions'

Oui, je pense que depuis le kotlin-1.0.0-betavous devez appliquer le plugin, mais je ne trouve pas de source pour cela! Merci!
Orgmir

2
Remarque: la documentation officielle a été mise à jour: kotlinlang.org/docs/tutorials/…
Maxime

1
Demandez une modification sur la réponse acceptée et ajoutez cette information! :)
Ramon Moraes

La documentation officielle montre maintenant un bloc de code vide où apply plugin: 'kotlin-android-extensions'devrait être le.
Dielson Sales

10

Le bloc buildscript contenant la dépendance kotlin-android-extensions doit apparemment se trouver dans le module d'application build.gradle, pas dans celui de niveau supérieur.


1
Je pensais que ce serait quelque chose comme ça; la plupart de mon karma est de répondre à une question gradle avec un problème similaire.
Ionoclast Brigham le

8

J'ai trouvé pourquoi le mien ne fonctionnait pas. Mes blocs ont été égarés et en déplaçant le buildscript{}bloc avant les plugins comme suit, je l'ai fait fonctionner:

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

Cela a fonctionné pour moi. Sauriez-vous pourquoi cela a réglé le problème?
Joe le

La seule réponse montrant exactement où les apply plugin: 'kotlin-android-extensions'besoins à ajouter ... +1
Zelphir Kaltstahl

Mais pourquoi cela le réparer?
Mo Hajr

5

ajouter apply plugin: 'kotlin-android-extensions'à app/buildgradle.

si vous l'avez déjà ajouté, essayez de le supprimer et de synchroniser le gradle, lorsque la synchronisation est terminée, puis rajoutez-le et synchronisez à nouveau Gradle. Ce travail pour moi.



4

Le problème pour moi était l'ordre dans lequel j'ai appliqué les plugins.

Vous devez appliquer le plugin kotlin-android avant le plugin kotlin-android-extensions

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

1

Après avoir appliqué les correctifs mentionnés ci-dessus, j'ai dû redémarrer Android Studio pour le faire fonctionner.


0

Voilà comment cela a fonctionné pour moi. Lorsque j'ai configuré Kotlin pour la première fois dans Project, j'ai sélectionné la version 1.1.2-3 au lieu de 1.1.2-4 et ajouté la ligne suivante dans le fichier d'application build.gradle

apply plugin: 'kotlin-android-extensions'

après cela, j'ai synchronisé la construction et cela a fonctionné comme prévu.


0

J'ai découvert que j'avais un support pour C ++ et Kotlin en même temps, ce qui causait des problèmes de construction.

Lorsque vous démarrez un nouveau projet, assurez-vous que la prise en charge C ++ n'est pas cochée et que la prise en charge de Kotlin est cochée. Cela a résolu le problème pour moi.


0

Dans mon cas, j'avais mis le code référençant la vue dans un fichier companion object. Quel étourdi..


0

Veuillez essayer d'ajouter au bloc de dépendance le suivant:

dependencies {
...
compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.3.2'
...
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.