Tham khảo chưa được giải quyết: kotlinx


108

Tôi đang cố gắng dùng thử Kotlin và các tiện ích mở rộng Kotlin Android trong Android Studio. Tôi đã thử điều này cả trong Android Studio v 1.5.1 trên Ubuntu 14.04 và Android Studio v 1.5.1 trên OS X El Capitan với cùng một kết quả.

Đây là những gì tôi đang làm:

  1. Tôi cài đặt plugin Kotlin 1.0.0-beta-35950-IJ141-11
  2. Tạo một dự án Android trống mới
  3. Chuyển đổi tệp MainActivity thành Kotlin (thông qua help-> findaction-> chuyển đổi tệp sang kotlin)
  4. Định cấu hình dự án cho Kotlin

Sau đó, tôi truy cập tệp content_main.xml đã tạo và thêm một id (xin chào) cho "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>  

Sau đó, trong MainActivity đã chuyển đổi, tôi thêm một dòng để đặt TextView. (hình bên dưới). Sau đó, Android Studio sẽ nhắc tôi (thông qua alt-enter) để chèn dòng này (cũng được hiển thị bên dưới)

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

Vì vậy, tại thời điểm này mọi thứ có vẻ ổn

nhưng sau đó khi tôi cố gắng biên dịch cái này, tôi nhận được

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

Lưu ý rằng tôi đã không cài đặt plugin Kotlin Android extension. Kể từ một vài ngày trước, điều này hiện được cho là sẽ được đưa vào plugin chính và được đánh dấu là lỗi thời. (Trong thực tế, nếu bạn cố gắng cài đặt nó khi bạn có plugin mới nhất, thì không có gì mới được cài đặt)

Có ai thấy tôi đang làm gì sai không?

Hoạt động chủ yêu

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

Giải pháp của tôi hoàn toàn khác, tôi đã xóa hỗ trợ ngôn ngữ Kotlin là chính thức khỏi tệp gradle.properties và nó đã hoạt động trở lại. Trên thực tế, tệp đã bị hỏng và có một số chuỗi ngẫu nhiên, tôi đã sửa nó bằng cách quay lại chuỗi ngẫu nhiên.
Lalit Fauzdar

Câu trả lời:


188

Thêm kotlin-android-extensionsvào các phụ thuộc của buildcript của chúng tôi:

1. Trong build.gradle cấp dự án của bạn

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

và áp dụng kotlin-android-extensionsplugin:

2. Trong build.gradle cấp mô-đun của bạn

apply plugin: 'kotlin-android-extensions'

Câu trả lời ban đầu:

Nhiều khả năng đó là lỗi trong plugin Kotlin. Tôi đã gửi một vấn đề trên trình theo dõi của họ.


1
Đó là những gì tôi đã làm nhưng tôi vẫn gặp sự cố với 1.0.0-beta-3595 :(
E-Kami

Nó cũng không hoạt động với tôi (1.0.0-beta-4589) - bất kỳ giải pháp nào chưa? Chỉ cần thêm nhận xét vào vé trong trình theo dõi lỗi.
Steffen Funke

11
Tôi cũng gặp sự cố này trên 1.0.0-beta-4589. Bạn cũng phải thêm apply plugin: 'kotlin-android-extensions'vào tệp build.gradle của mình
Kio Krofovitch

1
Được thể hiện tốt hơn với biến $ kotlin_version:compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
KarolDepka

Cũng lưu ý nếu bạn fullfill anwer này, cache vô hiệu / khởi động lại có thể giúp
Beloo

38

Khi bạn sử dụng Android Studio 2.0 và kotlin 1.0.1-2, bạn sẽ gặp phải sai lầm tương tự. Bạn không thể định cấu hình các tiện ích mở rộng android kotlin trong build.gradle của dự án, bạn cần định cấu hình và cấu hình các tiện ích mở rộng android kotlin trong mọi build.gradle của Module như thế này:

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

Quan trọng nhất, ngay cả khi thông qua plugin kotlin bao gồm tiện ích mở rộng android kotlin, bạn cũng cần phải định cấu hình các tiện ích mở rộng kotlin-android-trong bulid.gradle của Mô-đun của bạn như sau:

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

Tất nhiên, bạn có thể định cấu hình classpath của plugin kotlin trong build.gradle của dự án.


1
Trong trường hợp của tôi (Android Studio 2.1.1, kotlin 1.0.2), hành động "Định cấu hình kotlin trong Dự án" đã định cấu hình kotlin trong dự án build.gradle thay vì build.gradle của Mô-đun và điều này đã hữu ích.
Ivan Kušt

Kiểm tra của bạn ext.kotlin_versionvà thêm classpath...được đề cập ở trên trong lớp dự án. Và thêm cả hai apply...vào gradle ứng dụng.
Alston

33

Tôi không thể tìm thấy nó trong tài liệu chính thức , nhưng bạn phải áp dụng plugin bằng cách thêm phần sau vào build.gradletệp của mình :

apply plugin: 'kotlin-android-extensions'

Có, tôi nghĩ vì kotlin-1.0.0-betabạn cần phải áp dụng plugin, nhưng tôi không thể tìm thấy nguồn cho điều đó! Cảm ơn!
Orgmir

2
Lưu ý: Tài liệu chính thức đã được cập nhật: kotlinlang.org/docs/tutorials/…
Maxime

1
Yêu cầu chỉnh sửa câu trả lời được chấp nhận và thêm thông tin này! :)
Ramon Moraes

