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
.
Koleksi | Tanda Link | Deskripsi |
---|---|---|
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.
Koleksi | Tanda Link | Deskripsi |
---|---|---|
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
.
Koleksi | Tanda Link | Deskripsi |
---|---|---|
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:
Koleksi | Tanda Link | Deskripsi |
---|---|---|
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 Link -ObjC
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
};