解决Unity Android项目移植至ARM架构遇到的问题
最近使用Unity开发的游戏作品在尝试发布到Android平台上时遇到了一些挑战,特别是在部署过程中对设备的支持造成了干扰。具体问题表现为在安装Unity打包的APK文件到基于x86架构的模拟器或者真实设备上时会出错,原因在于系统未能正确将ARM架构的应用程序与适当环境下运行的应用程序相关联。
问题表现:
- 在Unity Editor中构建好的Android APK或aar库尝试通过ADB安装至某一基于armv7l 或者armeabi-v7a架构的Android设备或模拟器时收到如下错误提示:
04-13 06:43:59.626: E/(2866): [armeabi-v7a] [/system/lib/libart.so]dlopen("/data/app/com.example.myapp-oQwYcA4iUzZMqHJ2gR8XpA==/lib/arm/libhoudini.so", RTLD_LAZY | RTLD_NODELETE | 0x0100) failed: No such file or directory (2)
这表明设备尝试在Linux内核下运行ARM架构的程序,而该操作需要以适当的方式注册文件类型,以便使用特定的应用程序打开。以下步骤可以帮助解决上述问题。
解决方案:
- 通过修改binfmt_misc将特定格式的ELF文件关联至houdini程序:
- 注册指定类型的可执行elf应用,并设置路径指向ARM架构下的库文件。
sh
adb shell mount -o remount,rw /system/bin
echo ':armeabi-v7a interpreter' > /system/etc/multimedia/10_arm_interpreter.conf
echo '/vendor/lib/houdini' >> /system/etc/multimedia/10_arm_interpreter.conf
adb push path/to/your/arm64-lib-elf-executable /system/lib
- 注册指定类型的可执行elf应用,并设置路径指向ARM架构下的库文件。
- 使用Houdini进行直接推送:
-
打开并操作houdini程序来打开ARM架构的动态库文件。
sh
adb -e push C:\Users\User25\Desktop\houdini\arm /system/lib -
为避免通过ADB命令修改,可以通过AVD方式解决:
- 导入并安装支持ARM架构翻译的应用程序到模拟器中。如选择使用RemixOS player或者Genymotion的x86系统镜像文件(需提前设置并开启原生ARM桥接功能)。
- 直接在Android Studio内对AVD进行配置以适配ARM:
- 在Android Studio内的生成设备映像里找到适配对应API级别和架构 (如 x86) 的arm模拟镜像,例如安卓 26 级别的
google_apis\x86
,并创建基于此的模拟器。
最后,如果上述方法仍无法完全解决您的问题,可以考虑使用能够处理ARM代码翻译功能的Android虚拟机环境进行针对性测试与调整。这些步骤应能帮助您成功在Android设备或模拟器中运行Unity的游戏APP。
请注意:
– 在实际操作过程中要保证提供的路径及路径中的文件(如tar文件)具有正确的格式。
– 对于某些版本的系统或是Unity项目配置可能有所不同,具体可参阅相关资源文档进行进一步调整。
正文完