Bảo vệ ứng dụng JavaFX

Cả ứng dụng Java thông thường và ứng dụng desktop Spring Boot đều có thể kích hoạt JavaFX. Môi trường chạy gọn nhẹ của P4JX mặc định không bao gồm JavaFX, vì vậy cần phải kích hoạt nó một cách rõ ràng khi đóng gói hoặc dựa vào các khuyến nghị về tính tương thích.

1. Thao tác GUI

  1. Đối với ứng dụng JavaFX thông thường, hãy chọn Java Application trên trang loại ứng dụng; đối với ứng dụng desktop JavaFX sử dụng container Spring, hãy chọn Spring Boot. Library Encryption chỉ tạo ra tập tin đóng gói được bảo vệ, không thể thay thế việc đóng gói ứng dụng JavaFX.

    Chọn Java Application hoặc Spring Boot

  2. Chọn tập tin JAR đầu vào, Phiên bản Java đi kèm và nền tảng đích, sau đó chọn chế độ đơn giản hoặc chế độ nâng cao. Các tài nguyên JavaFX sẽ được lấy riêng biệt cho từng phiên bản Java và nền tảng đích; các nhiệm vụ đa nền tảng sẽ tạo ra các tập tin đầu ra riêng biệt.

    Chọn đầu vào, phiên bản Java, nền tảng đích và chế độ

  3. Khi sử dụng chế độ đơn giản, nếu quá trình quét tính tương thích phát hiện có sự tham chiếu đến javafx.* hoặc các phụ thuộc JavaFX, kết quả quét sẽ nêu rõ lý do điều chỉnh và tự động kích hoạt JavaFX; nếu phát hiện javafx.scene.web, nó còn bao gồm cả WebView. Quá trình quét là phân tích dựa trên nguyên tắc tĩnh, vì vậy sau khi vào trang kết quả vẫn cần kiểm tra lại tóm tắt về JavaFX.

  4. Khi sử dụng chế độ nâng cao, hãy chọn Bundle JavaFX into the packaged runtime trong tab JavaFX runtime, sau đó chọn chiến lược WebView:

    • Auto: Được xác định tự động dựa trên việc ứng dụng có tham chiếu đến javafx.scene.web hay không;
    • Include:Yêu cầu bắt buộc phải bao gồm WebView (fx-webkit);
    • Exclude:Yêu cầu bắt buộc không bao gồm WebView.

    Điểm vào cho các ứng dụng Java thông thường như sau:

    Trong các tham số nâng cao của ứng dụng Java thông thường, hãy chọn JavaFX runtime

    Các ứng dụng desktop Spring Boot sử dụng tab có tên tương tự:

    Chọn môi trường chạy JavaFX trong các tham số nâng cao của Spring Boot

  5. Sau khi chọn thư mục đầu ra, hãy kiểm tra xem JavaFX trong tóm tắt tham số có được hiển thị là đã được tích hợp sẵn và trạng thái của WebView có phù hợp với kỳ vọng hay không, sau đó nhấp vào Run protection. Sau khi tạo xong, hãy sử dụng script khởi động có sẵn trong gói để kiểm tra cửa sổ, tài nguyên FXML, CSS/hình ảnh và WebView trên từng nền tảng mục tiêu.

Tài liệu liên quan đến WebView có kích thước khoảng 40 MB; khi không sử dụng, bạn có thể chọn Exclude để giảm kích thước gói. Ý nghĩa của các thiết lập khác trong giao diện nâng cao có thể được xem tại Cài đặt chế độ nâng cao của Protector4JCài đặt Spring Boot.

2. Tải về CLI trực tuyến

p4j javaapp fx-app.jar dist --javafx

Spring Boot JavaFX:

p4j springboot fx-boot.jar dist --javafx

Yêu cầu bắt buộc phải bao gồm hoặc loại bỏ WebView:

--javafx-webview
--no-javafx-webview

Công cụ lấy các tài liệu tương ứng từ các trang tải về công khai trong khu vực hiện tại, dựa trên đường dẫn huấn luyện Java và nền tảng mục tiêu. Việc tải về JavaFX cũng như VLX JRE đều không yêu cầu phải cung cấp khóa lưu trữ đám mây cho phía client.

3. Tài liệu ngoại tuyến

CLI hỗ trợ các thư mục cục bộ:

p4j javaapp fx-app.jar dist --javafx /opt/p4jx-fx

Thư mục có thể chứa:

  • fx-core.tar.gz cùng với fx-webkit.tar.gz tùy chọn; hoặc
  • Cấu trúc tệp JavaFX đã được mở rộng, với lib/ làm gốc.

GUI không cung cấp tùy chọn chọn thư mục JavaFX cục bộ; hãy sử dụng CLI trong các trường hợp ngoại tuyến.

4. FXML

Nếu ứng dụng sử dụng FXMLLoader, việc quét khả năng tương thích sẽ đề xuất bật tính năng scanner ZIP overlay:

p4j javaapp fx-app.jar dist --javafx --zip-overlay scanner

Các tài nguyên liên quan đến FXML, chữ ký của bộ điều khiển và việc quét framework cần được thực hiện thông qua các bài kiểm thử khởi động trên nền tảng mục tiêu.

5. Java 8 và Java 11+

  • Khi sử dụng Java 8 với jfxrt.jar/mô hình thư mục mở rộng, việc tạo script thường không yêu cầu các tham số mô-đun.
  • Java 11+ sử dụng các JAR JavaFX có cấu trúc mô-đun; khi tạo script, các giá trị module path riêng biệt cùng --add-modules sẽ được thiết lập tự động.

Hãy luôn sử dụng các tập tin run.sh, run.command hoặc run.bat đã được tạo ra, và không nên tự ý sử dụng toàn bộ vlxjre/lib làm module path.

6. Phát hiện tự động các giới hạn

Bộ phát hiện sẽ quét các tham chiếu lớp của chính ứng dụng và xác định JavaFX dựa trên tên các tập tin JAR phụ thuộc. Nó sẽ không quét sâu vào mã byte của tất cả các phụ thuộc bên thứ ba nhằm tránh nhầm lẫn giữa các thành phần JavaFX có thể chọn thêm với những thành phần đang được sử dụng thực sự.

Nếu JavaFX bị ẩn trong một phụ thuộc có tên không cho thấy rõ đó là JavaFX, việc quét tự động có thể dẫn đến việc bỏ sót; trường hợp này cần sử dụng rõ ràng --javafx.

7. Gợi ý về phạm vi bảo vệ

  • Việc xác định xem các lớp con của JavaFX Application, FXML Controller và mô hình thuộc tính có được bảo vệ hay không cần dựa trên kết quả kiểm tra thực tế trên phiên bản Java mục tiêu.
  • Các lớp cầu nối cho phép truy cập trực tiếp qua JNI/native nên được giữ nguyên dưới dạng lớp thông thường.
  • Trước tiên hãy sử dụng chế độ đơn giản hoặc --compat-scan, sau đó tiến hành kiểm thử lại các hoạt động như mở cửa sổ, tải FXML, tài nguyên CSS/hình ảnh, WebView và thư viện native của nền tảng.