Невирішена посилання: 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 в Котлін (за допомогою довідки-> findaction-> конвертувати файл у 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. Станом на пару днів тому, тепер це повинно бути включено в основний модуль і позначено як застаріле. (Насправді, якщо ви спробуєте встановити його, коли у вас є останній плагін, нічого нового не встановлено)

Хтось бачить, що я роблю неправильно?

MainActivity

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

Моє рішення було зовсім іншим, я видалив підтримку мови Kotlin як офіційну з файлу gradle.properties і вона знову працювала. Насправді файл зіпсувався і має кілька випадкових рядків, я виправив його, повернувшись до випадкових рядків.
Лаліт Фауздар

Відповіді:


188

Додайте 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

Також зауважте, якщо ви заповнили цю анверу, недійсні кеші / перезавантаження можуть допомогти
Beloo

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-розширення в 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...у ступінь програми.
Елстон

33

Я не можу знайти його в офіційній документації , але ви повинні застосувати плагін, додавши у build.gradleфайл наступне :

apply plugin: 'kotlin-android-extensions'

Так, я думаю, оскільки kotlin-1.0.0-betaвам потрібно застосувати плагін, але я не можу знайти джерело для цього! Дякую!
Оргмір

2
Примітка: Оновлена ​​офіційна документація: kotlinlang.org/docs/tutorials/…
Maxime

1
Попросіть редагування над прийнятою відповіддю та додайте цю інформацію! :)
Рамон Мораес

Офіційна документація тепер показує порожній код коду, де apply plugin: 'kotlin-android-extensions'має бути.
Продаж Дільсона

10

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


1
Я думав, що це буде щось подібне; більша частина моєї карми - це відповідь на запитання градулів подібним питанням.
Іонокласт Брігхем,

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'
вказано

Але чому це виправити?
Пн Хайр

5

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

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



4

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

Ви повинні застосувати плагін kotlin-android перед плагіном kotlin-android-extensions

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

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

У моєму випадку я поставив код, що посилається на перегляд, в a companion object. Як нерозумно ..


0

Спробуйте додати до блоку залежності наступне:

dependencies {
...
compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.3.2'
...
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.