Expo 54 Как читать связанные ресурсы напрямую, без извлечения в кеш?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Expo 54 Как читать связанные ресурсы напрямую, без извлечения в кеш?

Сообщение Anonymous »

Я создаю приложение с помощью React Native/Expo SDK 54.
Приложение содержит около 42 000 сжатых HTML-файлов (, сжато ~224 МБ), которые должны быть доступны без доступа к сети.

Проблема
Моя производственная сборка iOS занимает 325 МБ, но при первом запуске она создает еще 330 МБ в «Документах и данных» — по сути, дублируя все ресурсы.
Первый запуск также занимает более 1 минуты, что составляет неприемлемо.

Что я пробовал
Изначально использовал Asset.fromModule() с импортом для каждого файла документа.
  • Это приводит к тому, что Expo автоматически извлекает все импортированные ресурсы для кэширования при первом запуске.
  • Отсюда дублирование и медленный запуск.
    />
Пытался получить доступ к файлам через Paths.bundle с помощью нового File API (SDK 54).
  • Файлы там не существуют.
  • Я думаю, это потому, что я их импортирую, поэтому они встроены в пакет JS, а не включены как отдельные ресурсы в комплекте.
Протестировано несколько методов доступа к ресурсам в рабочей среде.
  • Работает только assets.localUri, но он указывает на расположение извлеченного кэша (дублирование, которое я пытаюсь избежать).
  • То же самое с DownloadAsync — работает, но дублирует файл и работает медленнее.
Что я Хотите
Файлы должны быть объединены в приложение во время сборки, а затем считываться непосредственно из пакета по требованию, когда пользователь открывает страницу документа.
Не нужно ничего копировать — просто откройте связанный файл и прочитайте его байты.
Кажется, что это должно быть просто — файлы находятся в пакете (325 МБ доказывают это).
Я просто хочу прочитать их, не копируя их Expo. сначала кэшировать.
Он также отлично работает в сборках для разработки и в Интернете — проблемы возникают только в собственных сборках.

Текущая архитектура
  • Тысячи сжатых HTML-файлов .zst
  • Манифесты с операторами импорта для каждого файла (создаются автоматически)
  • Файлы на него ссылается хеш в манифесте, загружается по требованию, когда пользователь переходит на страницу.
  • Тип файла zst добавляется как внешний ресурс в конфигурацию Metro.
  • В настоящее время в app.json ничего не делается для этих ресурсов.
Вопросы
  • Следует ли использовать assetsBundlePatterns вместо импорта?
    Сделает ли это их доступными через Paths.bundle?
  • Есть ли способ объединить файлы без импорта, чтобы Expo не извлекала их автоматически?
  • Неизбежно ли извлечение assets.localUri при использовании Asset.fromModule()?
  • Должен ли я использовать совершенно другой подход для объединения такого количества файлов?
    Или вообще не объединять их и получить к ним доступ другим способом?
Среда:
  • Expo SDK 54
  • React Native 0.81.5
  • EAS Build (рабочие сборки iOS)
  • Включена новая архитектура


Подробнее здесь: https://stackoverflow.com/questions/798 ... n-to-cache
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»