ข้อมูลอ้างอิงที่ไม่ได้รับการแก้ไข: 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-> แปลงไฟล์เป็น kotlin)
  4. กำหนดค่าโครงการสำหรับ Kotlin

จากนั้นไปที่ไฟล์ content_main.xml ที่สร้างขึ้นและเพิ่ม id (สวัสดี) สำหรับ "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)
    }
}

วิธีแก้ปัญหาของฉันแตกต่างไปจากเดิมอย่างสิ้นเชิงฉันลบการสนับสนุนภาษา Kotlin อย่างเป็นทางการออกจากไฟล์ gradle.properties และใช้งานได้อีกครั้ง อันที่จริงไฟล์เสียหายและมีสตริงแบบสุ่มฉันแก้ไขโดยกลับไปที่สตริงแบบสุ่ม
Lalit Fauzdar

คำตอบ:


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 ของคุณด้วย
Kio Krofovitch

1
แสดงได้ดีขึ้นด้วยตัวแปร $ kotlin_version:compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
KarolDepka

นอกจากนี้โปรดทราบว่าหากคุณเติมเต็ม anwer นี้แคชที่ไม่ถูกต้อง / การรีสตาร์ทอาจช่วยได้
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"

แน่นอนคุณสามารถกำหนดค่า classpath ของปลั๊กอิน kotlin ใน build.gradle ของโปรเจ็กต์ของคุณ


1
ในกรณีของฉัน (Android Studio 2.1.1, kotlin 1.0.2) การดำเนินการ "กำหนดค่า kotlin ในโครงการ" กำหนดค่า kotlin ในโครงการ build.gradle แทนที่จะเป็น build.gradle ของโมดูลและสิ่งนี้ช่วยได้
Ivan Kušt

ตรวจสอบ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/…
Maxime

1
ขอแก้ไขคำตอบที่ยอมรับและต่อท้ายข้อมูลนี้! :)
Ramon Moraes

ตอนนี้เอกสารอย่างเป็นทางการแสดงบล็อกโค้ดว่างที่apply plugin: 'kotlin-android-extensions'ควรจะเป็น
Dielson Sales

10

เห็นได้ชัดว่าบล็อก buildscript ที่มีการขึ้นต่อกันของ kotlin-android-extensions จะต้องอยู่ใน build.gradle ของแอปโมดูลไม่ใช่ในระดับบนสุด


1
ฉันคิดว่ามันจะเป็นแบบนี้ กรรมส่วนใหญ่ของฉันมาจากการตอบคำถามระดับประถมที่มีปัญหาคล้าย ๆ กัน
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

แต่ทำไมถึงแก้ไขได้?
Mo Hajr

5

เพิ่ม apply plugin: 'kotlin-android-extensions'ในapp/buildgradleใน

หากคุณได้เพิ่มไปแล้วให้ลองลบออกและซิงค์ gradle เมื่อการซิงค์เสร็จสมบูรณ์จากนั้นเพิ่มกลับเข้าไปและ Sync Gradle อีกครั้ง งานนี้สำหรับฉัน



4

ปัญหาสำหรับฉันคือลำดับที่ฉันใช้ปลั๊กอิน

คุณต้องใช้ปลั๊กอิน kotlin-android ก่อนปลั๊กอิน kotlin-android-extensions

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


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. งี่เง่าแค่ไหน ..


0

โปรดลองเพิ่มในบล็อกการพึ่งพาต่อไป:

dependencies {
...
compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.3.2'
...
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.