
发布到 google play 后应用多语言切换失效,仅保留英文,根本原因是 android app bundle(aab)默认按设备语言启用语言资源分包,导致非系统语言的字符串资源被动态移除。
在使用 Android App Bundle(.aab)发布应用至 Google Play 时,Google Play 会根据用户设备的系统语言自动下发对应语言资源,同时剥离其他未匹配的语言资源文件(如 strings.xml 的德语、库尔德语等)。这意味着:即使你的应用完整支持 4 种语言,若用户设备系统语言为 English,Play Store 下发的安装包中将只包含 values/(默认)和 values-en/ 资源,而 values-de/、values-ku/ 等目录会被完全剔除——导致运行时调用 Configuration.setLocale() 切换语言后,因缺少对应 strings.xml 文件而回退至默认英文。
✅ 正确解决方案:禁用 AAB 的语言分包功能
在模块级 build.gradle(通常为 app/build.gradle)中添加以下配置,强制将所有语言资源打包进最终 AAB:
android {
// ... 其他配置(compileSdk、defaultConfig 等)
bundle {
language {
enableSplit = false // ? 关键:关闭语言资源分包
}
}
}⚠️ 注意事项:
- 此配置仅影响语言资源(res/values-xx/),不影响 APK/AAB 的其他优化(如 ABI、DENSITY 分包仍可保留);
- 修改后需彻底清理并重建项目(./gradlew clean && ./gradlew bundleRelease),确保新 AAB 包含全部语言资源;
- 在 strings.xml 中务必为每种语言提供完整键值对(缺失 key 将 fallback 到默认 values/strings.xml);
- 若使用 AppCompatDelegate.setApplicationLocales()(AndroidX 1.6.0+)或手动 Resources.updateConfiguration(),请确保切换逻辑无误,但本问题根源在于资源缺失,而非代码逻辑错误。
? 补充建议:










