Android Unity3d 和 VUForia 与 Digimarc。初始化失败!您的硬件不支持此应用程序
Android Unity3d and VUForia with Digimarc. Failure to initialize! Your hardware does not support this application
我正在开发一个 AR 应用程序,我在其中使用 Unity 和 VUForia 运行 AR 场景。 Unity AR 部分是使用 Unity Plugins 开发的,我将这个插件与 Android Studio Project 集成在一起。 Android 项目也使用 Digimarc SDK 来识别 SKU。
现在的问题是,当我 运行 完成与 Digimarc 集成的项目时,我从 Unity 收到错误:初始化失败!你的硬件不支持。
但是,如果我从项目中删除 Digimarc SDK,Unity 部分 运行 就完美了。
经过2天的研究,我找到了这个问题的根本原因和解决方案。
问题:
android 中有多种硬件架构,如 "armeabi-v7a"、"arm64-v8a" 和 "x86"。
大多数 Android 设备支持不止一种架构。
当应用程序使用本机库时,它会在 lib/armeabi-v7a/ 和 lib/arm64-v8a 等文件夹中提供本机库以支持架构。
Android 设备的 OS 在编译时检查提供的文件夹中的本机库,并复制最兼容的文件夹并保留其他文件夹。
在我的例子中,VUForia SDK 只为 "armeabi-v7a" 架构提供原生库,而 Digimarc SDK 为 "armeabi-v7a"、"arm64-v8a" 和 "x86" 提供原生库。
现在,当我将 Unity+vuforia only 应用程序安装到设备时,因为它只有 "armeabi-v7a" 文件夹,设备会从此处复制库,并正确地复制应用程序 运行s。
但是当我们安装同时集成了 unity+vuforia 和 Digimarc 的完整应用程序时,应用程序包确实包含所有 3 种架构的合并文件夹,但是 VuForia 库仅在 "armeabi-v7a" 文件夹中可用,其余 2 确实包含 digimarc 的只有库,他们没有 VUForia 的库。
现在,复制 "arm64-v8a" 或 "x86" 库的设备将找不到 VUforia 所需的库,我们会在此类设备上看到硬件不受支持的错误。
解决方案:
首先,我试图寻找 "arm64-v8a" 和 "x86" 的 VUForia 库,但找不到。
然后我尝试从 "armeabi-v7a" 文件夹复制 VUforia 库并粘贴到 "arm64-v8a" 和 "x86" 文件夹,但是当我尝试 运行 应用程序时,它因抱怨而崩溃提供的库不适用于正确的架构。
最后,我从 digimarc 的 "dms.aar" 文件中删除了 "arm64-v8a" 和 "x86" 文件夹,并将其重命名为 "dms_armeabi-v7a_only.aar",并将原来的 "dms.aar" 替换为 "dms_armeabi-v7a_only.aar"项目
我尝试 运行 在我有权访问的所有设备上安装该应用程序,该应用程序在 digimarc 和 Unity+Vuforia 页面上运行良好。
我正在开发一个 AR 应用程序,我在其中使用 Unity 和 VUForia 运行 AR 场景。 Unity AR 部分是使用 Unity Plugins 开发的,我将这个插件与 Android Studio Project 集成在一起。 Android 项目也使用 Digimarc SDK 来识别 SKU。 现在的问题是,当我 运行 完成与 Digimarc 集成的项目时,我从 Unity 收到错误:初始化失败!你的硬件不支持。 但是,如果我从项目中删除 Digimarc SDK,Unity 部分 运行 就完美了。
经过2天的研究,我找到了这个问题的根本原因和解决方案。
问题:
android 中有多种硬件架构,如 "armeabi-v7a"、"arm64-v8a" 和 "x86"。 大多数 Android 设备支持不止一种架构。 当应用程序使用本机库时,它会在 lib/armeabi-v7a/ 和 lib/arm64-v8a 等文件夹中提供本机库以支持架构。 Android 设备的 OS 在编译时检查提供的文件夹中的本机库,并复制最兼容的文件夹并保留其他文件夹。 在我的例子中,VUForia SDK 只为 "armeabi-v7a" 架构提供原生库,而 Digimarc SDK 为 "armeabi-v7a"、"arm64-v8a" 和 "x86" 提供原生库。 现在,当我将 Unity+vuforia only 应用程序安装到设备时,因为它只有 "armeabi-v7a" 文件夹,设备会从此处复制库,并正确地复制应用程序 运行s。 但是当我们安装同时集成了 unity+vuforia 和 Digimarc 的完整应用程序时,应用程序包确实包含所有 3 种架构的合并文件夹,但是 VuForia 库仅在 "armeabi-v7a" 文件夹中可用,其余 2 确实包含 digimarc 的只有库,他们没有 VUForia 的库。 现在,复制 "arm64-v8a" 或 "x86" 库的设备将找不到 VUforia 所需的库,我们会在此类设备上看到硬件不受支持的错误。
解决方案:
首先,我试图寻找 "arm64-v8a" 和 "x86" 的 VUForia 库,但找不到。 然后我尝试从 "armeabi-v7a" 文件夹复制 VUforia 库并粘贴到 "arm64-v8a" 和 "x86" 文件夹,但是当我尝试 运行 应用程序时,它因抱怨而崩溃提供的库不适用于正确的架构。 最后,我从 digimarc 的 "dms.aar" 文件中删除了 "arm64-v8a" 和 "x86" 文件夹,并将其重命名为 "dms_armeabi-v7a_only.aar",并将原来的 "dms.aar" 替换为 "dms_armeabi-v7a_only.aar"项目 我尝试 运行 在我有权访问的所有设备上安装该应用程序,该应用程序在 digimarc 和 Unity+Vuforia 页面上运行良好。