当前位置: 首页 > 知识库问答 >
问题:

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

公良信然
2023-03-14

我得到了一个统一的项目,这是一个AR游戏,在Android上运行。该应用程序在html" target="_blank">构建和直接从Unity运行时运行得很好,如果我将其导出为android库并使用android Studio构建,它也运行得很好。不幸的是,导出库的格式不适用于我们预期的用例;它创建了一个名为unityLibrary的模块,包含源代码和依赖项,但是我希望通过artifactory将unityLibrary作为包提供,所以我需要将unityLibrary模块转换为AAR。在对unityLibrary清单进行一些小的修改后,我可以使用通常的Gradlew Assemble来实现这一点,然后通过将AAR放到项目的libs文件夹中,然后使用实现(name:“unityLibrary-debug”ext:“AAR”)将其设置为项目依赖项,从而在本地将该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时会有在运行时找不到的依赖项,当库作为具有源和依赖项的库模块时,这些依赖项与库相同。有人知道为什么会这样吗?或者有人有关于如何进一步解决这个问题的提示吗?

共有1个答案

康秋月
2023-03-14

我也有同样的问题,我可以回答你的一些问题。

所以,我不明白为什么在使用AAR时会有任何在运行时找不到的依赖项,当库作为一个库模块提供时,这些依赖项是与库一起找到的,而库是以源代码和依赖项的形式提供的

发生的情况是,当您创建一个aar时,库本身的依赖项被排除在外。aar的用户有责任确保提供aar所需的依赖项。

// 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 aars本机不支持,但您可以尝试一个插件,如https://github.com/kezong/fat-aar-android

我已经成功地使用了这个fat aar插件--我的用户项目只依赖于导出的Unity项目的单个fat aar。

 类似资料:
  • 我已经导出了我的Unity项目,以便能够使用MultiDex。问题是,当我已经为Fabric设置了“io.fabric.unity.android.fabricApplication”时,我必须将项目androidmanifest中的Android:name设置为“Android.support.multidex.multidexApplication”。 我发现有人也有类似的问题,但没有得到解决

  • 我有日蚀。 我可以用库导出jar(Export- 导出的libs放入projectName_libs文件夹。我可以为导出的库更改(在eclipse中)文件夹名吗?

  • 我正试图在Mac电脑上将Unity项目导出到Android系统,但遇到了以下例外: ExitGUIException:类型为“UnityEngine”的异常。已引发ExitGUIException。单位发动机。Gui实用程序。ExitGUI()(at/Users/builduser/buildslave/unity/build/Runtime/IMGUI/Managed/GUIUtility.cs

  • 我是开发ARCore应用程序的新手。我试图开发,但只有三维物体出现后扫描表面。我想UI按钮工作,有动画时,我点击按钮。谁能帮助我,有一个教程一步一步?

  • 我想作为jar导出的库是一个Android库。它被称为“Standout”,可以从GitHub下载。https://github.com/pingpongboss/standout

  • 问题内容: 我有兴趣将值的子集从MySQL数据库导出到磁盘上的JSON格式的文件中。 我找到了一个讨论执行此操作的方法的链接:http : //www.thomasfrank.se/mysql_to_json.html …但是当我使用该页面中的方法时,它似乎可以工作,但是有两个问题: 1)它只返回大约15个结果,最后一个突然中断(不完整)。当我按以下方式运行时,我对此的标准查询返回大约4000个结