未解析引用: 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 (通过 help-> findaction-> 将 file 转换为 Kotlin)
  4. 为 Kotlin 配置项目

然后进入生成的 content _ main.xml 文件,为“ Hello World!”TextView 添加一个 id (Hello)。

<?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)
}
}
157696 次浏览

在构建脚本的依赖项中添加 kotlin-android-extensions:

1. 在你的项目级构建中

buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
}
}

并应用 kotlin-android-extensions插件:

2. 在模块级别的 build.gradle 中

apply plugin: 'kotlin-android-extensions'

我知道为什么我的没用了。我的代码块放错了地方,通过在插件之前移动 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"
}

包含 kotlin-android 扩展依赖关系的 buildscript 块显然需要位于 app-module build.gradle 中,而不是顶级的 build.gradle 中。

我在 正式文件中找不到它,但是你必须通过在 build.gradle文件中添加以下内容来应用这个插件:

apply plugin: 'kotlin-android-extensions'

当你使用 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 插件包含了 kotlin android 扩展,您也需要在 Module 的 build.gradle 中配置 kotlin-android 扩展,如下所示:

...
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 插件的类路径。

我就是这么做的。 当我第一次在 Project 中配置 Kotlin 时,我选择了1.1.2-3版本而不是1.1.2-4,并在 build.gradle 应用程序文件中添加了以下一行

apply plugin: 'kotlin-android-extensions'

在那之后,我同步了这个版本,它就像预期的那样工作了。

app/buildgradle中加入 apply plugin: 'kotlin-android-extensions'

如果您已经添加了它,尝试删除它和同步分级,当同步完成,然后添加回来,再次同步分级。这对我有用。

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

当启动一个新项目时,确保不检查 c + + 支持,并检查 Kotlin 支持。解决了我的问题。

删除下面的导入为我解决了这个问题。

import android.R

对我来说,问题在于应用插件的顺序。

您必须在 kotlin-android 扩展插件之前应用 kotlin-android 插件

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

在应用了上面提到的修复程序之后,我不得不重新启动 Android Studio 来使其正常工作。

在我的情况下,我把代码引用的观点在一个 companion object。多么愚蠢..。

对我来说,唯一有帮助的是点击“文件”-> “无效缓存/重新启动...”

在 macOS big sur 的 Android Studio 4.2 Beta 1中,我把 id 'kotlin-android-extensions'添加到应用程序级别的 build.gradle文件的插件部分。所以它看起来应该是这样的。

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

然后同步项目,它应该工作

使用喷气背包,你必须使用:

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

在我的案例中,android 工作室行分隔符改为 CRLF (我使用的是 Macbook)窗口设置。 当切换到 CR 修复我的错误

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

对我来说,我只需要将 id 'kotlin-android-extensions'添加到 build.gradle (模块: AppName.app)中的插件中 然后再同步。

如果你是在2021年,那么我想你在这里看到的大多数解决方案不会对你有任何帮助,所以试试这个

  1. 转到 Module build.gradle 文件

  2. 向 plugins 对象{}添加 id‘ kotlin-android- 增加’

  3. 转到文件点击同步项目与等级文件

然后回去试着导入 Kotlinx 应该可以

就我而言,我补充道:

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

在模块级 build.grade的末尾修复了问题。

有同样的问题

plugins {
id 'com.android.application'
id 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: "kotlin-kapt"
}

apply plugin:移至 id并重新启动

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

使用这个插件在你的应用程序项目“ Gradle script”文件夹中的“ build. Gradle (模块: project _ name)”文件夹中: “科特林-机器人-扩展” 然后同步项目。