web-dev-qa-db-fra.com

Référence non résolue: kotlinx

J'essaie d'essayer Kotlin et les extensions Android Kotlin 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 vide
  3. Convertir le fichier MainActivity en Kotlin (via help-> findaction-> convertir le fichier en kotlin) 
  4. Configurez le projet pour Kotlin

Je vais ensuite dans le fichier content_main.xml généré et ajoute un identifiant (bonjour) pour le message "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 MainActivity converti, j'ajoute une ligne pour définir le TextView. (ci-dessous) . Android Studio me demande ensuite (via alt-enter) d'insérer cette ligne (voir aussi ci-dessous)

import kotlinx.Android.synthetic.main.content_main.*

Donc, à ce stade, tout semble bien

mais quand j'essaie de compiler cela, je reçois 

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

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

Quelqu'un voit ce que je fais 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)
    }
}
94
nPn

Ajoutez kotlin-Android-extensions dans les 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 plugin kotlin-Android-extensions:

2. Dans votre build.gradle au niveau du module

apply plugin: 'kotlin-Android-extensions'

_ {Réponse originale:} _

Très probablement, c'est un bug dans le plugin Kotlin. J'ai déposé un problème sur leur traqueur.

167
aga

Lorsque vous utilisez Android Studio 2.0 et kotlin 1.0.1-2, vous obtenez le même problème. Vous ne pouvez pas configurer les extensions Android Kotlin dans le build.gradle de votre projet, vous devez configurer et les extensions Android Kotlin dans le build.gradle de chaque module 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 à travers le plugin kotlin inclus l'extension kotlin Android, vous devez également configurer les extensions kotlin-Android dans le module bulid.gradle de votre module comme suit:

...
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 chemin d'accès aux classes du plug-in kotlin dans le fichier build.gradle de votre projet.

35
JackRo

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

apply plugin: 'kotlin-Android-extensions'
32
Maxime

Le bloc de buildscript contenant la dépendance kotlin-Android-extensions doit apparemment se trouver dans le module de construction app-module, pas dans celui de niveau supérieur.

9
Wintus

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

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"
}
8
E-Kami

ajoutez apply plugin: 'kotlin-Android-extensions' dans app/buildgradle.

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

3
angryd

J'ai découvert que j'avais simultanément le support de C++ et de Kotlin, ce qui posait des problèmes de construction. 

Lors du démarrage d'un nouveau projet, assurez-vous que la prise en charge de 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
AJ Snow

Voici 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

Supprimer l’importation suivante a corrigé le problème pour moi.

import Android.R
0
Nopx

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'
0
lbenedetto