未解决的参考: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->将文件转换为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输入)插入此行(也如下所示)

import kotlinx.android.synthetic.main.content_main.*

所以在这一点上一切似乎都很好

但是当我尝试编译它时,我得到了

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

请注意,我并没有安装科特林的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

Answers:


188

添加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 2015年

也不适合我(1.0.0-beta-4589)-有解决方案吗?刚刚在错误跟踪器中向故障单添加了注释。
Steffen Funke

11
我在1.0.0-beta-4589上也遇到了这个问题。您还必须添加apply plugin: 'kotlin-android-extensions'到build.gradle文件中
Kio Krofovitch '16

1
最好用$ kotlin_version变量表示:compile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
KarolDepka '16

另请注意,如果您完全满足此要求,则无效的缓存/重新启动可能会有所帮助
Beloo

38

当您使用Android Studio 2.0和kotlin 1.0.1-2时,会出现相同的错误。您无法在项目的build.gradle中配置kotlin android扩展,需要在每个Module的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 android扩展的kotlin插件,您也需要像下面这样在Module的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),“在项目中配置kotlin”操作在项目build.gradle中配置了kotlin,而不是在Module的build.gradle中进行了配置,这很有帮助。
伊万·库什特(IvanKušt)2016年

检查您的项目,并在项目gradle中ext.kotlin_version添加classpath...上述内容。并将两者添加apply...到应用程序gradle。
Alston

33

我在官方文档中找不到它,但是您必须通过在build.gradle文件中添加以下内容来应用插件:

apply plugin: 'kotlin-android-extensions'

是的,我想既然kotlin-1.0.0-beta您需要应用插件,但是我找不到它的来源!谢谢!
Orgmir'2

2
注:官方文档已更新:kotlinlang.org/docs/tutorials/...
马克西姆

1
要求对接受的答案进行编辑,并附加此信息!:)
Ramon Moraes

现在,官方文档显示apply plugin: 'kotlin-android-extensions'应在的空白代码块。
Dielson Sales's

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 '16

但是为什么要解决这个问题呢?
Mo Hajr '17

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-3版本而不是1.1.2-4版本,并在build.gradle应用文件中添加了以下行

apply plugin: 'kotlin-android-extensions'

之后,我同步了构建,并按预期工作。


0

我发现我同时支持C ++和Kotlin,这导致了构建问题。

启动新项目时,请确保未选中C ++支持,并且已选中Kotlin支持。那为我解决了问题。


0

就我而言,我已将引用该视图的代码放在中companion object。真傻


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.