Setelan Link yang Diperlukan

Langkah build link (fase build "Link Binary With Libraries" Xcode) memerlukan flag khusus J2ObjC, yang bervariasi tergantung pada bagaimana aplikasi Anda menggunakan class Java yang diterjemahkan. Penanda inti{i> <i} ditetapkan oleh skrip command line j2objcc, tetapi perlu ditentukan saat membangun dengan Xcode.

Library SDK

Library ini diperlukan oleh implementasi JRE J2ObjC. Tidak dapat menyertakannya library akan menghasilkan error simbol yang tidak ditentukan dengan nama yang diawali dengan _iconv.

KoleksiTanda LinkDeskripsi
iconv -l ikonv Digunakan oleh jre_core untuk encoding dan decoding karakter.

Library ini digunakan oleh implementasi JRE J2ObjC dan mungkin perlu ditautkan ke aplikasi Anda.

KoleksiTanda LinkDeskripsi
zip -l z Digunakan oleh java.util.zip. Anda harus mencantumkan ini jika Anda menautkan jre_zip Anda.
Keamanan Keamanan -framework Wajib jika menautkan jre_security.

Jalur Penelusuran Perpustakaan

Distribusi J2ObjC mencakup beberapa library statis; untuk menggunakannya, proyek Anda perlu memberi tahu {i> linker <i}di mana menemukannya.

Umumnya, jalur penelusuran library harus menyertakan _$(j2objcdistribution)/lib, dengan Variabel _$(j2objcdistribution) adalah jalur ke salinan lokal J2ObjC Anda. Misalnya, jika Anda mengekstrak file arsip rilis J2ObjC untuk "/usr/local/", jalur ini akan menjadi "/usr/local/j2objc".

Penting: Jangan benar-benar menggunakan _$(j2objcdistribusi) di project Anda; selalu menentukan jalur sebenarnya di mana Anda menginstal J2ObjC.

Jika Anda membuat J2ObjC dari salinan kode sumbernya, maka _$(j2objcdistribution) adalah file salinan Anda "j2objc/dist/" saat ini. Direktori ini tidak akan ada sampai Anda membangun J2ObjC dengan make dist.

Xcode: Jalur Penelusuran Library

Update Jalur Penelusuran Library target aplikasi dengan menambahkan _$(j2objcdistribution)/lib (sekali lagi, gunakan jalur yang sebenarnya).

Library JRE

Library ini mengimplementasikan class yang ditentukan oleh emulasi JRE J2ObjC.

Catatan: library libjre_core.a berisi class dari sebagian besar subset lainnya library. Cara yang direkomendasikan untuk mengurangi ukuran aplikasi adalah dengan mulai menautkan aplikasi dengan -l jre_core, lalu tambahkan library subset yang menyelesaikan simbol yang hilang. Misalnya, class java.io yang paling umum digunakan adalah di libjre_core.a, jadi hanya sertakan library libjre_io.a jika ada error simbol yang belum terselesaikan yang namanya diawali dengan JavaIo.

