Google Play 64位合规报错求助:应用更新提交失败
先梳理下你的核心困境:纯Java开发的图片编辑器,上传AAB到Google Play时触发64位合规错误,明明已经配置了多ABI支持(包含arm64-v8a、x86_64),用adb install --abi armeabi-v7a能成功安装32位版本,但上传始终报错,且已联系Google支持等待回复。
下面是几个你可以立即动手排查的方向:
1. 移除废弃的armeabi架构
你的defaultConfig里ndk.abiFilters包含了armeabi——这是一个已被废弃的32位架构,Google Play的64位规则要求每个提供的32位架构必须对应有64位版本,但armeabi没有官方对应的64位架构(arm64-v8a是对应armeabi-v7a的)。直接移除这个架构,保留必要的架构集合:
ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
这个操作很关键,包含废弃架构可能会干扰Google Play的检测逻辑,导致误判。
2. 验证第三方库的64位so完整性
虽然你提到jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1支持64位,但要确认所有带原生代码的依赖(比如cn.ezandroid:EZFilter:2.0.9)真的提供了64位so文件:
- 用
bundletool把AAB转换成可拆分的APK包:bundletool build-apks --bundle=your-app.aab --output=your-app.apks - 解压生成的
your-app.apks,查看lib/arm64-v8a/和lib/x86_64/目录下,是否存在所有第三方库对应的so文件。如果某个库在64位目录下缺失so,那就是问题根源。 - 若发现EZFilter等库缺失64位so,优先尝试升级到最新版本,或者替换为明确支持64位的替代库。
3. 防止ProGuard/R8误删64位so
你的release版本开启了minifyEnabled true和shrinkResources true,ProGuard/R8有可能误删64位的原生库文件。在proguard-rules.pro中添加保护规则,确保原生代码不被移除:
# 保护所有含native方法的类 -keep class * { native <methods>; } -keepclasseswithmembernames class * { native <methods>; } # 针对特定第三方库添加保护 -keep class jp.co.cyberagent.android.gpuimage.** { *; } -keep class cn.ezandroid.ezfilter.** { *; }
4. 调整Renderscript配置
你的项目启用了Renderscript,虽然它会自动生成对应架构的代码,但版本不匹配可能影响64位编译。尝试把renderscriptTargetApi升级到与targetSdkVersion一致:
renderscriptTargetApi 29 renderscriptSupportModeEnabled true
5. 临时用拆分APK替代AAB测试
如果以上步骤都无效,可以尝试生成拆分APK(每个架构单独打包)上传,验证是AAB生成的问题还是Google Play检测的问题。在build.gradle中添加拆分配置:
android { splits { abi { enable true reset() include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' universalApk false } } }
生成release版本的拆分APK后上传,看是否能通过64位检测。
另外,既然你已经联系了Google支持,建议在回复里附上这些排查的结果(比如第三方库so的检查情况、修改后的Gradle配置),能帮助技术团队更快定位问题。
内容的提问来源于stack exchange,提问作者user7954210

