我试图了解如何在 build.gradle.kts 文件中设置源集。为此,我有一个测试项目。项目结构如下-
应用程序
-src
--主要
---java
----com.example.myapplication
-----MainActivity.kt
--样本2
---java
----com.example.myapp.legacy
-----LegacyFile.java
LegacyFile.java
package com.example.myapp.legacy;
public class LegacyFile {
}
在这里,我想在 MainActivity.kt 文件中创建 LegacyFile 的实例 -
override fun onCreate(savedInstanceState: Bundle?) {
....
val legacyFile = LegacyFile()
}
因此,我将以下行添加到 app/build.gradle.kts 文件中 -
android {
.....
sourceSets.getByName("main").apply {
kotlin.setSrcDirs(listOf("src/sample2/java"))
}
}
现在,项目编译成功了。但是,当我运行应用程序时,它会抛出异常 -
致命异常:主要 进程:com.example.myapplication,PID:2436 java.lang.NoClassDefFoundError:无法解决以下问题: Lcom/example/myapp/legacy/LegacyFile; 在 com.example.myapplication.MainActivity.onCreate(MainActivity.kt:25) ..... 引起:java.lang.ClassNotFoundException: 没有找到类 路径上的“com.example.myapp.legacy.LegacyFile”:DexPathList[[dex 文件 “/data/data/com.example.myapplication/code_cache/.overlay/base.apk/classes5.dex”, 压缩文件 “/data/app/~~5E7UPyWAZdlsGbzLHVOIJw==/com.example.myapplication-kmtHz5UXr_gzaXYqPtpKyA==/base.apk”],nativeLibraryDirectories=[/data/app/~~5E7UPyWAZdlsGbzLHVOIJw==/com.example.myapplication-kmtHz5UXr_gzaXYqPtpKyA= =/lib/x86_64, /system/lib64, /system_ext/lib64]]
当我检查 apk 文件时,我可以看到 LegacyFile -
有人可以解释一下我在这里做错了什么吗?
谢谢!
试试这个:
android {
.....
sourceSets.getByName("main") {
java.srcDir("src/sample2/java")
}
}