Nierozwiązane odniesienie: kotlinx

108

Próbuję wypróbować Kotlin i rozszerzenia Kotlin Android w Android Studio. Próbowałem tego zarówno w Android Studio v 1.5.1 na Ubuntu 14.04, jak iw Android Studio v 1.5.1 na OS X El Capitan z tym samym wynikiem.

Oto co robię:

  1. Instaluję wtyczkę Kotlin 1.0.0-beta-35950-IJ141-11
  2. Utwórz nowy pusty projekt systemu Android
  3. Konwertuj plik MainActivity na Kotlin (poprzez help-> findaction-> Convert file to kotlin)
  4. Skonfiguruj projekt dla Kotlin

Następnie przechodzę do wygenerowanego pliku content_main.xml i dodaję identyfikator (cześć) dla „Hello World!” Widok tekstu.

<?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>  

Następnie w przekonwertowanym MainActivity dodaję linię, aby ustawić TextView. (pokazane poniżej). Następnie Android Studio prosi mnie (przez alt-enter) o wstawienie tego wiersza (również pokazanego poniżej)

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

W tym momencie wszystko wydaje się w porządku

ale kiedy próbuję to skompilować, otrzymuję

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

Zauważ, że nie zainstalowałem wtyczki Kotlin Android. Od kilku dni ma to być teraz zawarte w głównej wtyczce i jest oznaczone jako przestarzałe. (W rzeczywistości, jeśli spróbujesz go zainstalować, gdy masz najnowszą wtyczkę, nic nowego nie zostanie zainstalowane)

Czy ktoś widzi, co robię źle?

Główna aktywność

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
źródło
Moje rozwiązanie było zupełnie inne, usunąłem obsługę języka Kotlin jako oficjalną z pliku gradle.properties i znowu zadziałało. W rzeczywistości plik został uszkodzony i zawiera kilka losowych ciągów, naprawiłem to, wracając do losowych ciągów.
Lalit Fauzdar

Odpowiedzi:

189

Dodaj kotlin-android-extensionszależności naszego buildscript:

1. W pliku build.gradle na poziomie projektu

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

i zastosuj kotlin-android-extensionswtyczkę:

2. W pliku build.gradle na poziomie modułu

apply plugin: 'kotlin-android-extensions'

Oryginalna odpowiedź:

Najprawdopodobniej jest to błąd we wtyczce Kotlin. Złożyłem problem na ich trackerze.

aga
źródło
1
Tak właśnie zrobiłem, ale nadal mam problem z wersją 1.0.0-beta-3595 :(
E-Kami,
U mnie też nie działa (1.0.0-beta-4589) - jakieś rozwiązanie jeszcze? Właśnie dodałem komentarz do zgłoszenia w narzędziu do śledzenia błędów.
Steffen Funke
11
Miałem też ten problem na 1.0.0-beta-4589. Musisz także dodać apply plugin: 'kotlin-android-extensions'do swojego pliku build.gradle
Kio Krofovitch
1
Lepiej wyrażone zmienną $ kotlin_version:compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
KarolDepka
Zwróć też uwagę, że jeśli wypełnisz tę odpowiedź, unieważnienie pamięci podręcznej / ponowne uruchomienie może pomóc
Beloo
38

Kiedy używasz Android Studio 2.0 i Kotlin 1.0.1-2, znajdziesz ten sam błąd. Nie możesz skonfigurować rozszerzeń kotlin android w build.gradle twojego projektu, musisz skonfigurować i rozszerzenia kotlin android w każdym build.gradle modułu w następujący sposób:

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

Co najważniejsze, nawet poprzez wtyczkę kotlin zawierającą rozszerzenie kotlin dla systemu Android, musisz również skonfigurować rozszerzenia kotlin-android w pliku bulid.gradle modułu w następujący sposób:

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

Oczywiście możesz skonfigurować ścieżkę klas wtyczki kotlin w pliku build.gradle swojego projektu.

zhuochangjing
źródło
1
W moim przypadku (Android Studio 2.1.1, kotlin 1.0.2) akcja "Konfiguruj kotlin w projekcie" skonfigurowała kotlin w projekcie build.gradle zamiast build.gradle modułu, i to pomogło.
Ivan Kušt
Sprawdź ext.kotlin_versioni dodaj classpath...wspomniane powyżej w ocenie projektu. I dodaj te dwa apply...do oceny aplikacji.
Alston
33

Nie mogę go znaleźć w oficjalnej dokumentacji , ale musisz zastosować wtyczkę, dodając do swojego build.gradlepliku:

apply plugin: 'kotlin-android-extensions'
Maxime
źródło
Tak, myślę, że skoro kotlin-1.0.0-betatrzeba zastosować wtyczkę, ale nie mogę znaleźć źródła do tego! Dzięki!
Orgmir
2
Uwaga: Oficjalna dokumentacja została zaktualizowana: kotlinlang.org/docs/tutorials/…
Maxime
1
Poproś o zmianę zaakceptowanej odpowiedzi i dołącz te informacje! :)
Ramon Moraes
Oficjalna dokumentacja pokazuje teraz pusty blok kodu, w którym apply plugin: 'kotlin-android-extensions'powinien znajdować się.
Sprzedaż Dielson
10

