Как ресурсы Java сопоставляются с ресурсами iOS

Что такое ресурсы Java

Ресурсы Java — это файлы данных, упакованные с приложениями и библиотеками Java. Эти ресурсы загружаются во время выполнения либо Class.getResource(String name) , который возвращает java.net.URL , либо Class.getResourceAsStream(String name) , который возвращает java.io.InputStream . Метод getResourceAsStream() обычно используется, когда ожидается, что ресурс будет доступен, поскольку в противном случае он выдает IOException . Метод getResource() возвращает значение null, если ресурс отсутствует, поэтому полезно проверить наличие дополнительных ресурсов.

Имена и пути ресурсов

J2ObjC находит ресурсы, просматривая основной пакет приложения ( [NSBundle mainBundle] ), используя относительный или абсолютный путь к ресурсу:

Относительные пути

Предпочтительный метод указания путей к ресурсам — использование относительных путей. Относительные пути не начинаются с косой черты ('/'). При чтении ресурса с относительным путем имя пакета класса изменяется, точки ('.') в имени пакета заменяются косой чертой ('/'), а затем относительный путь, указанный в Class.getResource(String name) или вызов метода Class.getResourceAsStream(String name) добавляется к пути к пакету.

Например, если в приложении есть класс foo.bar.Mumble , базовым путем для всех ресурсов относительно классов в этом пакете является /foo/bar . При вызове Mumble.class.getResource("oops/error.jpg") к пути пакета добавляется oops/error.jpg , поэтому его полный путь к ресурсу равен /foo/bar/oops/error.jpg .

Абсолютные пути

Доступ к ресурсу также можно получить, используя абсолютный путь, начав имя ресурса с косой черты ('/'). Имена пакетов игнорируются, поэтому J2ObjC находит абсолютные пути в основном пакете приложения, используя пути точно так, как указано в ссылках Class.getResource(String name) или Class.getResourceAsStream(String name) в исходных кодах Java приложения. В приведенном выше примере Mumble.class.getResource("/oops/error.jpg") имеет полный путь к ресурсу /oops/error.jpg , игнорируя имя пакета foo.bar .

Добавление ресурсов в приложение iOS

Чтобы добавить файлы ресурсов в приложение iOS в Xcode, откройте вкладку «Фазы сборки» цели сборки. Затем:

  • Нажмите значок + (на вкладке «Общие») и выберите «Этап нового копирования файлов».
  • Выберите «Ресурсы» в качестве пункта назначения ( не «Ресурсы Java »).
  • Укажите каталог для ресурсов.
  • Выберите + и добавьте файл(ы) в его список.

Независимо от того, используются ли относительные или абсолютные пути к ресурсам, для каждого каталога ресурсов требуется отдельная фаза сборки файлов копирования в сборке Xcode.

Пример

В проекте JreEmulation есть приложение «JRE JUnit Tests», которое запускает модульные тесты этой библиотеки. Выберите этапы сборки этого целевого объекта, чтобы просмотреть несколько этапов копирования файлов, по одному для каждого относительного пути, используемого его ресурсами. Здесь ClassTest.java загружает тот же ресурс, используя сначала абсолютный путь, а затем относительный путь. Ресурс теста включается на этапе сборки Copy Files:

Ресурсы Xcode