Referensi yang belum terselesaikan: kotlinx


108

Saya mencoba untuk mencoba Kotlin dan ekstensi Kotlin Android di Android Studio. Saya telah mencoba ini di Android Studio v 1.5.1 di Ubuntu 14.04, dan di Android Studio v 1.5.1 di OS X El Capitan dengan hasil yang sama.

Inilah yang saya lakukan:

  1. Saya menginstal plugin Kotlin 1.0.0-beta-35950-IJ141-11
  2. Buat proyek Android kosong baru
  3. Konversikan file MainActivity ke Kotlin (melalui help-> findaction-> convert file to kotlin)
  4. Konfigurasi proyek untuk Kotlin

Saya kemudian masuk ke file content_main.xml yang dihasilkan dan menambahkan id (halo) untuk "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>  

Kemudian dalam MainActivity yang dikonversi saya menambahkan baris untuk mengatur TextView. (ditampilkan di bawah). Android Studio kemudian meminta saya (melalui alt-enter) untuk memasukkan baris ini (juga ditampilkan di bawah)

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

Jadi pada titik ini semuanya tampak baik-baik saja

tapi kemudian ketika saya mencoba mengkompilasi ini saya dapatkan

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

Perhatikan bahwa saya tidak memasang plugin ekstensi Android Kotlin. Pada beberapa hari yang lalu, ini sekarang seharusnya disertakan dalam steker utama dan ditandai sebagai usang. (Faktanya jika Anda mencoba menginstalnya ketika Anda memiliki plugin terbaru, tidak ada yang baru yang diinstal)

Adakah yang melihat apa yang saya lakukan salah?

Aktifitas utama

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

Solusi saya benar-benar berbeda, saya menghapus dukungan bahasa Kotlin sebagai resmi dari file gradle.properties dan berfungsi lagi. Sebenarnya, file tersebut rusak dan memiliki beberapa string acak, saya memperbaikinya dengan kembali ke string acak.
Lalit Fauzdar

Jawaban:


189

Tambahkan kotlin-android-extensionsdependensi buildscript kami:

1. Dalam build.gradle tingkat proyek Anda

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

dan terapkan kotlin-android-extensionsplugin:

2. Dalam build.gradle tingkat modul Anda

apply plugin: 'kotlin-android-extensions'

Jawaban asli:

Kemungkinan besar itu adalah bug di plugin Kotlin. Saya telah mengajukan masalah pada pelacak mereka.


1
Itulah yang saya lakukan, tetapi saya masih mendapatkan masalah dengan 1.0.0-beta-3595 :(
E-Kami

Tidak bekerja untuk saya juga (1.0.0-beta-4589) - ada solusi? Baru saja menambahkan komentar ke tiket di pelacak bug.
Steffen Funke

11
Saya juga mengalami masalah ini di 1.0.0-beta-4589. Anda juga harus menambahkan apply plugin: 'kotlin-android-extensions'ke file build.gradle Anda
Kio Krofovitch

1
Lebih baik diekspresikan dengan variabel $ kotlin_version:compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
KarolDepka

Perhatikan juga jika Anda memenuhi jawaban ini, cache / restart yang tidak valid dapat membantu
Beloo

38

Saat Anda menggunakan Android Studio 2.0 dan kotlin 1.0.1-2, Anda akan mendapatkan kesalahan yang sama. Anda tidak dapat mengonfigurasi ekstensi android kotlin di build.gradle proyek Anda, Anda perlu mengonfigurasi dan ekstensi android kotlin di setiap build.gradle Modul seperti ini:

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

Yang terpenting, bahkan melalui plugin kotlin yang menyertakan ekstensi android kotlin, Anda juga perlu mengonfigurasi kotlin-android-extensions di modul bulid.gradle Anda seperti ini:

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

Tentu saja, Anda dapat mengonfigurasi jalur kelas plugin kotlin di build.gradle proyek Anda.


1
Dalam kasus saya (Android Studio 2.1.1, kotlin 1.0.2) tindakan "Configure kotlin in Project" mengonfigurasi kotlin di project build.gradle alih-alih Module's build.gradle, dan ini membantu.
Ivan Kušt

Periksa Anda ext.kotlin_versiondan tambahkan yang classpath...disebutkan di atas dalam proyek gradle. Dan tambahkan keduanya apply...ke app gradle.
Alston

33

Saya tidak dapat menemukannya di dokumentasi resmi , tetapi Anda harus menerapkan plugin dengan menambahkan yang berikut ini ke build.gradlefile Anda :

apply plugin: 'kotlin-android-extensions'

Ya, saya pikir karena kotlin-1.0.0-betaAnda perlu menerapkan plugin, tetapi saya tidak dapat menemukan sumber untuk itu! Terima kasih!
Orgmir

2
Catatan: Dokumentasi resmi telah diperbarui: kotlinlang.org/docs/tutorials/…
Maxime

1
Minta pengeditan atas jawaban yang diterima dan tambahkan info ini! :)
Ramon Moraes

Dokumentasi resmi sekarang menunjukkan blok kode kosong di mana apply plugin: 'kotlin-android-extensions'seharusnya.
Penjualan Dielson

10

Blok buildscript yang berisi dependensi kotlin-android-extensions tampaknya harus ada di app-module build.gradle, bukan di level teratas.


1
Saya pikir akan menjadi seperti ini; sebagian besar karma saya berasal dari menjawab pertanyaan bertahap dengan masalah serupa.
Ionoclast Brigham

8

Saya menemukan mengapa saya tidak bekerja. Blok saya salah tempat dan dengan memindahkan buildscript{}blok sebelum plugin sebagai berikut, saya membuatnya berfungsi:

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

Ini berhasil untuk saya. Apakah Anda kebetulan tahu mengapa hal itu memperbaikinya?
Joe

Satu-satunya jawaban yang menunjukkan dengan tepat di mana apply plugin: 'kotlin-android-extensions'perlu ditambahkan ... +1
Zelphir Kaltstahl

Tapi mengapa ini memperbaikinya?
Mo Hajr

5

tambahkan apply plugin: 'kotlin-android-extensions'di app/buildgradle.

jika sudah menambahkannya, coba hapus dan sinkronkan gradle, setelah sinkronisasi selesai, lalu tambahkan kembali dan Sync Gradle lagi. Ini bekerja untuk saya.



4

Masalah bagi saya adalah urutan penerapan plugin.

Anda harus menerapkan plugin kotlin-android sebelum plugin kotlin-android-extensions

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

1

Setelah menerapkan perbaikan yang disebutkan di atas, saya harus memulai ulang Android Studio untuk membuatnya berfungsi.


0

Beginilah cara kerjanya untuk saya. Ketika saya pertama kali mengonfigurasi Kotlin di Project, saya memilih versi 1.1.2-3 daripada 1.1.2-4 dan menambahkan baris berikut di file aplikasi build.gradle

apply plugin: 'kotlin-android-extensions'

setelah itu saya menyinkronkan build dan berfungsi seperti yang diharapkan.


0

Saya menemukan bahwa saya memiliki dukungan untuk C ++ dan Kotlin secara bersamaan yang menyebabkan masalah build.

Saat memulai proyek baru, pastikan dukungan C ++ tidak dicentang, dan dukungan Kotlin dicentang. Itu memperbaiki masalah saya.


0

Dalam kasus saya, saya telah memasukkan kode yang merujuk pada tampilan di companion object. Betapa konyolnya ..


0

Silakan coba tambahkan ke blok ketergantungan berikutnya:

dependencies {
...
compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.3.2'
...
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.