KoleksiTanda LinkDeskripsi
libjre_core.a {i>-l jre_core<i} Kumpulan class minimum yang diperlukan untuk emulasi JRE J2ObjC, yang direferensikan oleh semua file sumber yang dihasilkan. Jika sumber Java yang diterjemahkan merujuk ke dukungan JRE untuk hal-hal seperti jaringan, XML, SQL, dll., maka library tambahan (di bawah ini) juga perlu ditautkan.
libjre_beans.a {i>-l jre_beans<i} Semua kelas dari paket java.beans. Tidak semua kelas Java Beans disertakan, karena banyak yang hanya digunakan oleh aplikasi Swing dan AWT.
libjre_channels.a {i>-l jre_channels<i} Beberapa class dari java.nio.channels dan java.nio.channels.spi paket.
libjre_concurrent.a {i>-l jre_concurrent<i} Beberapa class dari java.util.concurrent, java.util.concurrent.atomic dan paket java.util.concurrent.locks.
libjre_icu.a {i>-l jre_icu<i} Beberapa class dari android.icu untuk mendukung zona waktu (terutama untuk mengaktifkan java.time).
libjre_io.a {i>-l jre_io<i} Beberapa class (lebih jarang digunakan) dari paket java.io.
libjre_net.a {i>-l jre_net<i} Beberapa class dalam paket java.net. Namun, java.net.URLClassLoader berada di jre_security, sedangkan javax.net dan Class javax.net.ssl ada di jre_ssl.
libjre_security.a {i>-l jre_security<i} Sebagian besar kelas dalam paket java.security (beberapa di jre_core), serta class di java.security.*, javax.crypto.*, dan javax.security.*. Jika menautkan ini, Anda juga perlu menautkan framework Keamanan iOS. (lihat Library SDK)
libjre_sql.a {i>-l jre_sql<i} Semua kelas dalam paket java.sql.
libjre_ssl.a {i>-l jre_ssl<i} Semua kelas dalam paket javax.net dan javax.net.ssl.
libjre_time.a -jre_time Semua kelas dalam paket java.time.
libjre_util.a {i>-l jre_util<i} Beberapa class dari paket java.util, serta paket java.util.logging. Sebagian besar kelas java.util dalam jre_core, jadi hanya sertakan library ini jika ada apakah error simbol JavaUtil* belum terselesaikan (JavaUtilConcurrent* simbol berada di library jre_concurrent).
libjre_xml.a {i>-l jre_xml<i} Semua kelas dari paket terkait XML, termasuk javax.xml.*, org.w3c.dom.*, dan org.xml.sax.*.
libjre_zip.a {i>-l jre_zip<i} Semua kelas dari paket java.util.zip dan java.util.jar. Jika menautkannya, Anda juga perlu menautkan library SDK ZIP. (lihat Library SDK)

libjre_emul.a (-l jre_emul)

Library jre_emul berisi semua class yang disertakan dalam emulasi JRE J2ObjC. Jika aplikasi ditautkan dengan jre_emul, tidak ada library jre_* lain yang harus disertakan, atau penaut akan melaporkan error simbol duplikat. Hal itu karena jre_emul menyertakan semua class yang ditentukan dalam library lainnya.

Library J2ObjC Lainnya

Library Java dan class utilitas Android ini disertakan dalam J2ObjC distribusi sebagai library statis:

KoleksiTanda LinkDeskripsi
libguava.a -l jambu biji Guava: Library Inti Google untuk Java
libjavax_inject.a {i>-l javax_inject<i} Injeksi dependensi JSR-330 library anotasi.
libjson.a {i>-l json<i} Library pertukaran data JSON. Ini adalah JSON versi Android, yang sedikit berbeda dari implementasi lainnya.
libjsr305.a {i>-l jsr305<i} Anotasi JSR-305 untuk software {i>defect detection library<i}.
libjunit.a {i>-l junit -ObjC<i} Framework pengujian JUnit.
libmockito.a -l mockito -ObjC Framework tiruan Mockito untuk pengujian unit di Java.
libprotobuf_runtime.a -l protobuf_runtime Buffering Protokol Google runtime, yang dioptimalkan untuk aplikasi J2ObjC. Aplikasi yang menggunakan protobuf J2ObjC harus mengompilasi proto-nya file dengan {i>j2objc_protoc<i}.
libandroid_util.a {i>-l android_util<i} Library `android_util` berisi subset kecil class utilitas Android API. Tidak dimaksudkan untuk menyediakan emulasi lingkungan Android, melainkan hanya cara berbagi yang berguna seperti `android.util.Log`.

Tanda -ObjC sering digunakan saat menautkan aplikasi iOS, tetapi hanya diperlukan jika Tujuan Class dan kategori C harus dimuat secara dinamis dari library statis. Flag ini menyebabkan semua di semua library statis yang ditautkan untuk disertakan dalam aplikasi, terlepas dari data Oleh karena itu, sebaiknya aplikasi yang menggunakan J2ObjC hanya tertaut dengan flag -ObjC saat class gagal dimuat saat runtime (salah satu gejalanya adalah ketika JavaLangClassNotFoundException ditampilkan).

Framework pengujian JUnit dan Mockito sangat bergantung pada refleksi, jadi aplikasi pengujian yang menggunakannya harus tautkan dengan -ObjC.

Alternatif untuk menautkan di seluruh library statis sehingga beberapa class dapat dimuat secara dinamis adalah untuk mereferensikan class tersebut secara statis. Di Java, ini dapat dilakukan dalam penginisialisasi statis block; berikut adalah contoh dari 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
  };