Bước tạo liên kết (giai đoạn xây dựng "Link Binary With Libraries" (Liên kết tệp nhị phân với thư viện" của Xcode) cần có cờ dành riêng cho J2ObjC, các lớp này khác nhau tuỳ thuộc vào cách ứng dụng của bạn sử dụng các lớp Java đã dịch. Cờ chính được đặt bởi tập lệnh dòng lệnh j2objcc, nhưng cần được chỉ định khi tạo bản dựng nhờ Xcode.
Thư viện SDK
Thư viện này là bắt buộc trong quá trình triển khai JRE của J2ObjC. Không bao gồm thông tin này
sẽ dẫn đến lỗi biểu tượng không xác định với tên bắt đầu bằng _iconv
.
Thư viện | Cờ liên kết | Mô tả |
---|---|---|
iconv | biểu tượng -l | jre_core dùng để mã hoá và giải mã ký tự. |
Các thư viện này được sử dụng trong quá trình triển khai JRE của J2ObjC và có thể cần được liên kết với ứng dụng của bạn.
Thư viện | Cờ liên kết | Mô tả |
---|---|---|
zip | -l z | Được java.util.zip sử dụng. Bạn cần thêm đoạn mã này nếu bạn đang liên kết jre_zip. |
Bảo mật | bảo mật khung | Bắt buộc nếu bạn liên kết jre_security. |
Đường dẫn tìm kiếm thư viện
Bản phân phối của J2ObjC bao gồm một số thư viện tĩnh; dự án của bạn cần cho biết cho trình liên kết.
Nói chung, đường dẫn tìm kiếm thư viện cần bao gồm _$(j2objcdistribution)/lib, trong đó Biến _$(j2objcdistribution) là đường dẫn đến bản sao cục bộ của J2ObjC. Ví dụ: nếu bạn đã giải nén tệp lưu trữ phát hành J2ObjC để "/usr/local/", đường dẫn này sẽ là "/usr/local/j2objc".
Lưu ý quan trọng: Không thực sự sử dụng _$(j2objcdistribution) trong dự án; luôn chỉ định đường dẫn thực tế nơi bạn đã cài đặt J2ObjC.
Nếu bạn tạo J2ObjC từ một bản sao của mã nguồn, thì _$(j2objcdistribution) là bản sao của bản sao
"j2objc/dist/" thư mục. Thư mục này sẽ không tồn tại cho đến khi bạn tạo J2ObjC bằng make dist
.
Xcode: Đường dẫn tìm kiếm trong thư viện
Cập nhật Đường dẫn tìm kiếm trong thư viện của mục tiêu ứng dụng bằng cách thêm _$(j2objcdistribution)/lib (một lần nữa, hãy sử dụng đường dẫn thực).
Thư viện JRE
Các thư viện này triển khai các lớp được xác định theo quy trình mô phỏng JRE của J2ObjC.
Lưu ý: Thư viện libjre_core.a
chứa các lớp trong hầu hết các tập hợp con khác
thư viện. Bạn nên bắt đầu liên kết ứng dụng để giảm kích thước ứng dụng
với -l jre_core
, sau đó thêm các thư viện tập hợp con giúp giải quyết mọi ký hiệu bị thiếu.
Ví dụ: các lớp java.io
thường dùng nhất là trong libjre_core.a
,
Vì vậy, chỉ thêm thư viện libjre_io.a
nếu có lỗi biểu tượng chưa được giải quyết
có tên bắt đầu bằng JavaIo
.
Thư viện | Cờ liên kết | Mô tả |
---|---|---|
libjre_core.a | jre_core | Tập hợp lớp tối thiểu cần thiết cho quy trình mô phỏng JRE của J2ObjC, được tất cả tệp nguồn được tạo. Nếu các nguồn Java đã dịch tham chiếu đến khả năng hỗ trợ JRE cho những tính năng như nối mạng, XML, SQL, v.v. rồi đến các thư viện bổ sung (bên dưới) bạn cũng cần liên kết tài khoản. |
libjre_beans.a | -l jre_beans |
Tất cả các lớp
khỏi gói java.beans . Không phải tất cả các lớp Hạt Java đều
vì nhiều loại chỉ được sử dụng bởi các ứng dụng Swing và AWT.
|
libjre_channels.a | Kênh |
Một số lớp
từ java.nio.channels và java.nio.channels.spi
.
|
libjre_concurrent.a | jre_concurrent |
Một số lớp
từ java.util.concurrent , java.util.concurrent.atomic
và java.util.concurrent.locks .
|
libjre_icu.a | Tôi không hiểu lắm |
Một số lớp
từ android.icu để hỗ trợ múi giờ (chủ yếu để cho phép
java.time ).
|
libjre_io.a | CANNOT TRANSLATE |
Một số lớp (ít thường xuyên sử dụng)
khỏi gói java.io .
|
libjre_net.a | jre_net |
Một số lớp
trong gói java.net . Tuy nhiên, java.net.URLClassLoader
lớp này ở trong jre_security , trong khi javax.net và
Lớp javax.net.ssl học trong jre_ssl .
|
libjre_security.a | -l jre_security |
Hầu hết các lớp
trong gói java.security (một số ít nằm trong jre_core ),
cũng như các lớp trong java.security.* ,
javax.crypto.* và javax.security.* .
Nếu liên kết tài khoản này, bạn cũng cần liên kết khung bảo mật iOS.
(xem Thư viện SDK)
|
libjre_sql.a | Hàm jre_sql |
Tất cả các lớp
trong gói java.sql .
|
libjre_ssl.a | jre_ssl |
Tất cả các lớp
trong gói javax.net và javax.net.ssl .
|
libjre_time.a | jre_time |
Tất cả các lớp
trong gói java.time .
|
libjre_util.a | -l jre_util |
Một số lớp
từ gói java.util , cũng như
Gói java.util.logging . Nhiều lớp java.util nhất
đang ở trong jre_core , vì vậy chỉ đưa thư viện này vào nếu có
là các lỗi biểu tượng JavaUtil* chưa được giải quyết
(JavaUtilConcurrent* biểu tượng nằm trong
jre_concurrent ).
|
libjre_xml.a | Tệp jre_xml |
Tất cả các lớp
từ các gói liên quan đến XML, bao gồm javax.xml.* ,
org.w3c.dom.* và org.xml.sax.* .
|
libjre_zip.a | jre_zip |
Tất cả các lớp
qua gói java.util.zip và java.util.jar .
Nếu liên kết đường liên kết này, bạn cũng cần liên kết thư viện zip của SDK. (xem
Thư viện SDK)
|
libjre_emul.a (-l jre_emul)
Thư viện jre_emul
chứa tất cả các lớp có trong quy trình mô phỏng JRE của J2ObjC. Nếu một ứng dụng là
được liên kết với jre_emul
, thì bạn không nên bao gồm thư viện jre_* nào khác, nếu không trình liên kết sẽ
báo cáo lỗi biểu tượng trùng lặp. Lý do là jre_emul
bao gồm tất cả các lớp được xác định trong các lớp đó
các thư viện khác.
Các thư viện J2ObjC khác
Các thư viện Java và lớp sử dụng Android này đều được đưa vào J2ObjC dưới dạng thư viện tĩnh:
Thư viện | Cờ liên kết | Mô tả |
---|---|---|
libguava.a | -l ổi | Guava: Các thư viện cốt lõi của Google dành cho Java |
libjavax_inject.a | -l javax_inject | Tính năng chèn phần phụ thuộc JSR-330 thư viện chú giải. |
libjson.a | Tệp JSON | Thư viện trao đổi dữ liệu JSON. Đây là Phiên bản JSON trên Android. Phiên bản này hơi khác một chút so với các cách triển khai khác. |
libjsr305.a | -l jsr305 | Chú thích JSR-305 cho phần mềm thư viện phát hiện lỗi. |
libjunit.a | -l junit -ObjC | Khung kiểm thử JUnit. |
libmockito.a | -l mockito – ObjC | Khung mô phỏng Mockito cho các bài kiểm thử đơn vị trong Java. |
libprotobuf_runtime.a | -l protobuf_runtime | Vùng đệm giao thức của Google thời gian chạy, được tối ưu hoá cho các ứng dụng J2ObjC. Các ứng dụng sử dụng protobuf J2ObjC nên biên dịch proto bằng j2objc_protoc. |
libandroid_util.a | -l Android_util | Thư viện "android_util" chứa một tập hợp con nhỏ các lớp tiện ích API Android. Ứng dụng này không nhằm mục đích mô phỏng môi trường Android, mà chỉ là một cách để chia sẻ các lớp hữu ích như "android.util.Log". |
Cờ liên kết -ObjC
Cờ -ObjC thường được dùng khi liên kết các ứng dụng iOS, nhưng chỉ bắt buộc khi Mục tiêu
Các lớp và danh mục C cần được tải động từ thư viện tĩnh. Cờ này khiến tất cả
các lớp trong tất cả thư viện tĩnh được liên kết để đưa vào ứng dụng, cho dù chúng có thực sự
đã sử dụng. Do đó, ứng dụng sử dụng J2ObjC chỉ liên kết với cờ -ObjC khi
các lớp không tải được trong thời gian chạy (một dấu hiệu là khi JavaLangClassNotFoundException
được gửi).
Khung thử nghiệm JUnit và Mockito chủ yếu dựa vào hoạt động phản chiếu, vì vậy, các ứng dụng thử nghiệm sử dụng chúng nên liên kết với -ObjC.
Một giải pháp thay thế cho việc liên kết trong một thư viện tĩnh hoàn toàn để một vài lớp có thể được tải động là để tham chiếu tĩnh các lớp đó. Trong Java, bạn có thể thực hiện việc này trong một trình khởi chạy tĩnh block; đây là ví dụ từ J2ObjC Lớp IosSecurityProvider:
// Reference all dynamically loaded classes, so they are linked into apps.
@SuppressWarnings("unused")
private static final Class<?>[] unused = {
IosCertificateFactory.class,
IosMD5MessageDigest.class,
IosRSAKeyFactory.class,
IosRSAKeyPairGenerator.class,
IosRSASignature.class,
IosSecureRandomImpl.class,
IosSHAMessageDigest.class
};