#c# #android #c #unity3d
#c# #Android #c #unity3d
Вопрос:
Я разработал приложение C # в Unity для Android. Кроме того, я создал пользовательскую внешнюю C DLL, которая правильно загружается и доступна из кода C #. Я также добавил несколько XML-файлов в папку StreamingAssets, которая работает должным образом, поскольку я вижу, что эти файлы загружены в .apk.
В настоящее время моя проблема заключается в том, что я не могу получить доступ к таким XML-файлам из моей библиотеки C . С одной стороны, я не уверен, как это сделать правильно, с другой стороны, я пробовал несколько неудачных подходов, в том числе пытался понять, в каком cwd была загружена моя DLL, а затем перейти к нужным мне файлам (что не сработало, поскольку я постоянно получаю сообщение об ошибке «отказано в доступе»).
Редактировать:
Ваши ответы на самом деле поставили меня на правильный путь, и я решил проблему следующим образом:
- На этапе OnStart() моего приложения я использую класс UnityWebRequest для извлечения из файла JAR необходимых файлов, а затем сохраняю их в приложении.persistentDataPath
- После этого я передаю в свою DLL новый путь к каждому файлу, который позволяет мне получать к ним доступ без каких-либо проблем.
Комментарии:
1. Во встроенном приложении я бы скопировал их в Application.persistentDataPath , который обычно доступен для целевой обычной системы папок. Как сказано там, путь на Android есть
/storage/emulated/0/Android/data/<packagename>/files
, и к нему также можно получить доступ с помощьюandroid.content.Context.getExternalFilesDir
Ответ №1:
На Android StreamingAssets находятся в jar. Это вполне может быть причиной, по которой вы не можете получить к ним доступ, но, как вы можете видеть в руководстве, вы можете использовать WWW
класс для извлечения файлов там.
На Android файлы содержатся в сжатом файле .jar (который, по сути, имеет тот же формат, что и стандартные файлы, сжатые в zip-формате). Это означает, что если вы не используете класс WWW Unity для извлечения файла, вам необходимо использовать дополнительное программное обеспечение, чтобы заглянуть в архив .jar и получить файл.
Комментарии:
1. Спасибо, я знал об этой части документации. Проблема в том, что класс UnityWWW может быть вызван только со стороны C # кода. Мне нужно загрузить XML-файлы непосредственно из моей C DLL.
Ответ №2:
На Android файлы содержатся в сжатом файле .jar (который, по сути, имеет тот же формат, что и стандартные файлы, сжатые в zip-формате). Это означает, что если вы не используете класс WWW Unity для извлечения файла, вам необходимо использовать дополнительное программное обеспечение, чтобы заглянуть в архив .jar и получить файл.
JAR — это формат файла пакета, обычно используемый для объединения многих файлов классов Java и связанных с ними метаданных и ресурсов в один файл для распространения. Файлы JAR — это архивные файлы, которые включают файл манифеста, специфичный для Java. Они построены в формате ZIP и обычно имеют расширение файла .jar.
Это означает, что вы можете работать с файлами jar так же, как и с zip-файлами. Для minizip есть форк с примерами его использования.