相关疑难解决方法(0)

为什么不能使用POM文件中的maven依赖?

背景

我的任务是为开发人员提供一种方法,将单个依赖项添加到 Android 项目的 build.gradle 文件中,以使用我准备的一些(混淆的)SDK(AAR 文件 - Android 库)。

SDK 本身使用各种依赖项,因此它们在最终代码中可用很重要,这意味着使用 SDK 的人不会看到由于找不到类而导致的崩溃。

SDK 作为私有存储库存储在 Github 上,开发人员可以通过 Jitpack 使用,它会扫描存储库中的 POM 文件和其他一些文件。

单独使用 AAR 文件,您必须设置与 SDK 相同(或更新)的依赖项。

但是,如果您在发布时使用 POM 文件,则使用者(使用 SDK 的任何人)不需要编写 SDK 上的每个依赖项,因为它是从 POM 文件中添加的。

问题

出于某种原因,这种行为对我来说不存在。这意味着就好像 SDK 不使用任何依赖关系一样,所以如果我尝试使用任何依赖关系,我无法访问这些类,并且如果我在使用某些依赖关系时尝试使用 SDK,则会导致异常的 ClassNotFoundException。

起初我认为这是因为一些 Proguard 规则,但后来我注意到它也发生在 debug-variant 上(使用 SDK 的应用程序)。

例如,当库在依赖项中使用它时:

implementation 'androidx.security:security-crypto:1.1.0-alpha03'
Run Code Online (Sandbox Code Playgroud)

如果我不使用它,我将无法访问此依赖项的任何类,并且如果 SDK 尝试访问它的任何类,应用程序将崩溃。

因此,我必须添加 SDK 已经使用的所有依赖项,而不是使用 SDK 的单一依赖项。

我试过的

要生成 AAR 文件,我使用“assembleRelease”gradle 任务,而要生成 POM 文件,我使用“generatePomFileForReleasePublication”(或“publishReleasePublicationToMavenLocal”)gradle 任务。

该库有相当多的依赖项。这是它的 build.gradle 文件:

plugins {
    id 'com.android.library'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id …
Run Code Online (Sandbox Code Playgroud)

android dependency-management pom.xml maven jitpack

6
推荐指数
1
解决办法
634
查看次数

标签 统计

android ×1

dependency-management ×1

jitpack ×1

maven ×1

pom.xml ×1