web-dev-qa-db-ja.com

未解決の参照:kotlinx

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に変換します(ヘルプ-> findaction-> 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.*

そのため、この時点ではすべてseemsで問題ありません

しかし、これをコンパイルしようとすると、

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

notを実行したことに注意してください。KotlinAndroid拡張プラグインをインストールします。数日前の時点で、これはメインプラグインに含まれるようになり、廃止としてマークされています。 (実際、最新のプラグインがあるときにインストールしようとしても、新しいものは何もインストールされません)

誰が私が間違っているのかわかりますか?

主な活動

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

ビルドスクリプトの依存関係に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プラグインのバグです。トラッカーに issue を提出しました。

173
aga

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 Android拡張機能を含むkotlinプラグインを使用する場合でも、モジュールの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プラグインのクラスパスを構成できます。

36
JackRo

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

apply plugin: 'kotlin-Android-extensions'
32
Maxime

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

9
iajn

なぜ機能しないのかがわかりました。私のブロックが間違って配置されており、次のようにプラグインの前に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"
}
8
E-Kami

apply plugin: 'kotlin-Android-extensions'app/buildgradleを追加します。

既に追加している場合は、同期が完了したら削除してグラドルを同期し、再度追加してグラドルを同期してください。これは私のために働きます。

3
angryd

次のインポートを削除すると、問題が修正されました。

import Android.R
1
Nopx

ビルドの問題を引き起こしていたC++とKotlinを同時にサポートしていることがわかりました。

新しいプロジェクトを開始するときは、C++サポートがオフになっていることと、Kotlinサポートがチェックされていることを確認してください。これで問題は解決しました。

0
AJ Snow

これは私のために働いた方法です。 ProjectでKotlinを初めて構成したとき、1.1.2-4ではなく1.1.2-3バージョンを選択し、build.gradleアプリファイルに次の行を追加しました

apply plugin: 'kotlin-Android-extensions'

その後、ビルドを同期しましたが、期待どおりに機能しました。

0

私にとっての問題は、プラグインを適用した順序でした。

Kotlin-Android-extensionsプラグインの前にkotlin-Androidプラグインを適用する必要があります

apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'
0
lbenedetto