You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:40:53