gpt4 book ai didi

android - 如何使用 Unity 导出的 Android 库作为 AAR?

转载 作者:行者123 更新时间:2023-12-04 04:09:11 29 4
gpt4 key购买 nike

我得到了一个 Unity 项目,这是一个在 Android 上运行的 AR 游戏。该应用程序直接从 Unity 构建并运行,运行良好,如果我将其导出为 android 库并使用 Android Studio 构建,它也运行良好。不幸的是,导出库的格式不适用于我们的预期用例;它创建了一个名为 unityLibrary 的模块,其中包含源代码和依赖项,但我想通过 artifactory 将 unityLibrary 作为一个包提供,因此我需要将 unityLibrary 模块转换为 AAR。我可以用通常的 gradlew assemble 来做到这一点在对 unityLibrary Manifest 进行一些小的修改之后,我可以通过将该 AAR 放入项目的 libs 来在本地将其包含到项目中。文件夹,然后使用 implementation(name: "unityLibrary-debug" ext: "aar") 将其设置为项目依赖项.

应用程序此时大部分可以正常工作,但游戏的 AR 部分无法正常工作,摄像头画面完全是黑屏。在 adb 日志中有以下错误:

2020-05-27 01:53:55.667 8661-8744/com.mokriya.aarapp E/Unity: DllNotFoundException: Unable to load DLL 'UnityARCore': The specified module could not be found.
at UnityEngine.XR.ARCore.ARCoreSessionSubsystem+NativeApi.UnityARCore_session_construct (UnityEngine.XR.ARCore.ARCoreSessionSubsystem+NativeApi+CameraPermissionRequestProviderDelegate cameraPermissionRequestProvider) [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.XR.ARCore.ARCoreSessionSubsystem+Provider..ctor (UnityEngine.XR.ARCore.ARCoreSessionSubsystem subsystem) [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.XR.ARCore.ARCoreSessionSubsystem.CreateProvider () [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.XR.ARSubsystems.XRSessionSubsystem..ctor () [0x00000] in <00000000000000000000000000000000>:0
at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) [0x00000] in <00000000000000000000000000000000>:0
at System.Activator.CreateInstance (System.Type type, System.Boolean nonPublic) [0x00000] in <0000000
2020-05-27 01:53:55.685 8661-8744/com.mokriya.aarapp E/Unity: DllNotFoundException: Unable to load DLL 'UnityARCore': The specified module could not be found.
at UnityEngine.XR.ARCore.ARCoreCameraSubsystem+NativeApi.UnityARCore_Camera_Construct (System.Int32 mainTexPropertyNameId) [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.XR.ARCore.ARCoreCameraSubsystem.CreateProvider () [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.XR.ARSubsystems.XRCameraSubsystem..ctor () [0x00000] in <00000000000000000000000000000000>:0
at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) [0x00000] in <00000000000000000000000000000000>:0
at System.Activator.CreateInstance (System.Type type, System.Boolean nonPublic) [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.SubsystemDescriptor`1[TSubsystem].Create () [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.XR.ARFoundation.SubsystemLifecycleManager`2[TSubsystem,TSubsystemDescriptor].CreateSubsystemIfNecessary () [0x
2020-05-27 01:53:55.759 8661-8744/com.mokriya.aarapp E/Unity: Unable to find FirebaseCppApp-6_12_0
2020-05-27 01:53:55.775 8661-8744/com.mokriya.aarapp E/Unity: DllNotFoundException: Unable to load DLL 'FirebaseCppApp-6_12_0': The specified module could not be found.
at Firebase.AppUtilPINVOKE+SWIGExceptionHelper.SWIGRegisterExceptionCallbacks_AppUtil (Firebase.AppUtilPINVOKE+SWIGExceptionHelper+ExceptionDelegate applicationDelegate, Firebase.AppUtilPINVOKE+SWIGExceptionHelper+ExceptionDelegate arithmeticDelegate, Firebase.AppUtilPINVOKE+SWIGExceptionHelper+ExceptionDelegate divideByZeroDelegate, Firebase.AppUtilPINVOKE+SWIGExceptionHelper+ExceptionDelegate indexOutOfRangeDelegate, Firebase.AppUtilPINVOKE+SWIGExceptionHelper+ExceptionDelegate invalidCastDelegate, Firebase.AppUtilPINVOKE+SWIGExceptionHelper+ExceptionDelegate invalidOperationDelegate, Firebase.AppUtilPINVOKE+SWIGExceptionHelper+ExceptionDelegate ioDelegate, Firebase.AppUtilPINVOKE+SWIGExceptionHelper+ExceptionDelegate nullReferenceDelegate, Firebase.AppUtilPINVOKE+SWIGExceptionHelper+ExceptionDelegate outOfMemoryDelegate, Firebase.AppUtilPINVOKE+SWIGExceptionHelper+ExceptionDelegate overflowDelegate

所以,我不明白为什么在使用 AAR 时应该有任何在运行时找不到的依赖项,而当库作为具有源和依赖项的库模块给出时会发现这些相同的依赖项。有没有人知道为什么会这样?或者有没有人提供有关如何进一步解决此问题的提示?

最佳答案

我遇到了完全相同的问题,我可以回答你的一些问题。

So, I don't understand why there should be any dependencies thataren't found at runtime when using an AAR, when those samedependencies are found with the library when it is given as a librarymodule with source and dependencies

发生的事情是,当您制作 aar 时,库的依赖项本身被排除在外。由 aar 的用户来确保提供 aar 所需的依赖项。

这实际上意味着使用您的 Unity aar 的项目(您的用户项目)还需要添加对 unityLibrary/libs 中的 jars 和 aars 的依赖。

在你的用户项目中,例如:

// The unity game itself
implementation 'com.example:myunitygame:1.0.0'
// The dependencies for the unity game
implementation 'com.unity:unityarcore:1.0.0'
implementation 'com.example:whatever:1.0.0'
... // etc. Make sure you include all the jars and aars from `unityLibrary/libs`

另一种选择是使用“fat-aar”——这是一种替代方法,您的 aar 确实包含它自己的所有依赖项。它与“ fat jar ”的想法相同,您可以在这里阅读:What is a fat JAR?

Fat aars 本身不支持,但你可以试试像 https://github.com/kezong/fat-aar-android 这样的插件

我在这个 fat aar 插件上取得了成功——我的用户项目只依赖于导出的 Unity 项目的单个 fat aar。

关于android - 如何使用 Unity 导出的 Android 库作为 AAR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62038283/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com