我定义了自己的味道并设置了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工作... 我将非常感谢你的帮助。
答案 0 :(得分:12)
这是Android的kotlin-gradle插件中的一个错误,它将修复为0.9.488或更高版本。谢谢你的举报!
答案 1 :(得分:9)
在我的情况下,我忘记了gradle文件中的apply plugin: 'kotlin-android'
。虽然我的项目已成功构建,但它会在运行时抛出java.lang.ClassNotFoundException
。我正在使用Kotlin 1.1.1
答案 2 :(得分:2)
尝试将两者都添加到main.java.srcDirs中,因为您希望它们都编译是吗?
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
main.java.srcDirs += 'src/myflavor/kotlin'
}
答案 3 :(得分:2)
当我将源码转换为kotlin时,我也得到了错误。我的修复是在gradle中更改sourceSets。
<强>之前强>:
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
立即强>:
sourceSets {
main.java.srcDirs += 'src/main/java'
}
答案 4 :(得分: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'
}
答案 5 :(得分:0)
我有同样的问题。就我而言,我正在构建一个库和一个测试应用程序来访问该库。
当我将项目转换为kotlin时,它将相关的kotlin依赖项添加到库的gradle文件中,但不是主应用程序。
确保所有相关的gradle文件中都包含以下行:
apply plugin: "kotlin-android"
dependencies {
...
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
...
}