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

108

Я пытаюсь опробовать 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)
    }
}
nPn
источник
Мое решение было совершенно другим, я удалил поддержку языка Kotlin как официальную из файла gradle.properties, и он снова сработал. На самом деле файл был поврежден и имеет несколько случайных строк, я исправил это, вернувшись к случайным строкам.
Лалит Фауздар

Ответы:

189

Добавьте kotlin-android-extensionsв наш buildscript зависимости:

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'

Оригинальный ответ:

Скорее всего это ошибка в плагине Kotlin. Я зарегистрировал проблему на их трекере.

ага
источник
1
Я так и сделал, но проблема с 1.0.0-beta-3595 у меня все еще возникает :(
E-Kami
У меня тоже не работает (1.0.0-beta-4589) - решения нет? Просто добавил комментарий к заявке в багтрекере.
Steffen Funke
11
У меня тоже была эта проблема на 1.0.0-beta-4589. Вы также должны добавить apply plugin: 'kotlin-android-extensions'в свой файл build.gradle
Кио Крофович
1
Лучше выразить с помощью переменной $ kotlin_version:compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
KarolDepka
Также обратите внимание, что если вы заполните этот ответ, аннулирование кешей / перезапуска может помочь
Белу
38

Когда вы используете 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 вашего проекта.

Чжочанцзин
источник
1
В моем случае (Android Studio 2.1.1, kotlin 1.0.2) действие «Настроить kotlin в проекте» настроило kotlin в проекте build.gradle вместо build.gradle модуля, и это помогло.
Иван Кушт
Проверьте свой ext.kotlin_versionи добавьте classpath...упомянутое выше в градиент проекта. И добавьте два apply...в приложение gradle.
Alston
33

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

apply plugin: 'kotlin-android-extensions'
Максим
источник
Да, я думаю, что kotlin-1.0.0-betaвам нужно применить плагин, но я не могу найти для этого источник! Спасибо!
Orgmir
2
Примечание. Официальная документация обновлена: kotlinlang.org/docs/tutorials/…
Максим
1
Запросите изменение принятого ответа и добавьте эту информацию! :)
Рамон Мораес
Официальная документация теперь показывает пустой блок кода там, где apply plugin: 'kotlin-android-extensions'должен быть.
Dielson Sales
10

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

iajn
источник
1
Я думал, что это будет примерно так; большая часть моей кармы связана с ответом на вопрос Gradle с аналогичной проблемой.
Ionoclast Brigham
8

Я нашел, почему мой не работает. Мои блоки были потеряны, и, переместив 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"
}
Э-ками
источник
Это сработало для меня. Вы случайно не знаете, почему это исправлено?
Джо
Единственный ответ, показывающий, где именно apply plugin: 'kotlin-android-extensions'нужно добавить ... +1
Zelphir Kaltstahl
Но зачем это исправлять?
Мо
5

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

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

сердитый
источник
4

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

import android.R
Nopx
источник
georgik.rocks/…
creativecoder
4

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

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

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
lbenedetto
источник
1

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

Давит Абрахам
источник
0

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

apply plugin: 'kotlin-android-extensions'

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

Добай Чаба Арпад
источник
0

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

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

Эй Джей Сноу
источник
0

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

KYHSGeekCode
источник
0

Пожалуйста, попробуйте добавить в блок зависимостей следующее:

dependencies {
...
compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.3.2'
...
}
Денис Зотов
источник