141

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

20 に答える 20

39

Android Studio 2.0 と kotlin 1.0.1-2 を使用すると、同じ問題が発生します。プロジェクトの build.gradle で kotlin android 拡張機能を構成することはできません。次のように、すべてのモジュールの build.gradle で kotlin 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 プラグインのクラスパスを構成できます。

于 2016-04-10T05:24:26.087 に答える
34

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

apply plugin: 'kotlin-android-extensions'
于 2016-02-08T14:19:58.893 に答える
11

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

于 2016-01-21T22:12:25.653 に答える
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"
}
于 2015-12-13T11:57:56.030 に答える
5

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

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

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
于 2019-06-11T20:17:50.957 に答える
5

id 'kotlin-android-extensions'アプリレベルbuild.gradleファイルのプラグインセクションに追加するために、macOS big surのAndroid Studio 4.2 Beta 1で私にとってうまくいったこと。そのため、次のようになります。

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions'
}

次に、プロジェクトを同期すると、動作するはずです

于 2020-12-13T07:20:25.347 に答える
4

jetpack では、次を使用する必要があります。

build.gradle(アプリ)で

    buildFeatures {
        dataBinding true
        viewBinding true
    }

   plugins {
      id 'kotlin-parcelize'
   }

activity_main.xml

<androidx.constraintlayout.widget.ConstraintLayout
    tools:viewBindingIgnore="false">

MainActivity.kt

import com.example.appname.databinding.ActivityMainBinding // ActivityMain is for main_activity.xml, and so on for any other activity

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        binding.button.setOnClickListener {} // use binding.elementName
    }
}
于 2021-04-02T17:09:02.307 に答える
1

上記の修正を適用した後、Android Studio を再起動して動作させる必要がありました。

于 2019-10-10T09:22:31.470 に答える
0

私の場合、ビューを参照するコードをcompanion object. ばかげている..

于 2020-03-07T06:17:29.497 に答える