Android 应用程序在设置 Gradle SourceSets 后抛出 NoClassDefFoundError

问题描述 投票:0回答:1

我试图了解如何在 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 Studio apk viewer

有人可以解释一下我在这里做错了什么吗?

谢谢!

java android android-gradle-plugin build.gradle
1个回答
0
投票

试试这个:

android {
.....
    sourceSets.getByName("main") {
        java.srcDir("src/sample2/java")
    } 
}
© www.soinside.com 2019 - 2024. All rights reserved.