从Play Store下载的AAB格式应用功能异常,同版本APK正常
结合你遇到的「AAB上传Google Play后分发的APK功能异常,但本地导出同版本APK正常」的情况,核心差异在于Google Play对AAB的处理逻辑和本地导出APK的逻辑不同,常见原因如下:
Split APK拆分导致资源/代码缺失
Google Play会根据用户设备的配置(如CPU架构、屏幕密度、系统语言等)生成针对性的Split APK,只包含该设备需要的资源和代码。如果你的应用中存在未正确配置拆分规则的依赖(比如某个Native库仅打包在特定ABI目录,但代码中直接调用了该库;或者某个资源未标记为「必要资源」被拆分过滤),用户设备拿到的Split APK就会缺少关键文件,触发运行时错误。而你本地导出的通常是包含所有资源/代码的Universal APK,所以不会出现问题。签名校验逻辑冲突
如果你启用了Google Play App Signing,Google Play会替换你上传AAB时使用的上传密钥,用Google托管的签名密钥重新签名分发的APK。如果你的应用或集成的第三方SDK中存在签名校验逻辑(比如校验签名哈希值、证书信息),签名变更后就会触发校验失败,导致功能异常。本地导出的APK使用的是你自己的上传密钥签名,所以校验通过。ProGuard/R8混淆处理差异
部分开发者会开启Google Play的「App Bundle优化」中的额外混淆选项,或者本地混淆配置存在疏漏,导致Google Play在处理AAB时对某些必要类/方法进行了误混淆或删除,而本地导出APK的混淆是你本地控制的,保留了这些关键代码,因此运行正常。动态功能模块未正确分发
如果你的应用使用了动态功能模块(Dynamic Feature Modules),Google Play会按需分发这些模块。如果用户设备在使用功能时,动态模块未成功下载或安装(比如网络问题、模块配置错误),就会出现功能缺失或报错。而本地导出的APK通常会将所有动态模块打包进主APK,不会有这个问题。Google Play服务器端处理异常
极少数情况下,上传的AAB在Google Play服务器处理时出现异常,导致生成的Split APK损坏。这种情况可以尝试重新上传同一版本的AAB,或者生成新版本号重新上传测试。
内容的提问来源于stack exchange,提问作者TIM

