layoutcontainer findview extensions experimental android-studio kotlin kotlin-android-extensions

android-studio - extensions - kotlin findviewbyid



Referencia sin resolver: kotlinx (10)

Estoy tratando de probar Kotlin y las extensiones de Kotlin para Android en Android Studio. He intentado esto tanto en Android Studio v 1.5.1 en Ubuntu 14.04 como en Android Studio v 1.5.1 en OS X El Capitan con el mismo resultado.

Esto es lo que estoy haciendo:

  1. Instalo el complemento Kotlin 1.0.0-beta-35950-IJ141-11
  2. Crea un nuevo proyecto de Android en blanco
  3. Convierta el archivo MainActivity a Kotlin (a través de ayuda-> findaction-> convertir archivo a kotlin)
  4. Configure el proyecto para Kotlin

Luego entro en el archivo content_main.xml generado y agrego una identificación (hola) para el "¡Hola Mundo!" Vista de texto.

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

Luego, en MainActivity convertido, agrego una línea para configurar TextView. (mostrado a continuación). Android Studio luego me solicita (a través de alt-enter) que inserte esta línea (también se muestra a continuación)

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

En este punto todo parece estar bien

pero cuando trato de compilar esto me sale

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

Tenga en cuenta que no instalé el complemento de extensiones de Android Kotlin. Desde hace un par de días, ahora se supone que está incluido en el complemento principal y está marcado como obsoleto. (De hecho, si intentas instalarlo cuando tienes el último complemento, no hay nada nuevo instalado)

Alguien ve lo que estoy haciendo mal?

Actividad principal

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


Agregue kotlin-android-extensions en las dependencias de nuestro buildscript:

1. En su nivel de proyecto build.gradle

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

y aplique el kotlin-android-extensions :

2. En su nivel de módulo build.gradle

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

Respuesta original:

Lo más probable es que sea un error en el complemento Kotlin. He presentado un issue en su rastreador.


Así es como funcionó para mí. Cuando configuré Kotlin por primera vez en Project, seleccioné la versión 1.1.2-3 en lugar de 1.1.2-4 y agregué la siguiente línea en el archivo de aplicación build.gradle

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

después de eso sincronicé la compilación y funcionó como se esperaba.


Cuando usas Android Studio 2.0 y kotlin 1.0.1-2, encontrarás el mismo error. No puede configurar las extensiones de Android Kotlin en build.gradle de su proyecto, necesita configurar y Kotlin extensiones de Android en cada build.gradle de cada módulo de esta manera:

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

Lo más importante, incluso a través del complemento kotlin que incluye la extensión de Android kotlin, también debe configurar las extensiones de kotlin-android en el bulid.gradle de su Módulo de esta manera:

... apply plugin: ''kotlin-android-extensions'' ... classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"

Por supuesto, puede configurar classpath del complemento kotlin en build.gradle de su proyecto.


Descubrí que tenía soporte para C ++ y Kotlin al mismo tiempo, lo que estaba causando problemas de compilación.

Al comenzar un nuevo proyecto, asegúrese de que la compatibilidad con C ++ no esté marcada y que la compatibilidad con Kotlin esté marcada. Eso solucionó el problema para mí.


El bloque buildscript que contiene la dependencia kotlin-android-extensiones aparentemente necesita estar en el módulo de aplicación build.gradle, no en el de nivel superior.


El problema para mí fue el orden en que apliqué los complementos.

Debe aplicar el complemento kotlin-android antes del complemento kotlin-android-extensiones

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


Eliminar la siguiente importación solucionó el problema para mí.

import android.R


Encontré por qué el mío no funcionaba. Mis bloques estaban fuera de lugar y moviendo el bloque buildscript{} antes de los complementos de la siguiente manera, lo hice funcionar:

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


No puedo encontrarlo en la documentación oficial , pero debe aplicar el complemento agregando lo siguiente a su archivo build.gradle :

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


agregue el apply plugin: ''kotlin-android-extensions'' en la app/buildgradle .

si ya lo ha agregado, intente eliminarlo y sincronizar gradle, cuando se complete la sincronización, luego vuelva a agregarlo y sincronice Gradle nuevamente. Este trabajo para mi.