gpt4 book ai didi

android - 对我自己的 Android 库进行版本控制

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:05 25 4
gpt4 key购买 nike

我目前正在为 Android 开发自定义库。

我的想法是为应用程序提供一个版本(我目前在 de build.gradle 文件中设置它并且它工作正常),并为库提供一个不同的版本。

是否有最佳实践可以在不将两个 build.gradle 文件合并在一起的情况下实现这一目标?

我在 SO 上发现了几个类似的问题,但它们已有 4 年历史,而且帮助不大。

最佳答案

这个问题的解决方案不是您可能已经想到的 Git。 OP 希望对库进行外部版本控制,这可能是在不提供源代码的情况下向第三方提供 API 的一种方式。

这对于 Gradle 来说不是微不足道的,但它是可行的。

您可以在不同级别执行此操作,我将解释最简单和最直接的。

设置版本号

首先,您需要将 version 变量添加到您的 gradle.properties 文件中。您可以使用简单的一行设置此变量:

version=0.1.0-SNAPSHOT

构建版本字符串

在您的项目中创建一个名为versioning.gradle 的文件并将以下代码粘贴到其中(我很久以前在网上找到这个,我没有源了):

ext {
/**
     * Builds an Android version code from the version of the project.
     * This is designed to handle the -SNAPSHOT and -RC format.
     *
     * I.e. during development the version ends with -SNAPSHOT. As the code stabilizes and release nears
     * one or many Release Candidates are tagged. These all end with "-RC1", "-RC2" etc.
     * And the final release is without any suffix.
     * @return
     */
buildVersionCode = {
//The rules is as follows:
//-SNAPSHOT counts as 0
//-RC* counts as the RC number, i.e. 1 to 98
//final release counts as 99.
//Thus you can only have 98 Release Candidates, which ought to be enough for everyone

def candidate = "99"
def (major, minor, patch) = version.toLowerCase().replaceAll('-', '').tokenize('.')
if (patch.endsWith("snapshot")) {
candidate = "0"
patch = patch.replaceAll("[^0-9]","")
} else {
def rc
(patch, rc) = patch.tokenize("rc")
if (rc) {
candidate = rc
}
}

(major, minor, patch, candidate) = [major, minor, patch, candidate].collect{it.toInteger()}

(major * 1000000) + (minor * 10000) + (patch * 100) + candidate;
}
}

完成此操作后,请确保通过添加 apply from: '. ./versioning.gradle' 在加载 Android 插件的位置附近。

然后,在您的 defaultConfig block 中,您希望将默认版本变量更改为以下值:

versionCode buildVersionCode()
versionName version

库文件名中的版本号

如果您真正要构建一个 Android 库,那么预期的输出是一个 .aar 文件。

因此,将以下 gradle 代码添加到您的 build.gradle 文件中:

libraryVariants.all {
variant -> variant.outputs.each {
output -> output.outputFile = new File(
output.outputFile.parent,
output.outputFile.name.replace(".aar", "-${defaultConfig.versionName}.aar")
)
}
}

就是这样!您的输出文件的名称将包含您在 gradle.prorties 文件中指定的版本号。

注意事项

这将以非常静态的方式对您的库和/或 API 进行版本控制。这意味着开发人员无法通过方法调用动态获取版本号。

确保还有一种方法可以为客户端开发人员提供版本号,并确保两者保持同步。只有这样,您才能拥有正确版本化的库。

关于android - 对我自己的 Android 库进行版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25290607/

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