J'essaie d'essayer Kotlin et les extensions Android Kotlin dans Android Studio. J'ai essayé cela à la fois dans Android Studio v 1.5.1 sur Ubuntu 14.04 et dans Android Studio v 1.5.1 sur OS X El Capitan avec le même résultat.
Voici ce que je fais:
Je vais ensuite dans le fichier content_main.xml généré et ajoute un identifiant (bonjour) pour le message "Hello World!" Affichage.
<?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>
Ensuite, dans MainActivity converti, j'ajoute une ligne pour définir le TextView. (ci-dessous) . Android Studio me demande ensuite (via alt-enter) d'insérer cette ligne (voir aussi ci-dessous)
import kotlinx.Android.synthetic.main.content_main.*
Donc, à ce stade, tout semble bien
mais quand j'essaie de compiler cela, je reçois
Unresolved reference: kotlinx
Unresolved reference: kotlinx
Unresolved reference: hello
Notez que j’ai installé pas le plug-in d’extensions Kotlin Android. Il y a quelques jours, il est censé être inclus dans la fiche principale et est marqué comme obsolète. (En fait, si vous essayez de l'installer avec le dernier plugin, rien de nouveau n'est installé)
Quelqu'un voit ce que je fais mal?
Activité principale
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)
}
}
Ajoutez kotlin-Android-extensions
dans les dépendances de notre buildscript:
1. Dans votre build.gradle au niveau du projet
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-Android-extensions:$kotlin_version"
}
}
et appliquez le plugin kotlin-Android-extensions
:
2. Dans votre build.gradle au niveau du module
apply plugin: 'kotlin-Android-extensions'
_ {Réponse originale:} _
Très probablement, c'est un bug dans le plugin Kotlin. J'ai déposé un problème sur leur traqueur.
Lorsque vous utilisez Android Studio 2.0 et kotlin 1.0.1-2, vous obtenez le même problème. Vous ne pouvez pas configurer les extensions Android Kotlin dans le build.gradle de votre projet, vous devez configurer et les extensions Android Kotlin dans le build.gradle de chaque module comme ceci:
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"
}
Plus important encore, même à travers le plugin kotlin inclus l'extension kotlin Android, vous devez également configurer les extensions kotlin-Android dans le module bulid.gradle de votre module comme suit:
...
apply plugin: 'kotlin-Android-extensions'
...
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-Android-extensions:$kotlin_version"
Bien sûr, vous pouvez configurer le chemin d'accès aux classes du plug-in kotlin dans le fichier build.gradle de votre projet.
Je ne le trouve pas dans la documentation officielle , mais vous devez appliquer le plugin en ajoutant ce qui suit dans votre fichier build.gradle
:
apply plugin: 'kotlin-Android-extensions'
Le bloc de buildscript contenant la dépendance kotlin-Android-extensions doit apparemment se trouver dans le module de construction app-module, pas dans celui de niveau supérieur.
J'ai trouvé pourquoi le mien ne fonctionnait pas. Mes blocs ont été égarés et en déplaçant le bloc buildscript{}
avant les plugins, procédez comme suit:
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"
}
ajoutez apply plugin: 'kotlin-Android-extensions'
dans app/buildgradle
.
si vous l'avez déjà ajouté, essayez de le supprimer et de synchroniser le dégradé une fois la synchronisation terminée, puis rajoutez-le et synchronisez-le à nouveau. Ce travail pour moi.
J'ai découvert que j'avais simultanément le support de C++ et de Kotlin, ce qui posait des problèmes de construction.
Lors du démarrage d'un nouveau projet, assurez-vous que la prise en charge de C++ n'est pas cochée et que la prise en charge de Kotlin est cochée. Cela a résolu le problème pour moi.
Voici comment cela a fonctionné pour moi… Lorsque j'ai configuré Kotlin pour la première fois dans Project, j'ai sélectionné la version 1.1.2-3 au lieu de 1.1.2-4 et ajouté la ligne suivante dans le fichier d'application build.gradle
apply plugin: 'kotlin-Android-extensions'
après cela, j'ai synchronisé la construction et cela a fonctionné comme prévu.
Supprimer l’importation suivante a corrigé le problème pour moi.
import Android.R
Le problème pour moi était l'ordre dans lequel j'ai appliqué les plugins.
Vous devez appliquer le plugin kotlin-Android avant le plugin kotlin-Android-extensions
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'