Exécuter la classe Kotlin simple avec la fonction principale dans android studio

j'essaie de me familiariser avec Kotlin pour l'utiliser dans mes applications android. Donc d'abord je veux essayer quelques exemples simples de kotlin, juste pour me familiariser avec la syntaxe de kotlin.

j'ai fait une classe appelée Main.kt dans mon projet android avec la méthode principale.

fun main(args: Array<String>) {
println("Hello World"); }

Android studio me montre une icône kotlin à gauche de la méthode principale et quand je clique sur cette icône, Il me montre ci-dessous trois option:

1) Run Mainkt

2) Debug Mainkt

3) Exécuter Mainkt avec la couverture

j'ai choisi le premier mais il me jette

Exception in thread "main" java.lang.ClassNotFoundException: com.vikalp.kotlin.MainKt
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:107)

je suis coincé avec un petit problème. Faites-moi savoir si quelqu'un d'entre vous a fait face à un problème comme celui-ci et quelle est la solution.

22
demandé sur Vikalp 2017-06-29 13:48:08

8 réponses

vous pouvez créer un nouveau module de bibliothèque Java où vous pouvez exécuter des projets Non-Android, voir cette réponse pour les instructions. C'est une question liée à Java, mais cela devrait fonctionner quand même avec les fonctions main de Kotlin. Edit: je ne peux pas obtenir ce droit maintenant.

vous pouvez également utiliser IntelliJ idée à la place qui est un Java/Kotlin/etc. IDE au lieu D'un androïde, la communauté edition est gratuite et supporte Kotlin.

si vous avez juste besoin d'exécuter du code vraiment simple, vous pouvez aussi le faire en ligne ici: https://try.kotlinlang.org /

3
répondu zsmb13 2017-06-29 11:51:03

comme mentionné dans le suivi des problèmes, une solution temporaire est d'ajouter ce qui suit à la racine build.gradle script:

subprojects { subProject ->
    afterEvaluate {
        if (subProject.plugins.hasPlugin("kotlin") && subProject.plugins.hasPlugin("java-library")) {
            subProject.kotlin.copyClassesToJavaOutput = true
            subProject.jar.duplicatesStrategy = DuplicatesStrategy.EXCLUDE
        }
    }
}

voir: https://issuetracker.google.com/issues/68021152#comment12

3
répondu Jared Rummler 2018-03-26 05:16:26
class Main {
companion object {
    @JvmStatic fun main(args: Array<String>) {
        println("Hello!")
    }
}

ou Il suffit de créer une configuration avec la classe principale comme "MainKt".

enter image description here

2
répondu Maxim Firsoff 2017-10-25 04:58:59

ce n'est tout simplement pas possible à partir de maintenant dans Android Studio 3.0.

il y a déjà un bug déposé pour cela: https://issuetracker.google.com/issues/68021152

1
répondu Henry 2017-12-20 11:04:10

j'ai fait face au même problème et une solution est d'exécuter votre code dans une classe test sous test dossier, puis droit-cliquez sur Run {your test class}

c'est suffisant si vous voulez seulement jouer avec Kotlin.

1
répondu Miguel Garcia 2018-01-24 15:30:26

peut-être que cette méthode a fonctionné utiliser gradle-3.3 , au lease il a fonctionné pour moi.

1
répondu xwang 2018-05-06 06:49:56

la manière la plus simple est de créer un nouveau module de bibliothèque Java comme ce , et de le configurer pour Kotlin.

Vous devez aussi ajouter ceci dans votre construction.Grad du module importé:

dependencies {
    runtimeClasspath files(compileKotlin.destinationDir)
}
0
répondu Shahzad Akram 2018-07-14 21:13:18

testé sur Android Studio 3.1.3

notez qu'il s'agit d'une version modifiée de mon autre réponse .

en utilisant cette méthode, vous pouvez avoir des modules Java/Kotlin et des modules Android dans le même projet et aussi avoir la possibilité de compiler et d'exécuter des modules Java/Kotlin en tant que projets autonomes.

  1. ouvrez votre projet Android sur Android Studio. Si vous n'en avez pas, créez-en un.
  2. Cliquez Sur Fichier > Nouveau Module . Sélectionnez bibliothèque Java et cliquez sur suivant .
  3. remplissez le nom du paquet, etc et cliquez sur terminer . Vous devriez maintenant voir un module Java dans votre projet Android.
  4. ajoutez votre code Java / Kotlin au module Java que vous venez de créer.
  5. Cliquez sur le menu déroulant à gauche du bouton exécuter. Cliquez Sur Pour Modifier Les Configurations...
  6. Dans la nouvelle fenêtre, cliquez sur le signe + en haut à gauche de la fenêtre et sélectionnez Application
  7. une nouvelle configuration d'application doit apparaître, entrer dans les détails tels que votre classe principale et classpath de votre module.
  8. , Cliquez sur OK .
  9. ensuite, nous avons besoin d'ajouter le plugin Kotlin. Ajouter le code suivant à votre niveau de projet build.gradle (les lignes à ajouter sont indiquées par >>> ):

    buildscript {
        >>> ext.kotlin_version = '1.2.51'
        repositories {
            google()
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:3.1.3'
            >>> classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    ...
    
  10. ajouter le code suivant à votre niveau de module build.gradle (les lignes à ajouter sont indiquées par >>> ):

    apply plugin: 'java-library'
    >>> apply plugin: 'kotlin'
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        >>> implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
        >>> runtimeClasspath files(compileKotlin.destinationDir)
    }
    ...
    

Maintenant, si vous cliquez sur exécuter, cela devrait compiler et exécuter votre Module Java/Kotlin.

si vous obtenez l'erreur Error: Could not find or load main class... , entrez simplement votre classe principale (COMME VOUS l'avez fait à l'étape 7) à nouveau, même si le champ est déjà rempli. Cliquez sur Apply et ensuite cliquez sur Ok .

0
répondu idunnololz 2018-07-25 06:06:33