Referência não resolvida: kotlinx

108

Estou tentando experimentar o Kotlin e as extensões Kotlin do Android no Android Studio. Eu tentei isso no Android Studio v 1.5.1 no Ubuntu 14.04 e no Android Studio v 1.5.1 no OS X El Capitan com o mesmo resultado.

Aqui está o que estou fazendo:

  1. Eu instalo o plugin Kotlin 1.0.0-beta-35950-IJ141-11
  2. Crie um novo projeto Android em branco
  3. Converta o arquivo MainActivity para Kotlin (via ajuda-> findaction-> converter arquivo para kotlin)
  4. Configure o projeto para Kotlin

Em seguida, vou para o arquivo content_main.xml gerado e adiciono um id (hello) para "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>  

Em seguida, na MainActivity convertida, adiciono uma linha para definir o TextView. (mostrado abaixo). O Android Studio então me pede (via alt-enter) para inserir esta linha (também mostrada abaixo)

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

Então, neste ponto, tudo parece bem

mas então, quando tento compilar isso, recebo

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

Observe que eu fiz não instalar o Kotlin Android extensões plugin. Há alguns dias, ele deveria estar incluído no plug-in principal e está marcado como obsoleto. (Na verdade, se você tentar instalá-lo quando tiver o plugin mais recente, nada de novo será instalado)

Alguém vê o que estou fazendo de errado?

Atividade 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)
    }
}
nPn
fonte
Minha solução foi completamente diferente, removi o suporte ao idioma Kotlin como oficial do arquivo gradle.properties e funcionou novamente. Na verdade, o arquivo foi corrompido e tem algumas strings aleatórias, eu consertei voltando para strings aleatórias.
Lalit Fauzdar

Respostas:

188

Adicione kotlin-android-extensionsas dependências do nosso buildscript:

1. Em seu build.gradle de nível de projeto

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

e aplique o kotlin-android-extensionsplugin:

2. Em seu build.gradle de nível de módulo

apply plugin: 'kotlin-android-extensions'

Resposta original:

Provavelmente é um bug no plug-in Kotlin. Registrei um problema em seu rastreador.

aga
fonte
1
Isso é o que eu fiz, mas ainda tenho o problema com 1.0.0-beta-3595 :(
E-Kami
Também não funciona para mim (1.0.0-beta-4589) - alguma solução ainda? Acabei de adicionar um comentário ao tíquete no rastreador de bug.
Steffen Funke
11
Eu também tive esse problema em 1.0.0-beta-4589. Você também deve adicionar apply plugin: 'kotlin-android-extensions'ao seu arquivo build.gradle
Kio Krofovitch
1
Melhor expresso com uma variável $ kotlin_version:compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
KarolDepka
Observe também que se você preencher esta resposta, invalidar caches / reiniciar pode ajudar
Beloo
38

Ao usar o Android Studio 2.0 e o kotlin 1.0.1-2, você vai descobrir o mesmo errado. Você não pode configurar extensões android kotlin no build.gradle do seu projeto, você precisa configurar e extensões android kotlin em cada build.gradle do módulo assim:

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

Mais importante, mesmo através do plug-in kotlin incluído a extensão kotlin android, você também precisa configurar as extensões kotlin-android-no bulid.gradle do seu módulo desta forma:

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

Claro, você pode configurar o classpath do plugin kotlin no build.gradle do seu projeto.

Zhuochangjing
fonte
1
No meu caso (Android Studio 2.1.1, kotlin 1.0.2), a ação "Configurar kotlin no projeto" configurou kotlin no projeto build.gradle em vez de no módulo build.gradle, e isso ajudou.
Ivan Kušt
Verifique o seu ext.kotlin_versione adicione o classpath...mencionado acima no gradle do projeto. E adicione os dois apply...ao app gradle.
Alston
33

Não consigo encontrar na documentação oficial , mas você deve aplicar o plug-in adicionando o seguinte ao seu build.gradlearquivo:

apply plugin: 'kotlin-android-extensions'
Maxime
fonte
Sim, acho que desde que kotlin-1.0.0-betavocê precisa aplicar o plugin, mas não consigo encontrar uma fonte para isso! Obrigado!
Orgmir
2
Nota: A documentação oficial foi atualizada: kotlinlang.org/docs/tutorials/…
Máximo de
1
Solicite uma edição sobre a resposta aceita e anexe esta informação! :)
Ramon Moraes
A documentação oficial agora mostra um bloco de código vazio onde apply plugin: 'kotlin-android-extensions'deveria estar.
Dielson Sales
10

O bloco buildscript contendo a dependência kotlin-android-extensions aparentemente precisa estar no app-module build.gradle, não no de nível superior.

iajn
fonte
1
Eu pensei que seria algo assim; a maior parte do meu carma vem de responder a uma pergunta do Gradle com um problema semelhante.
Ionoclast Brigham
8

Eu descobri porque o meu não funcionou. Meus blocos foram colocados no lugar errado e, movendo o buildscript{}bloco antes dos plug-ins como segue, fiz com que funcionasse:

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"
}
E-Kami
fonte
Isso funcionou para mim. Você saberia por que isso corrigiu isso?
Joe
A única resposta mostrando exatamente onde o apply plugin: 'kotlin-android-extensions'precisa ser adicionado ... +1
Zelphir Kaltstahl
Mas por que isso conserta isso?
Mo Hajr
5

adicionar apply plugin: 'kotlin-android-extensions'em app/buildgradle.

se você já o adicionou, tente removê-lo e sincronizar o Gradle, quando a sincronização for concluída, adicione-o de volta e sincronize o Gradle novamente. Este trabalho para mim.

irritado
fonte
4

Remover a importação a seguir corrigiu o problema para mim.

import android.R
Nopx
fonte
georgik.rocks/…
creativecoder
4

O problema para mim era a ordem em que apliquei os plug-ins.

Você deve aplicar o plugin kotlin-android antes do plugin kotlin-android-extensions

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
lbenedetto
fonte
1

Depois de aplicar as correções mencionadas acima, tive que reiniciar o Android Studio para que funcionasse.

Dawit Abraham
fonte
0

É assim que funcionou para mim. Quando configurei o Kotlin no Project pela primeira vez, selecionei a versão 1.1.2-3 em vez de 1.1.2-4 e adicionei a seguinte linha no arquivo do app build.gradle

apply plugin: 'kotlin-android-extensions'

depois disso, sincronizei a compilação e funcionou conforme o esperado.

Dobai Csaba Arpad
fonte
0

Eu descobri que tinha suporte para C ++ e Kotlin ao mesmo tempo, o que estava causando problemas de compilação.

Ao iniciar um novo projeto, certifique-se de que o suporte C ++ esteja desmarcado e o suporte Kotlin esteja verificado. Isso resolveu o problema para mim.

AJ Snow
fonte
0

No meu caso, coloquei o código referente à visão em a companion object. Que bobo..

KYHSGeekCode
fonte
0

Tente adicionar ao bloco de dependência o seguinte:

dependencies {
...
compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.3.2'
...
}
Denys Zotov
fonte