ClassNotFoundException:在路径上找不到类“androidx.work.Worker”:DexPathList

Ton*_*ony 2 android dex aar androidx

当我使用WorkManager的PeriodicWorkRequest时,我一直在尝试制作一个android库。它作为主机开发应用程序中的模块完美运行。但是,一旦我将其导出为 aar 文件并在另一个应用程序中使用它,我会收到以下错误,

java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/work/Worker;
.
.
.
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.work.Worker" on path: DexPathList[[zip file "/data/app/com.example.testapp-0WusKIYjC1qsHRMASLjm1Q==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.testapp-0WusKIYjC1qsHRMASLjm1Q==/lib/arm64, /system/lib64, /vendor/lib64]]
Run Code Online (Sandbox Code Playgroud)

知道我该如何解决这个问题吗?

ian*_*ake 6

AAR 本身不会嵌入或以其他方式编码有关传递依赖项的任何内容(例如 AAR 对 WorkManager 的依赖项),因此,如果您只是将 AAR 用作本地二进制依赖项,则需要重新声明所有传递依赖。

根据Gradle 声明依赖项文档,正确的依赖项采用 Maven 存储库(本地或远程)的形式。Maven 存储库除了托管 AAR 本身之外,还包含一个POM 文件,该文件声明您的库所依赖的传递依赖项。这可确保您的构建中包含的每个库只有一个版本(因为它可以消除多个库之间的重复传递依赖项)。

在本地使用项目时,您不会看到同样的问题,因为这些传递依赖项包含在构建过​​程中。

  • AAR 本身没有任何依赖关系的概念 - 它只是一个 jar、资源和清单。这就是为什么每个受人尊敬的库都不会像下载到本地目录中的 AAR 一样发布,而是作为 Maven 依赖项发布,而 Maven 依赖项确实具有传递依赖项的概念。 (2认同)