Tài liệu chính thức hiện hiển thị một khối mã trống ở nơi apply plugin: 'kotlin-android-extensions'cần phải có.
Bán hàng Dielson

10

Khối buildcript có chứa phần phụ thuộc kotlin-android-extensions rõ ràng cần phải nằm trong app-module build.gradle, không phải ở cấp cao nhất.


1
Tôi nghĩ nó sẽ như thế này; hầu hết nghiệp của tôi là từ việc trả lời một câu hỏi bậc thang với một vấn đề tương tự.
Ionoclast Brigham

8

Tôi đã tìm thấy lý do tại sao của tôi không hoạt động. Các khối của tôi đã bị đặt sai vị trí và bằng cách di chuyển buildscript{}khối trước các plugin như sau, tôi đã làm cho nó hoạt động:

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

Điều này đã làm việc cho tôi. Bạn có tình cờ biết tại sao điều đó lại khắc phục được không?
Joe

Câu trả lời chỉ hiển thị chính xác nơi apply plugin: 'kotlin-android-extensions'cần phải được bổ sung ... 1
Zelphir Kaltstahl

Nhưng tại sao điều này lại sửa chữa nó?
Mo Hajr,

5

thêm apply plugin: 'kotlin-android-extensions'vào app/buildgradle.

nếu bạn đã thêm nó, hãy thử xóa nó và đồng bộ hóa gradle, khi quá trình đồng bộ hóa hoàn tất, sau đó thêm lại và Sync Gradle một lần nữa. Điều này làm việc cho tôi.



4

Vấn đề đối với tôi là thứ tự mà tôi áp dụng các plugin.

Bạn phải áp dụng plugin kotlin-android trước plugin kotlin-android-extensions

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

1

Sau khi áp dụng các bản sửa lỗi được đề cập ở trên, tôi phải khởi động lại Android Studio để nó hoạt động.


0

Đây là cách nó làm việc cho tôi. Khi tôi lần đầu tiên định cấu hình Kotlin trong Project, tôi đã chọn phiên bản 1.1.2-3 thay vì 1.1.2-4 và thêm dòng sau vào tệp ứng dụng build.gradle

apply plugin: 'kotlin-android-extensions'

sau đó tôi đã đồng bộ hóa bản dựng và nó hoạt động như mong đợi.


0

Tôi phát hiện ra rằng tôi đã hỗ trợ C ++ và Kotlin cùng lúc, điều này đang gây ra sự cố xây dựng.

Khi bắt đầu một dự án mới, hãy đảm bảo rằng hỗ trợ C ++ được bỏ chọn và hỗ trợ Kotlin được chọn. Điều đó đã khắc phục sự cố cho tôi.


0

Trong trường hợp của tôi, tôi đã đặt mã tham chiếu chế độ xem trong a companion object. Thật ngớ ngẩn ..


0

Vui lòng thử thêm vào khối phụ thuộc tiếp theo:

dependencies {
...
compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.3.2'
...
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.