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:
- 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)
- 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.