Blok buildscript zawierający zależność kotlin-android-extensions najwyraźniej musi znajdować się w pliku app-module build.gradle, a nie na najwyższym poziomie.

iajn
źródło
1
Myślałem, że to będzie coś takiego; większość mojej karmy pochodzi z odpowiedzi na pytanie z podobnego problemu.
Ionoclast Brigham
8

Odkryłem, dlaczego mój nie działa. Moje bloki się zgubiły i przesuwając buildscript{}blok przed wtyczkami w następujący sposób:

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
źródło
To zadziałało dla mnie. Czy wiesz, dlaczego to naprawiło?
Joe
Jedyna odpowiedź pokazująca dokładnie, gdzie apply plugin: 'kotlin-android-extensions'należy dodać ... +1
Zelphir Kaltstahl
Ale dlaczego to naprawia?
Mo Hajr
5

dodać apply plugin: 'kotlin-android-extensions'w app/buildgradle.

jeśli już ją dodałeś, spróbuj ją usunąć i zsynchronizuj Gradle, po zakończeniu synchronizacji dodaj ją ponownie i ponownie Synchronizuj Gradle. Ta praca dla mnie.

angryd
źródło
4

Problemem była dla mnie kolejność stosowania wtyczek.

Musisz zastosować wtyczkę kotlin-android przed wtyczką kotlin-android-extensions

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
lbenedetto
źródło
1

Po zastosowaniu wyżej wymienionych poprawek musiałem zrestartować Android Studio, aby działało.

Dawit Abraham
źródło
0

Tak to u mnie zadziałało. Kiedy po raz pierwszy skonfigurowałem Kotlin w programie Project, wybrałem wersję 1.1.2-3 zamiast 1.1.2-4 i dodałem następujący wiersz w pliku aplikacji build.gradle

apply plugin: 'kotlin-android-extensions'

potem zsynchronizowałem kompilację i działało zgodnie z oczekiwaniami.

Dobai Csaba Arpad
źródło
0

Dowiedziałem się, że mam jednocześnie wsparcie dla C ++ i Kotlina, co powoduje problemy z kompilacją.

Rozpoczynając nowy projekt, upewnij się, że obsługa C ++ jest odznaczona, a obsługa Kotlin jest zaznaczona. To rozwiązało problem.

AJ Snow
źródło
0

W moim przypadku umieściłem kod odnoszący się do widoku w pliku companion object. Jak głupio..

KYHSGeekCode
źródło
0

Spróbuj dodać do zależności blokować następną:

dependencies {
...
compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.3.2'
...
}
Denys Zotov
źródło