升级AGP至4.2.2后,AAR的AndroidManifest.xml为何缺失versionCode与versionName?
问题解答
这属于AGP 4.0及以上版本的有意行为变更,并非意外的破坏性bug,是官方针对库模块清单处理逻辑的调整。
变更原因
AGP 4.0开始,官方对库模块的清单生成逻辑做了修改:不再自动将build.gradle中配置的versionCode和versionName注入到AAR包的AndroidManifest.xml中。
官方的设计初衷是避免库的版本信息干扰主应用的清单配置——主应用应该完全掌控自身的版本标识,防止多库依赖时出现版本冲突或意外覆盖主应用版本的情况。
解决办法
如果你的库确实需要在清单中保留版本信息,有两种可行方案:
- 方案1:显式在清单中声明
直接在库的src/main/AndroidManifest.xml中添加版本相关的元数据(更推荐用元数据避免和主应用的版本字段冲突):
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.your.library.package"> <application ...> <!-- 你的应用组件配置 --> </application> <!-- 自定义元数据存储版本信息 --> <meta-data android:name="com.your.library.versionCode" android:value="123" /> <meta-data android:name="com.your.library.versionName" android:value="1.2.3" /> </manifest>
- 方案2:通过清单占位符复用build.gradle配置
在库的build.gradle中配置清单占位符,复用已定义的版本变量:
android { defaultConfig { versionCode 123 versionName "1.2.3" // 定义清单占位符 manifestPlaceholders = [ libraryVersionCode: versionCode, libraryVersionName: versionName ] } }
然后在AndroidManifest.xml中引用这些占位符:
<meta-data android:name="com.your.library.versionCode" android:value="${libraryVersionCode}" /> <meta-data android:name="com.your.library.versionName" android:value="${libraryVersionName}" />
内容的提问来源于stack exchange,提问作者mahdi
相关产品推荐
相关产品推荐

