Неразрешенная ссылка: kotlinx

Я пытаюсь опробовать Kotlin и расширения Kotlin для Android в Android Studio. Я пробовал это как в Android Studio v 1.5.1 на Ubuntu 14.04, так и в Android Studio v 1.5.1 на OS X El Capitan с тем же результатом.

Вот что я делаю:

  1. Устанавливаю плагин Kotlin 1.0.0-beta-35950-IJ141-11
  2. Создайте новый пустой проект Android
  3. Преобразуйте файл MainActivity в Kotlin (с помощью help-> findaction-> convert file to kotlin)
  4. Настроить проект под Kotlin

Затем я перехожу в сгенерированный файл content_main.xml и добавляю идентификатор (привет) для "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>  

Затем в преобразованном MainActivity я добавляю строку для установки TextView. (показано ниже). Затем Android Studio предлагает мне (через alt-enter) вставить эту строку (также показано ниже)

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

Итак, на данный момент все кажется в порядке

но затем, когда я пытаюсь скомпилировать это, я получаю

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

Обратите внимание, что я не установил плагин расширений Kotlin для Android. Несколько дней назад он должен был быть включен в основной плагин и отмечен как устаревший. (Фактически, если вы попытаетесь установить его, когда у вас есть последняя версия плагина, ничего нового не будет установлено)

Кто-нибудь видит, что я делаю неправильно?

Основная деятельность

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

person nPn    schedule 09.12.2015    source источник
comment
Мое решение было совершенно другим, я удалил поддержку языка Kotlin как официальную из файла gradle.properties, и он снова сработал. На самом деле файл был поврежден и имеет несколько случайных строк, я исправил это, вернувшись к случайным строкам.   -  person Lalit Fauzdar    schedule 24.03.2020


Ответы (16)


Добавьте kotlin-android-extensions в зависимости нашего скрипта сборки:

1. В build.gradle на уровне проекта

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

и примените плагин kotlin-android-extensions:

2. В build.gradle на уровне модуля

apply plugin: 'kotlin-android-extensions'
person aga    schedule 09.12.2015
comment
Я так и сделал, но проблема с 1.0.0-beta-3595 все еще возникает :( - person E-Kami; 13.12.2015
comment
У меня тоже не работает (1.0.0-beta-4589) - решения нет? Просто добавил комментарий к заявке в багтрекере. - person Steffen Funke; 21.01.2016
comment
У меня тоже была эта проблема на 1.0.0-beta-4589. Вы также должны добавить apply plugin: 'kotlin-android-extensions' в свой файл build.gradle - person Kio Krofovitch; 04.02.2016
comment
Лучше выразить с помощью переменной $ kotlin_version: compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" - person KarolDepka; 02.03.2016
comment
Также обратите внимание, что если вы заполните этот ответ, аннулирование кешей / перезапуска может помочь - person Beloo; 15.06.2018
comment
У меня не работает. Я использую AS 3.1.3 и Gradle 3.1.3 (последние по состоянию на июль 2018 г.). Проект был недавно обновлен до этой конфигурации, и неразрешенная ссылка начала поступать для нескольких строк Kotlin (одна была removeOnGlobalLayoutListener). Застрял на этом 5 дней. Кто-нибудь знает решение? - person Shashank Saxena; 23.07.2018
comment
У меня тоже не работает. У меня возникла эта проблема после обновления до Android Studio 3.3 (раньше работала с 3.2). - person hardysim; 16.01.2019
comment
@hardysim, и почему именно это повод дать мне отрицательный голос за решение, которое сработало для 167 других пользователей (по крайней мере, в соответствии с количеством положительных голосов)? - person aga; 16.01.2019
comment
@aga, возможно, это тонкая грань между неправильным (для меня), поэтому бесполезным (отрицательное голосование) и неправильным (для меня), но, возможно, полезным для других (без голосования). плюс, это должно работать без добавления kotlin-android-extensions в путь к классам (как раньше). Но хорошо, я не собираюсь больше нигде использовать отрицательный голос, если он не является явно неправильным. Извините за беспокойство. - person hardysim; 17.01.2019
comment
Как нанести на базель? - person Anthony Kong; 12.11.2020
comment
Плагин Gradle 'kotlin-android-extensions' устарел. Воспользуйтесь этим руководством по миграции (goo.gle/kotlin-android-extensions-deprecation) для начала работы с привязкой просмотра (developer.android.com/topic/libraries/view-binding) и плагин kotlin-parcelize. - person Sergey Shamanayev; 30.12.2020

Когда вы используете Android Studio 2.0 и kotlin 1.0.1-2, вы ошибетесь. Вы не можете настроить расширения kotlin android в build.gradle вашего проекта, вам необходимо настроить и kotlin расширения android в каждом модуле build.gradle следующим образом:

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

Что наиболее важно, даже если в плагин kotlin включено расширение kotlin для android, вам также необходимо настроить kotlin-android-extensions в своем модуле bulid.gradle следующим образом:

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

Конечно, вы можете настроить путь к классам плагина kotlin в build.gradle вашего проекта.

person zhuochangjing    schedule 10.04.2016
comment
В моем случае (Android Studio 2.1.1, kotlin 1.0.2) действие Настроить kotlin в проекте настроило kotlin в проекте build.gradle вместо build.gradle модуля, и это помогло. - person Ivan Kušt; 06.06.2016
comment
Проверьте свой ext.kotlin_version и добавьте упомянутый выше classpath... в градиент проекта. И добавьте два apply... в приложение gradle. - person Alston; 28.09.2019

Я не могу найти его в официальной документации, но вы должны применить плагин добавив в свой build.gradle файл следующее:

apply plugin: 'kotlin-android-extensions'
person Maxime    schedule 08.02.2016
comment
Да, я думаю, что с kotlin-1.0.0-beta вам нужно применить плагин, но я не могу найти для этого источник! Спасибо! - person Orgmir; 09.02.2016
comment
Примечание. Официальная документация обновлена: kotlinlang.org/ docs / tutorials / - person Maxime; 20.02.2016
comment
Запросите изменение принятого ответа и добавьте эту информацию! :) - person Ramon Moraes; 28.02.2016
comment
Официальная документация теперь показывает пустой блок кода там, где должен быть apply plugin: 'kotlin-android-extensions'. - person Dielson Sales; 07.05.2016

