Jak zasoby Java są mapowane na zasoby iOS

Czym są zasoby Java

Zasoby Java to pliki danych, które są spakowane z aplikacjami i bibliotekami Java. Zasoby te są wczytywane w czasie działania: Class.getResource(String name), co zwraca wartość java.net.URL lub Class.getResourceAsStream(String name), która zwraca wartość java.io.InputStream. Metoda getResourceAsStream() jest zwykle używana w sytuacji, gdy zasób powinien być dostępny, ponieważ w przeciwnym razie wysyła IOException. Metoda getResource() zwraca wartość null, jeśli zasób nie jest podany, więc warto przetestować pod kątem zasobów opcjonalnych.

Nazwy i ścieżki zasobów

J2ObjC znajduje zasoby, wyszukując główny pakiet aplikacji ([NSBundle mainBundle]), używając ścieżki względnej lub bezwzględnej zasobu:

Ścieżki względne

Preferowaną metodą określania ścieżek zasobów jest użycie ścieżek względnych. Ścieżki względne nie zaczynają się od ukośnika („/”). Podczas odczytywania zasobu ze ścieżką względną nazwa pakietu klasy zostaje zmieniona przez zmianę kropek („.”) w nazwie pakietu na ukośniki prawe („/”), a ścieżka względna określona w wywołaniu metody Class.getResource(String name) lub Class.getResourceAsStream(String name) jest dodawana do ścieżki pakietu.

Jeśli na przykład aplikacja ma klasę foo.bar.Mumble, ścieżka bazowa wszystkich zasobów względem klas w tym pakiecie to /foo/bar. Po wywołaniu Mumble.class.getResource("oops/error.jpg") parametr oops/error.jpg jest dołączany do ścieżki pakietu, więc pełna ścieżka zasobu to /foo/bar/oops/error.jpg.

Ścieżki bezwzględne

Dostęp do zasobu można też uzyskać za pomocą ścieżki bezwzględnej, zaczynając od nazwy zasobu od ukośnika („/”). Nazwy pakietów są ignorowane, więc J2ObjC znajduje ścieżki bezwzględne w głównym pakiecie aplikacji za pomocą ścieżek dokładnie określonych w odwołaniach Class.getResource(String name) lub Class.getResourceAsStream(String name) w źródłach Java aplikacji. W powyższym przykładzie Mumble.class.getResource("/oops/error.jpg") ma pełną ścieżkę zasobu o wartości /oops/error.jpg, ignorując nazwę pakietu foo.bar.

Dodawanie zasobów do aplikacji na iOS

Aby dodać pliki zasobów do aplikacji na iOS w Xcode, otwórz kartę Etapy kompilacji w miejscu docelowym kompilacji. To:

  • Kliknij ikonę + (na karcie Ogólne) i wybierz etap Nowe kopiowanie plików.
  • Jako miejsce docelowe wybierz „Resources” (Zasoby) (nie zasoby Java).
  • Określ katalog dla zasobów.
  • Kliknij + i dodaj pliki do listy.

Niezależnie od tego, czy używane są ścieżki względne czy bezwzględne, każdy katalog zasobów wymaga osobnego etapu kompilacji Copy Files w kompilacji Xcode.

Przykład

Projekt środowiska JreEmulation zawiera aplikację „JRE JUnit Tests”, która uruchamia testy jednostkowe tej biblioteki. Wybierz fazy kompilacji tego celu, aby wyświetlić kilka etapów kopiowania plików, po jednej dla każdej ścieżki względnej używanej przez jej zasoby. W tym przypadku ClassTest.java wczytuje ten sam zasób, używając najpierw ścieżki bezwzględnej, a potem ścieżki względnej. Zasób testu jest uwzględniony w tej fazie kompilacji kopiowania plików:

Zasoby Xcode