启用App Bundle:在Android Studio中配置项目签名并开启AAB构建

启用App Bundle,说白了就是让Android Studio打AAB格式的包。但有个前提你必须先搞定——签名。Google Play要求所有上传的AAB都得经过签名验证,这跟APK时代一样,只不过AAB的签名机制更严格一些。

我记得刚接触AAB时,有个误区:以为AAB不需要签名,反正Google Play会重新签名。后来发现不是这么回事。你上传的AAB必须用上传密钥签名,Google Play再用分发密钥重新签名,最终分发给用户的APK用的是分发密钥。两个密钥各司其职,缺一不可。

为什么AAB必须签名?

简单来说三点原因:

  • 身份验证:证明这个AAB确实是你发布的,不是别人冒名顶替的
  • 完整性校验:确保打包后的内容没有被篡改过
  • Google Play政策:不上传签名的AAB,后台会直接拒绝,我试过

你可能会问:"那我debug包不签名也能跑啊?" 嗯,debug包用的是Android SDK自带的调试签名,严格来说也算签了名。只不过发布到Google Play必须用你自己生成的release密钥。

第一步:配置签名信息

我个人习惯在项目根目录下放一个 keystore 文件夹,专门存放密钥库文件。当然你也可以放别的位置,关键是要在 build.gradle 里正确引用它。

先创建一个密钥库(如果已经有了可以跳过):

keytool -genkey -v -keystore ./keystore/my-release-key.jks \
        -keyalg RSA -keysize 2048 -validity 10000 \
        -alias my-key-alias

然后配置 app/build.gradle 的签名信息:

android {
    signingConfigs {
        release {
            storeFile file("./keystore/my-release-key.jks")
            storePassword System.getenv("KEYSTORE_PASSWORD") ?: ""
            keyAlias "my-key-alias"
            keyPassword System.getenv("KEY_PASSWORD") ?: ""
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
                    'proguard-rules.pro'
        }
    }
}
💡 安全提示: 别把密码硬编码在build.gradle里!我建议用环境变量或者Gradle属性文件(gradle.properties),并且把属性文件加到 .gitignore 里。密钥库文件也不要提交到Git仓库,否则别人拿到就能冒充你发布应用。

第二步:开启AAB构建

签名配置好了,接下来告诉Android Studio我们要打AAB包。其实不需要改什么特殊开关,只要用 bundle 相关的构建任务就行。

在Android Studio的右侧Gradle面板里,找到 app → Tasks → bundle → bundleRelease,双击就开始构建了。也可以用命令行:

./gradlew bundleRelease

构建完成后,AAB文件会输出在 app/build/outputs/bundle/release/app-release.aab。

如果你用的是Android Studio 3.2及以上版本,直接在菜单栏选 Build → Build Bundle(s) / APK(s) → Build Bundle(s) 也行。我个人习惯用命令行,因为方便集成到CI/CD流水线里。

⚠️ 踩坑记录: 我曾经因为build.gradle里漏了 signingConfig signingConfigs.release 这一行,导致构建出来的AAB没有签名。上传到Google Play后台直接报错 "未签名的Bundle"。排查了半天才发现是release类型的签名配置没关联上。这步很容易忘,一定要检查。

第三步:验证AAB文件

AAB生成后,别急着上传。先验证一下签名是否正确。用 jarsigner 命令:

jarsigner -verify -verbose -certs app-release.aab | grep "X.509"

如果输出里能看到你的证书信息,说明签名成功。如果只看到 jar 已验证 但没有证书细节,大概率用的是debug签名。

另外,你也可以用Google官方的 bundletool 来验证AAB的完整性:

java -jar bundletool-all-x.x.x.jar validate --bundle app-release.aab

这个工具会检查AAB的格式、签名、资源分割等各方面是否正确。我每次发布前都会跑一遍,省得被Google Play驳回重来。

构建类型对比

我把日常开发中几种构建方式整理了一下,方便你对照:

构建方式 签名类型 输出格式 主要用途
debug SDK调试签名 APK 本地开发调试
release (APK) 手动配置的上传密钥 APK 内部分发或测试
release (AAB) 手动配置的上传密钥 AAB 发布到Google Play

看到区别了吧?debug包自动用调试签名,release包才用你配置的密钥。而且AAB只能通过Google Play分发,不能直接安装到手机上。你想想看,如果想让内部同事测试,还得打一个APK包给他们。

签名版本的新要求

从Android 9(API 28)开始,Google Play要求AAB必须使用 APK Signature Scheme v2(或者更新的v3)。v1签名在AAB里已经不推荐了。你生成密钥库时,keytool 默认创建的是v2兼容的签名,通常没问题。但如果你用的旧版工具或者自定义签名参数,记得加上 -sigalg SHA256withRSA -digestalg SHA-256。

验证签名版本可以用 apksigner 工具:

apksigner verify --verbose app-release.aab

输出会列出所有签名方案。我见过一些同事因为签名版本不对,导致AAB在Google Play后台报 "签名版本过低",结果又重新打包,折腾了半天。

🔑 关键总结: 签名是AAB发布的第一道门槛。配置好密钥库 → 关联到release类型 → 构建AAB → 验证签名,这四步走完才能确保你的AAB被Google Play顺利接受。其中最容易忽略的就是验证环节,别问我怎么知道的……

下面这张图梳理了整个流程,从创建密钥库到最终上传,每一步都串起来了。建议你把它保存下来,每次发布前对照着过一遍。

AAB签名与构建流程 ① 创建密钥库 生成 .jks 文件,配置别名和有效期 ② 配置 build.gradle 关联密钥库,设置 signingConfigs ③ 切换构建格式 选择 bundleRelease 任务,替代 assembleRelease ④ 执行构建任务 运行 ./gradlew bundleRelease ⑤ 验证签名与格式 使用 jarsigner 和 bundletool 检查 ⑥ 上传 Google Play 提交到 Google Play Console 进行审核 💡 每一步都不可跳过,否则上传会被 Google Play 直接驳回

配置签名并开启AAB构建,这一步做扎实了,后面的动态交付才能顺利推进。记住三个关键词:密钥库、signingConfigs、bundleRelease。把这三点盯住了,基本上不会出大问题。

嗯,配置阶段就先聊到这儿。下一步就是真正用AAB来做动态交付了,那才是体现App Bundle真正实力的地方。