Estoy intentando probar Kotlin y las extensiones de Android de Kotlin en Android Studio. Probé 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:
- Instalo el complemento Kotlin 1.0.0-beta-35950-IJ141-11
- Crea un nuevo proyecto de Android en blanco
- Convierta el archivo MainActivity a Kotlin (a través de ayuda-> findaction-> convertir archivo a kotlin)
- Configurar 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 la MainActivity convertida, agrego una línea para establecer TextView. (mostrado a continuación). Android Studio me pide (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.*
Entonces en este punto todo parece estar bien
pero luego, cuando trato de compilar esto, obtengo
Unresolved reference: kotlinx
Unresolved reference: kotlinx
Unresolved reference: hello
Tenga en cuenta que Yo no instalo la Kotlin Android extensiones plugin. A partir de hace un par de días, se supone que ahora está incluido en el complemento principal y está marcado como obsoleto. (De hecho, si intenta instalarlo cuando tiene el último complemento, no se instala nada nuevo)
¿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)
}
}
Respuestas:
Agregue
kotlin-android-extensions
las dependencias de nuestro buildscript:1. En su build.gradle a nivel de proyecto
y aplicar el
kotlin-android-extensions
complemento:2. En su build.gradle a nivel de módulo
Respuesta original:
Lo más probable es que sea un error en el complemento Kotlin. Presenté un problema en su rastreador.
fuente
apply plugin: 'kotlin-android-extensions'
a su archivo build.gradlecompile "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
Cuando usa Android Studio 2.0 y kotlin 1.0.1-2, obtendrá el mismo error. No puede configurar las extensiones de Android kotlin en build.gradle de su proyecto, necesita configurar y las extensiones de Android kotlin en build.gradle de cada módulo de esta manera:
Lo más importante, incluso a través del complemento kotlin que incluye la extensión kotlin para Android, también necesita configurar las extensiones kotlin-android-extensions en el bulid.gradle de su módulo de esta manera:
Por supuesto, puede configurar la ruta de clase del complemento kotlin en el archivo build.gradle de su proyecto.
fuente
ext.kotlin_version
y agregue loclasspath...
mencionado anteriormente en el proyecto gradle. Y agregue los dosapply...
a la aplicación gradle.No puedo encontrarlo en la documentación oficial , pero debe aplicar el complemento agregando lo siguiente a su
build.gradle
archivo:fuente
kotlin-1.0.0-beta
necesitas aplicar el complemento, ¡pero no puedo encontrar una fuente para eso! ¡Gracias!apply plugin: 'kotlin-android-extensions'
debería estar.El bloque buildscript que contiene la dependencia kotlin-android-extensions aparentemente necesita estar en el módulo de aplicación build.gradle, no en el de nivel superior.
fuente
Descubrí por qué el mío no funcionó. Mis bloques se extraviaron y al mover el
buildscript{}
bloque antes de los complementos de la siguiente manera, lo hice funcionar:fuente
apply plugin: 'kotlin-android-extensions'
debe agregar ... +1añadir
apply plugin: 'kotlin-android-extensions'
enapp/buildgradle
.si ya lo ha agregado, intente eliminarlo y sincronizar Gradle, cuando la sincronización esté completa, luego agréguelo y sincronice Gradle nuevamente. Esto funciona para mí.
fuente
La eliminación de la siguiente importación solucionó el problema.
fuente
El problema para mí fue el orden en que apliqué los complementos.
Debe aplicar el complemento kotlin-android antes que el complemento kotlin-android-extensions
fuente
Después de aplicar las correcciones mencionadas anteriormente, tuve que reiniciar Android Studio para que funcionara.
fuente
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 la aplicación build.gradle
después de eso, sincronicé la compilación y funcionó como se esperaba.
fuente
Descubrí que tenía soporte para C ++ y Kotlin al mismo tiempo, lo que estaba causando problemas de compilación.
Al iniciar un nuevo proyecto, asegúrese de que la compatibilidad con C ++ esté desmarcada y la compatibilidad con Kotlin esté marcada. Eso me solucionó el problema.
fuente
En mi caso, puse el código que hace referencia a la vista en un archivo
companion object
. Que tonto..fuente
Intente agregar al bloque de dependencia lo siguiente:
fuente