如何在Unity中为多架构构建独立APK?解决GPG插件libgpg.so残留问题
解决Unity中Google Play Games插件多架构libgpg.so冗余问题
我之前也碰到过这个一模一样的头疼问题!手动删除so文件后编译又自动回来,确实挺烦人的。下面几个亲测有效的方法,你可以按顺序试试:
1. 从Unity Player Settings直接指定目标架构
这是最基础的一步,先确保Unity本身只构建你需要的架构:
- 打开Build Settings,切换到Android平台
- 进入Player Settings > Other Settings > Configuration
- 把Scripting Backend改成
IL2CPP(Mono后端对架构过滤的支持不如IL2CPP) - 在Target Architectures里只勾选你需要的架构(比如只留
ARMv7或者ARM64,把x86取消勾选)
2. 修改Google Play Games插件的架构配置
如果上面的方法没生效,可能是插件本身强制引入了多架构库,你可以这样处理:
- 如果是通过Unity Package Manager导入的插件:打开Package Manager,找到Google Play Games,查看它的设置面板,有没有类似“Target ABIs”的选项,只勾选需要的架构
- 如果是手动导入的插件:找到
Assets/Plugins/Android下的gpg相关文件夹,里面会有armeabi-v7a、x86等架构子文件夹,直接删除你不需要的那个文件夹(注意:如果插件是通过Package Manager管理的,删除后可能会被重新恢复,这时候优先用Package Manager里的设置)
3. 用自定义Gradle模板强制过滤ABI
这是最稳妥的方法,直接让Gradle编译时只打包指定架构的库:
- 在Player Settings > Publishing Settings里,勾选Custom Main Gradle Template,Unity会生成
Assets/Plugins/Android/mainTemplate.gradle文件 - 打开这个文件,找到
android > defaultConfig节点,添加以下代码:ndk { abiFilters 'armeabi-v7a' // 替换成你需要的架构,比如'arm64-v8a' } - 这样Gradle在编译时会自动过滤掉不在abiFilters里的架构库,包括libgpg.so
4. 用APK Analyzer排查冗余来源
如果还是有问题,可以用Android Studio的APK Analyzer打开生成的APK,查看lib目录下的so文件,确认是哪个模块在引入x86版本的libgpg.so:
- 打开Android Studio,点击菜单栏Build > Analyze APK,选择你的APK文件
- 展开
lib目录,看x86文件夹下的libgpg.so是属于哪个依赖模块 - 找到对应的模块后,在gradle模板里添加排除规则,比如:
dependencies { implementation('com.google.android.gms:play-games-sdk:...') { exclude group: 'com.google.android.gms', module: 'play-games-sdk-x86' } }
最后提醒下,如果你的插件版本比较旧,建议更新到最新版,新版本的Google Play Games插件对Unity的架构过滤支持更好,很多老版本的bug已经被修复了。
内容的提问来源于stack exchange,提问作者Amit Kishor
相关产品推荐
相关产品推荐

