未解決の参照: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は、この行を挿入するように(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)
    }
}

私のソリューションは完全に異なっていたので、gradle.propertiesファイルからKotlin言語サポートを公式として削除しましたが、再び機能しました。実際、ファイルが壊れてランダムな文字列がいくつかあるので、ランダムな文字列に戻って修正しました。
Lalit Fauzdar

回答:


188

kotlin-android-extensionsbuildscriptの依存関係を追加します。

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

また、この回答をフルフィルする場合は、キャッシュの無効化/再起動が役立つことがあります
Beloo

38

Android Studio 2.0とkotlin 1.0.1-2を使用すると、同じ問題が発生します。プロジェクトのbuild.gradleでkotlin android拡張機能を構成することはできません。次のように、すべてのモジュールのbuild.gradleでkotlin android拡張機能を構成して構成する必要があります。

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」アクションは、モジュールのbuild.gradleの代わりにプロジェクトbuild.gradleでkotlinを構成し、これが役立ちました。
IvanKušt2016

を確認し、上記のプロジェクトグラドルにext.kotlin_version追加しますclasspath...。2つapply...をアプリグラドルに追加します。
Alston、

33

公式ドキュメントでは見つかりませんが、build.gradleファイルに以下を追加してプラグインを適用する必要があります。

apply plugin: 'kotlin-android-extensions'

はい、kotlin-1.0.0-betaプラグインを適用する必要があると思いますが、そのソースが見つかりません!ありがとう!
Orgmir 2016

2
注:公式のドキュメントが更新されました:kotlinlang.org/docs/tutorials/...
マキシム

1
承認された回答の編集をリクエストし、この情報を追加してください!:)
Ramon Moraes、

公式ドキュメントに、空のコードブロックが表示されapply plugin: 'kotlin-android-extensions'ます。
Dielsonセールス、2016

10

kotlin-android-extensions依存関係を含むbuildscriptブロックは、トップレベルのものではなく、app-module build.gradleにある必要があるようです。


1
私はそれがこのようなものになると思いました。私のカルマのほとんどは、同様の問題を伴うGradleの質問に答えることによるものです。
イオノクラストブリガム2016

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

これでうまくいきました。なぜそれがそれを修正したのか知っていますか?
Joe

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'


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.