해결되지 않은 참조 : kotlinx


108

Android Studio에서 Kotlin 및 Kotlin Android 확장 프로그램을 사용해 보려고합니다. Ubuntu 14.04의 Android Studio v 1.5.1과 OS X El Capitan의 Android Studio v 1.5.1에서 동일한 결과로 이것을 시도했습니다.

내가하는 일은 다음과 같습니다.

  1. Kotlin 플러그인 1.0.0-beta-35950-IJ141-11을 설치합니다.
  2. 비어있는 새 Android 프로젝트 만들기
  3. MainActivity 파일을 Kotlin으로 변환합니다 (help-> findaction-> convert file to kotlin).
  4. Kotlin 용 프로젝트 구성

그런 다음 생성 된 content_main.xml 파일로 이동하여 "Hello World!"에 대한 ID (hello)를 추가합니다. 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에서이 줄을 삽입하라는 메시지가 표시됩니다 (아래도 참조).

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

내 솔루션은 완전히 달랐고, gradle.properties 파일에서 공식적으로 Kotlin 언어 지원을 제거하고 다시 작동했습니다. 실제로 파일이 손상되어 임의의 문자열이있는 경우 임의의 문자열로 돌아가서 수정했습니다.
Lalit Fauzdar

답변:


188

kotlin-android-extensions빌드 스크립트의 종속성을 추가하십시오 .

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, 무효화 캐시가 / 다시 시작 도움이 될 수 fullfill에 경우에도주의
Beloo

38

Android Studio 2.0 및 kotlin 1.0.1-2를 사용하면 동일한 오류가 발생합니다. 프로젝트의 build.gradle에서 kotlin Android 확장을 구성 할 수 없습니다. 다음과 같이 모든 모듈의 build.gradle에서 Android 확장을 구성하고 kotlin해야합니다.

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 확장이 포함되어 있어도 모듈의 bulid.gradle에서 kotlin-android-extensions를 다음과 같이 구성해야합니다.

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

물론 프로젝트의 build.gradle에서 kotlin 플러그인의 클래스 경로를 구성 할 수 있습니다.


1
필자의 경우 (Android Studio 2.1.1, kotlin 1.0.2) "Configure kotlin in Project"작업은 Module의 build.gradle 대신 project build.gradle에서 kotlin을 구성했으며 이것이 도움이되었습니다.
이반 Kušt

프로젝트 gradle에서 위에서 언급 한 내용을 확인 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 2016

이제 공식 문서에는가 apply plugin: 'kotlin-android-extensions'있어야 하는 빈 코드 블록 이 표시됩니다.
Dielson Sales

10

kotlin-android-extensions 종속성을 포함하는 buildscript 블록은 최상위 레벨이 아닌 app-module build.gradle에 있어야합니다.


1
나는 이것이 이와 비슷한 것이라고 생각했다. 내 업의 대부분은 비슷한 문제로 gradle 질문에 대답하는 것입니다.
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 2017

5

추가 apply plugin: 'kotlin-android-extensions'에서 app/buildgradle.

이미 추가 한 경우 동기화가 완료되면 제거하고 gradle을 동기화 한 다음 다시 추가하고 Gradle을 다시 동기화합니다. 이것은 나를 위해 일합니다.



4

저에게 문제는 플러그인을 적용한 순서였습니다.

kotlin-android-extensions 플러그인 전에 kotlin-android 플러그인을 적용해야합니다.

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

1

위에서 언급 한 수정 사항을 적용한 후 Android Studio를 다시 시작해야 작동합니다.


0

이것이 나를 위해 일한 방법입니다. Project에서 Kotlin을 처음 구성 할 때 1.1.2-4 대신 1.1.2-3 버전을 선택하고 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.