Cách Tài nguyên Java ánh xạ đến Tài nguyên iOS

Tài nguyên Java là gì

Tài nguyên Java là các tệp dữ liệu được đóng gói cùng với các ứng dụng và thư viện Java. Các tài nguyên này được tải trong thời gian chạy Class.getResource(String name) để trả về java.net.URL hoặc Class.getResourceAsStream(String name) khi trả về java.io.InputStream. Phương thức getResourceAsStream() thường được dùng khi một tài nguyên dự kiến sẽ có sẵn, vì phương thức này sẽ gửi IOException nếu không có tài nguyên. Phương thức getResource() trả về giá trị rỗng nếu không có tài nguyên, vì vậy, bạn nên kiểm thử các tài nguyên không bắt buộc.

Tên và đường dẫn tài nguyên

J2ObjC định vị tài nguyên bằng cách tìm trong gói chính của ứng dụng ([NSBundle mainBundle]), thông qua đường dẫn tương đối hoặc tuyệt đối của tài nguyên:

Đường dẫn tương đối

Phương pháp ưu tiên để chỉ định đường dẫn tài nguyên là sử dụng đường dẫn tương đối. Đường dẫn tương đối không bắt đầu bằng dấu gạch chéo lên ↑). Khi đọc tài nguyên có đường dẫn tương đối, tên gói của lớp sẽ được sửa đổi, thay đổi dấu chấm ('.') trong tên gói thành dấu gạch chéo lên ') thì đường dẫn tương đối được chỉ định trong lệnh gọi phương thức Class.getResource(String name) hoặc Class.getResourceAsStream(String name) sẽ được thêm vào đường dẫn gói.

Ví dụ: nếu một ứng dụng có lớp foo.bar.Mumble, thì đường dẫn cơ sở cho mọi tài nguyên liên quan đến các lớp trong gói đó là /foo/bar. Khi Mumble.class.getResource("oops/error.jpg") được gọi, oops/error.jpg sẽ được thêm vào đường dẫn của gói, vì vậy, đường dẫn tài nguyên đầy đủ của gói là /foo/bar/oops/error.jpg.

Đường dẫn tuyệt đối

Bạn cũng có thể truy cập tài nguyên bằng đường dẫn tuyệt đối bằng cách bắt đầu tên tài nguyên bằng dấu gạch chéo lên ;"). Tên gói bị bỏ qua, vì vậy J2ObjC định vị các đường dẫn tuyệt đối trong gói chính của ứng dụng bằng cách sử dụng các đường dẫn chính xác như được chỉ định trong các tệp tham chiếu Class.getResource(String name) hoặc Class.getResourceAsStream(String name) trong các nguồn Java của ứng dụng. Trong ví dụ trên, Mumble.class.getResource("/oops/error.jpg") có đường dẫn tài nguyên đầy đủ là /oops/error.jpg, bỏ qua tên gói foo.bar.

Thêm tài nguyên vào ứng dụng iOS

Để thêm tệp tài nguyên vào một ứng dụng iOS trong Xcode, hãy mở thẻ Giai đoạn tạo của mục tiêu bản dựng. Sau đó:

  • Nhấp vào biểu tượng dấu + (trong thẻ General) rồi chọn Giai đoạn sao chép tệp mới.
  • Chọn "Tài nguyên" làm Đích đến (không phải Tài nguyên Java).
  • Chỉ định thư mục cho(các) tài nguyên.
  • Chọn dấu + rồi thêm(các) tệp vào danh sách.

Bất kể bạn sử dụng đường dẫn tài nguyên tương đối hay tuyệt đối, mỗi thư mục tài nguyên đều yêu cầu một giai đoạn tạo tệp Sao chép tệp riêng trong bản dựng Xcode.

Ví dụ:

Dự án JreEmulation có một ứng dụng "JRE JUnit Tests" chạy các kiểm thử đơn vị của thư viện đó. Chọn các giai đoạn Xây dựng của mục tiêu đó để xem một số giai đoạn Sao chép tệp, mỗi giai đoạn cho một đường dẫn tương đối mà tài nguyên sử dụng. Ở đây, ClassTest.java tải cùng một tài nguyên bằng cách sử dụng đường dẫn tuyệt đối đầu tiên, sau đó là đường dẫn tương đối. Tài nguyên của chương trình kiểm thử được đưa vào giai đoạn tạo bản dựng Sao chép tệp này:

Tài nguyên Xcode