当前位置: 首页 > news >正文

在 Android 库模块(AAR)中,BuildConfig 默认不会自动生成 VERSION_CODE 和 VERSION_NAME 字段

为什么AAR库模块的 BuildConfig 没有 versionCodeversionName

  1. aar库模块的 BuildConfig 默认不包含版本信息
    • 应用模块(com.android.application)会自动生成 versionCodeversionNameBuildConfig
    • 但库模块(com.android.library)默认不会生成这些字段,因为它的版本信息通常由发布到 Maven 时的 pom.xmlgradle 依赖管理决定。
  2. 库模块的版本号通常由 publishingmaven-publish 插件管理
    • 当你发布 AAR 到 Maven 仓库时,版本信息由 groupId:artifactId:version 决定(如 com.example:mylib:1.0.0),而不是 BuildConfig

如何让库模块(AAR)的 BuildConfig 包含 versionCodeversionName

在库模块的 build.gradle 中,手动定义 buildConfigField

android {defaultConfig {versionCode 1versionName "1.0.0"// 手动添加 versionCode 和 versionName 到 BuildConfigbuildConfigField "int", "VERSION_CODE", "$versionCode"buildConfigField "String", "VERSION_NAME", "$versionName"}
}

编译后,BuildConfig 会包含:

public final class BuildConfig {public static final int VERSION_CODE = 1;public static final String VERSION_NAME = "1.0.0";
}

代码中调用:

val versionName = BuildConfig.VERSION_NAME // "1.0.0"
val versionCode = BuildConfig.VERSION_CODE // 1

方法 2:使用 resValueresources 中存储版本(可选)

如果不想修改 BuildConfig,也可以把版本信息存到 res/values

android {defaultConfig {versionCode 1versionName "1.0.0"// 存储到 res/valuesresValue "string", "lib_version_name", versionNameresValue "integer", "lib_version_code", "$versionCode"}
}

代码中调用:

val versionName = context.resources.getString(R.string.lib_version_name)
val versionCode = context.resources.getInteger(R.integer.lib_version_code)

方法 3:通过 PackageManager 获取(适用于已打包的 AAR)

如果 AAR 已经打包进 APK,可以通过 PackageManager 获取(但需要知道库的 packageName):

val packageInfo = context.packageManager.getPackageInfo("com.your.library.package", 0)
val versionName = packageInfo.versionName
val versionCode = packageInfo.versionCode

(注意:这种方式需要 AAR 的 AndroidManifest.xml 正确声明 versionCodeversionName。)

http://www.dtcms.com/a/276017.html

相关文章:

  • docker基础与常用命令
  • 如何让AI更高效
  • 留学真相:凌晨两点被海关拦下时,我才明白人生没有退路
  • 如何用Python编程实现一个简单的Web爬虫?
  • Echarts学习方法分享:跳过新手期,光速成为图表仙人!
  • 【Lucene/Elasticsearch】 数据类型(ES 字段类型) | 底层索引结构
  • 易混淆英语单词对比解析与记忆表
  • 股票的k线
  • BKD 树(Block KD-Tree)Lucene
  • 以太坊重放攻击
  • 特辑:Ubuntu,前世今生
  • 关于学习docker中遇到的问题
  • AI领域的黄埔军校:OpenAI是新一代的PayPal Mafia,门生故吏遍天下
  • 可以用一台伺服电机控制多台丝杆升降机联动使用吗
  • 类和对象—多态
  • C语言:20250712笔记
  • SpringBoot集合Swagger2构建可视化API文档
  • P2619 [国家集训队] Tree I
  • 【Datawhale AI夏令营】Task2 笔记:MCP Server开发的重难点
  • 【LeetCode 热题 100】98. 验证二叉搜索树——(解法一)前序遍历
  • Python 三大高频标准库实战指南——json · datetime · random 深度解析
  • 【Java入门到精通】(二)Java基础语法(上)
  • 27. 移除元素
  • 【android bluetooth 协议分析 07】【SDP详解 1】【SDP 介绍】
  • 19th Day| 530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数, 236.二叉树的最近公共祖先
  • springboot3X 整合高版本mybatisplus
  • pyqt5绘制矩形和线条
  • 【从零开始编写数据库:基于Python语言实现数据库ToyDB的ACID特性】
  • C语言<数据结构-单链表>(收尾)
  • Windows 开启和关闭 Administrator 用户的方法