Android App Bundle如何适配不同minSdkVersion,替代多APK兼容低版本?
使用App Bundle实现多minSdk版本适配的方案
你的核心需求是:保留对API 16-18用户的兼容,同时给API 19+用户推送搭载最新Admob库的版本,避免低版本用户收到不兼容的升级包。用App Bundle可以通过构建变体(Product Flavors)+ 版本代码策略实现和多APK一样的效果,具体步骤如下:
1. 配置Gradle构建变体
在模块的build.gradle(或build.gradle.kts)中,创建两个针对不同API等级的构建变体,分别配置对应的minSdk和Admob依赖:
android { defaultConfig { applicationId "com.your.package.name" targetSdkVersion 34 versionCode 100 // 基础版本号,后续更新时递增即可 versionName "1.0.0" } // 定义维度,用于区分不同API等级的变体 flavorDimensions "apiLevel" productFlavors { // 适配API 16-18的旧版本变体 legacy { dimension "apiLevel" minSdkVersion 16 // 版本代码 = 基础版本号 * 10 + 0,确保比modern变体低 versionCode defaultConfig.versionCode * 10 + 0 } // 适配API 19+的新版本变体 modern { dimension "apiLevel" minSdkVersion 19 // 版本代码 = 基础版本号 * 10 + 1,确保比legacy变体高 versionCode defaultConfig.versionCode * 10 + 1 } } dependencies { // 通用基础依赖 implementation 'androidx.core:core-ktx:1.12.0' implementation 'androidx.appcompat:appcompat:1.6.1' // 按变体引入对应版本的Admob legacyImplementation 'com.google.android.gms:play-services-ads:19.8.0' // 支持minSdk 16的旧版本 modernImplementation 'com.google.android.gms:play-services-ads:20.6.0' // 最新版本,要求minSdk 19 } }
2. 版本代码的关键作用
- 给
modern变体设置更高的版本代码,确保API 19+的设备会优先获取这个版本的APK legacy变体的版本代码略低,但仍随基础版本号递增,保证API 16-18的用户能收到对应变体的更新,不会被强制推送不兼容的modern版本
3. 构建并发布App Bundle
直接构建App Bundle(Build > Build Bundle(s) / APK(s) > Build Bundle(s)),然后上传到Google Play:
- Google Play会自动从App Bundle中拆分出对应
legacy和modern变体的APK - 系统会根据用户设备的API等级自动分发适配的版本:API 16-18的设备只会收到
legacyAPK,API 19+的设备收到modernAPK,完全避免低版本用户拿到不兼容的升级包
内容的提问来源于stack exchange,提问作者Dongfu He
相关产品推荐
相关产品推荐