Блок buildscript, содержащий зависимость kotlin-android-extensions, по-видимому, должен находиться в модуле приложения build.gradle, а не на верхнем уровне.

person iajn    schedule 21.01.2016
comment
Думал, будет что-то вроде этого; большая часть моей кармы связана с ответом на вопрос Gradle с аналогичной проблемой. - person Ionoclast Brigham; 02.06.2016

Я нашел, почему мой не работал. Мои блоки были потеряны, и, переместив блок buildscript{} перед плагинами, как показано ниже, я заработал:

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"
}
person E-Kami    schedule 13.12.2015
comment
Это сработало для меня. Вы случайно не знаете, почему это исправлено? - person Joe; 07.01.2016
comment
Единственный ответ, показывающий, где именно нужно добавить apply plugin: 'kotlin-android-extensions' ... +1 - person Zelphir Kaltstahl; 28.04.2016
comment
Но зачем это исправлять? - person Mo Hajr; 01.05.2017

добавить apply plugin: 'kotlin-android-extensions' в app/buildgradle.

если вы уже добавили его, попробуйте удалить его и синхронизировать градиент, когда синхронизация будет завершена, затем добавьте его обратно и снова синхронизируйте Gradle. Эта работа для меня.

person angryd    schedule 29.12.2017

Удаление следующего импорта устранило проблему для меня.

import android.R
person Nopx    schedule 12.05.2019
comment
georgik.rocks/ - person creativecoder; 13.02.2020
comment
Я потратил много времени, пытаясь найти решение этой проблемы. Файлы GRADLE не были проблемой. Большое спасибо, сэр, только это сработало для меня! Еще раз спасибо! - person Nedim Memišević; 26.11.2020

Для меня проблемой был порядок, в котором я применил плагины.

Вы должны применить плагин kotlin-android перед плагином kotlin-android-extensions.

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
person lbenedetto    schedule 11.06.2019

Что сработало для меня в Android Studio 4.2 Beta 1 в macOS big sur, чтобы добавить id 'kotlin-android-extensions' в раздел плагинов в build.gradle файле уровня приложения. Так что это должно выглядеть следующим образом.

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions'
}

Затем синхронизируйте проект, и он должен работать

person emkarachchi    schedule 13.12.2020

После применения упомянутых выше исправлений мне пришлось перезапустить Android Studio, чтобы она заработала.

person Dawit Abraham    schedule 10.10.2019

Вот как это сработало для меня. Когда я впервые настроил Kotlin в Project, я выбрал версию 1.1.2-3 вместо 1.1.2-4 и добавил следующую строку в файл приложения build.gradle

apply plugin: 'kotlin-android-extensions'

после этого я синхронизировал сборку, и все заработало, как ожидалось.

person Dobai Csaba Arpad    schedule 23.05.2017

Я обнаружил, что одновременно поддерживаю C ++ и Kotlin, что вызывает проблемы при сборке.

При запуске нового проекта убедитесь, что поддержка C ++ не отмечена, а поддержка Kotlin отмечена. Это устранило проблему для меня.

person AJ Snow    schedule 15.01.2018

В моем случае я поместил код, ссылающийся на представление, в companion object. Как глупо..

person KYHSGeekCode    schedule 07.03.2020

Для меня единственное, что помогло, - это нажать «Файл» - ›Invalidate caches / Restart ...

person Uriel Frankel    schedule 13.09.2020

С реактивным ранцем вы должны использовать:

в build.gradle (приложение)

    buildFeatures {
        dataBinding true
        viewBinding true
    }

   plugins {
      id 'kotlin-parcelize'
   }

In activity_main.xml

<androidx.constraintlayout.widget.ConstraintLayout
    tools:viewBindingIgnore="false">

In MainActivity.kt

import com.example.appname.databinding.ActivityMainBinding // ActivityMain is for main_activity.xml, and so on for any other activity

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        binding.button.setOnClickListener {} // use binding.elementName
    }
}
person Hasan A Yousef    schedule 02.04.2021

в моем случае разделитель строк android studio изменен на настройки Windows CRLF (я использую macbook). при переключении на CR исправить мою ошибку

person Hakan Mutlu    schedule 23.06.2021