在Android上的Unity中从C ++ DLL访问StreamingAssets资源

时间:2019-04-18 15:25:46

标签: c# android c++ unity3d

我已经在Unity for Android中开发了一个C#应用程序。此外,我构建了一个自定义的外部C ++ DLL,该DLL已正确加载并可以从C#代码访问。我还向StreamingAssets文件夹中添加了一些.xml文件,该文件可以按预期工作,因为我看到这些文件已加载到.apk中。

当前,我的问题是我无法从C ++库访问此类xml文件。一方面,我不确定如何正确执行操作,另一方面,我尝试了多种不成功的方法,包括尝试了解DLL加载到哪个cwd中,然后导航到所需的文件(由于我不断地工作,因此无法正常工作)收到访问被拒绝的错误)。

编辑:

您的回复实际上使我走上了正确的轨道,我按照以下步骤解决了该问题:

  • 在应用程序的OnStart()阶段,我使用UnityWebRequest类从JAR文件中提取所需的文件,然后将它们保存在Application.persistentDataPath中
  • 之后,我将每个文件的新路径传递给DLL,这使我可以毫无问题地访问它们。

2 个答案:

答案 0 :(得分:1)

在Android上,StreamingAssets位于一个jar中。这很可能就是您无法访问它们的原因,但是正如您在手册中所看到的,可以使用WWW类在此处检索文件。

  

在Android上,文件包含在压缩的.jar文件中   (与标准的zip压缩格式基本相同   文件)。这意味着如果您不使用Unity的WWW类   检索文件,您需要使用其他软件才能查看内部   .jar存档并获取文件。

https://docs.unity3d.com/Manual/StreamingAssets.html

答案 1 :(得分:1)

  

在Android上,文件包含在压缩的.jar文件中   (与标准的zip压缩格式基本相同   文件)。这意味着如果您不使用Unity的WWW类   检索文件,您需要使用其他软件才能查看内部   .jar存档并获取文件。


JAR是一种包文件格式,通常用于将许多Java类文件以及关联的元数据和资源聚合到一个文件中以进行分发。 JAR文件是包含Java特定清单文件的存档文件。 它们基于ZIP格式构建,通常具有.jar文件扩展名。


这意味着您可以像处理 zip 文件一样使用 jar 文件。 minizip有一个分叉,上面有使用示例。