7

我定义了自己的风格并设置了 sourceSet:

sourceSets {    
    main.java.srcDirs += 'src/main/kotlin'           // WORKS
    myflavor.java.srcDirs += 'src/myflavor/kotlin'   // DOESN'T WORK
}

这是我的项目结构:

在此处输入图像描述

但是...我收到以下错误:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{xyz/xyz.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "xyz.MainActivity" on path: DexPathList[[zip file "/data/app/xyz/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "xyz.MainActivity" on path: DexPathList[[zip file "/data/app/xyz/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Suppressed: java.lang.ClassNotFoundException: xyz.MainActivity
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
        ... 13 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

但是,使用 main sourceSet 有效...我将不胜感激您的帮助。

4

6 回答 6

13

这是 Android 的 kotlin-gradle 插件中的一个错误,它将在 0.9.488 或更高版本中修复。

于 2014-11-05T15:19:01.350 回答
9

就我而言,我忘记apply plugin: 'kotlin-android'了 gradle 文件。虽然我的项目构建成功,但它java.lang.ClassNotFoundException在运行时抛出。我正在使用 Kotlin 1.1.1

于 2017-03-19T13:55:58.150 回答
2

尝试将两者都添加到 main.java.srcDirs 因为您希望它们都编译是吗?

sourceSets {    
    main.java.srcDirs += 'src/main/kotlin'         
    main.java.srcDirs += 'src/myflavor/kotlin'   
}
于 2014-11-04T12:27:38.017 回答
2

当我将源代码转换为 kotlin 时,我也得到了错误。我的解决方法是更改​​ gradle 中的 sourceSets。

之前

sourceSets {     
    main.java.srcDirs += 'src/main/kotlin'
}

现在

sourceSets {     
    main.java.srcDirs += 'src/main/java'
}
于 2016-02-21T21:33:56.223 回答
0

我可以确认,至少在Kotlin 插件版本 1.1.1 和 1.1.2中,该错误已修复,您可以使用不同风格的 kotlin 文件夹(推荐而不是 java 文件夹):

sourceSets {
    androidTest {
        java.srcDir file('src/androidTest')
    }
    test.java.srcDirs += 'src/test/kotlin'
    main.java.srcDirs += 'src/main/kotlin'
    flavor1.java.srcDirs += 'src/flavor1/kotlin'
    flavor2.java.srcDirs += 'src/flavor2/kotlin'
}
于 2017-05-05T08:48:19.913 回答
0

我遇到过同样的问题。就我而言,我正在构建一个库和一个测试应用程序来访问该库。

当我将项目转换为 kotlin 时,它会将相关的 kotlin 依赖项添加到库的 gradle 文件中,而不是主应用程序。

确保以下行位于所有相关的 gradle 文件中:

apply plugin: "kotlin-android"

dependencies {
...
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
...
}
于 2017-08-04T23:16:31.583 回答