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

在 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.xdnf.cn/news/15214.html

相关文章:

  • Linux之Zabbix分布式监控篇(一)
  • 云原生技术与应用-生产环境构建高可用Harbor私有镜像仓库
  • 网络通信模型对比:OSI与TCP/IP参考模型解析
  • BGP 路由优选属性(7)【MED】官方考试综合实验题【bgp】【acl】【ip-prefix】【route-policy】【icmp 环路】精讲
  • Frida绕过SSL Pinning (证书绑定)抓包;Frida注入;app无法抓包问题解决。
  • 哔哩哔哩第三方TV-BBLL最新版
  • Pyqt5 FlexRay
  • Redis事件机制
  • 特辑:Ubuntu,前世今生
  • Claude code在Windows上的配置流程
  • 基于Opencv的缺陷检测实战
  • cuDNN 的 IMPLICIT_GEMM 算法
  • 深入理解设计模式:建造者模式详解
  • Spring Boot 2.4+中bootstrap.yml加载顺序的源码深度解析
  • NLP:RNN文本生成案例分享
  • 常用控件QWidget
  • 第10讲——一元函数积分学的几何应用
  • 关于解决win 11安装mathtype报错的问题(toolbar.eql)
  • 计算机毕业设计ssm基于Web的高校食堂管理系统 基于SSM框架的大学智慧餐饮服务平台 JavaWeb校园食堂一站式订餐与供应链系统
  • 【kubernetes】--controller(DaemonSet)
  • SD卡初始化、命令及响应命令格式(详细)讲解
  • 分层架构的C++高并发内存池性能优化
  • 无法打开windows安全中心解决方案
  • DirectX Repair修复工具下载,.NET修复,DirectX修复
  • 2025 全球酒店用品厂家竞争力排行榜发布:扬州卓韵领衔,布草工厂实力重塑行业格局
  • 关于 验证码系统 详解
  • Android音视频探索之旅 | C++层使用OpenGL ES实现音频渲染
  • Python数据容器-集合set
  • 《硬件产品经理》第八章:产品生产制造
  • Android 系统默认Launcher3 菜单模式双层改成单层-3