gpt4 book ai didi

android - 是否可以在运行时获取依赖版本,包括从库本身获取?

转载 作者:行者123 更新时间:2023-12-05 00:00:44 37 4
gpt4 key购买 nike

背景

假设我创建了一个名为“MySdk”的 Android 库,并将其发布到 Jitpack/Maven 上。

SDK 的用户只需添加以下依赖项即可使用它:

implementation 'com.github.my-sdk:MySdk:1.0.1'

我想得到的是它的“1.0.1”部分,无论我是从 Android 库本身(对于发送到使用哪个版本的 SDK 服务器很有用)还是从使用它的应用(可用于报告特定问题,包括通过 Crashlytics)。

问题

我找不到任何反射或 gradle 任务来达到它。

我尝试过的

搜索它,如果我确实在 Android 库(用作依赖项)上工作,我发现我可以通过代码自己管理版本。

有人说我可以使用库的包名的 BuildConfig,但这意味着如果我在发布依赖项之前忘记更新代码,它将使用错误的值。使用此方法的示例:

plugins {
...
}
final def sdkVersion = "1.0.22"

android {
...
buildTypes {
release {
...
buildConfigField "String", "SDK_VERSION", "\"" + sdkVersion + "\""
}
debug {
buildConfigField "String", "SDK_VERSION", "\"" + sdkVersion + "-unreleased\""
}
}

用法只是检查 BuildConfig.SDK_VERSION 的值(构建后)。

另一种可能的解决方案可能是来自 Android 库中的 gradle 任务,每当您构建使用此库的应用程序时,它就会被强制启动。但是,我没找到怎么做(找到了一些东西 here )

问题

是否可以从依赖项的 Android 库(当然还有使用它的应用程序)中查询依赖项版本,以便我可以在运行时使用它?

一些自动的东西,不需要我在发布前更新它?

也许使用库中定义的 Gradle 任务,并在构建使用该库的应用程序时强制使用?

最佳答案

您可以使用 Gradle 任务来捕获 build.gradle 依赖项中显示的库版本,并将版本信息存储在 BuildConfig.java 中,用于每种构建类型。

下面的任务以捕获“appcompat”依赖项的版本为例。

dependencies {
implementation 'androidx.appcompat:appcompat:1.4.0'
}

task CaptureLibraryVersion {
def libDef = project.configurations.getByName('implementation').allDependencies.matching {
it.group.equals("androidx.appcompat") && it.name.equals("appcompat")
}
if (libDef.size() > 0) {
android.buildTypes.each {
it.buildConfigField 'String', 'LIB_VERSION', "\"${libDef[0].version}\""
}
}
}

在我的示例中,“appcompat”版本是 1.4.0。任务运行后,BuildConfig.java包含

// Field from build type: debug
public static final String LIB_VERSION = "1.4.0";

您可以使用 BuildConfig.LIB_VERSION 在代码中引用此字段。该任务可以在每个构建周期中自动运行。

关于android - 是否可以在运行时获取依赖版本,包括从库本身获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70460845/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com