L'étape de compilation du lien (phase de compilation "Lier le binaire avec les bibliothèques" de Xcode) nécessite des indicateurs spécifiques à J2ObjC, qui varient en fonction de la manière dont votre application utilise les classes Java traduites. Les indicateurs principaux sont définis par le script de ligne de commande j2objcc, mais ils doivent être spécifiés lors de la compilation avec Xcode.
Bibliothèques SDK
Cette bibliothèque est requise pour l'implémentation de JRE de J2ObjC. Si vous n'incluez pas cet élément
entraîne des erreurs de symboles non définis dont le nom commence par _iconv
.
Bibliothèque | Indicateur de lien | Description |
---|---|---|
iconv | -l iconv | Utilisé par jre_core pour l'encodage et le décodage des caractères. |
Ces bibliothèques sont utilisées par l'implémentation JRE de J2ObjC et peuvent avoir besoin d'être associées à votre application.
Bibliothèque | Indicateur de lien | Description |
---|---|---|
zip | -l z | Utilisé par java.util.zip. Vous devez l'inclure si vous associez jre_zip. |
Sécurité | -Sécurité du framework | Obligatoire si vous associez jre_security. |
Chemin de recherche des bibliothèques
La distribution de J2ObjC comprend plusieurs bibliothèques statiques : pour les utiliser, votre projet doit indiquer l'éditeur de liens où les trouver.
En règle générale, le chemin d'accès à la bibliothèque doit inclure _$(j2objcdistribution)/lib, où La variable _$(j2objcdistribution) correspond au chemin d'accès à la copie locale de J2ObjC. Par exemple, si vous décompressé un fichier d'archive des versions J2ObjC dans "/usr/local/", ce chemin d'accès est "/usr/local/j2objc".
Important: N'utilisez pas _$(j2objcdistribution) dans votre projet. toujours spécifier chemin d'accès réel où vous avez installé J2ObjC.
Si vous compilez J2ObjC à partir d'une copie de son code source, la distribution _$(j2objc) est votre copie
"j2objc/dist/" . Ce répertoire n'existera pas tant que vous n'aurez pas créé J2ObjC avec make dist
.
Xcode: chemins de recherche des bibliothèques
Mettez à jour les chemins de recherche de la bibliothèque cible de l'application en ajoutant _$(j2objcdistribution)/lib (encore une fois, utilisez le chemin réel).
Bibliothèques JRE
Ces bibliothèques implémentent des classes définies par l'émulation JRE de J2ObjC.
Remarque:La bibliothèque libjre_core.a
contient des classes de la plupart des autres sous-ensembles.
bibliothèques. La méthode recommandée pour réduire la taille de l'application est de commencer à l'associer.
avec -l jre_core
, puis ajoutez les bibliothèques de sous-ensemble qui résolvent les symboles manquants.
Par exemple, les classes java.io
les plus couramment utilisées se trouvent dans libjre_core.a
,
Par conséquent, n'incluez la bibliothèque libjre_io.a
qu'en cas d'erreurs de symboles non résolues.
dont le nom commence par JavaIo
.
Bibliothèque | Indicateur de lien | Description |
---|---|---|
libjre_core.a | -l jre_core | <ph type="x-smartling-placeholder"></ph> Ensemble minimal de classes requise pour l'émulation JRE de J2ObjC, référencée par toutes des fichiers sources générés. Si vos sources Java traduites font référence à la compatibilité avec JRE pour la mise en réseau, XML, SQL, etc., puis des bibliothèques supplémentaires (ci-dessous). devront également être associées. |
libjre_beans.a | -l jre_beans |
<ph type="x-smartling-placeholder"></ph>
Tous les cours
à partir du package java.beans . Les classes Java Beans ne sont pas toutes
car elles ne sont utilisées que par les applications Swing et AWT.
|
libjre_channels.a | -l jre_channels |
<ph type="x-smartling-placeholder"></ph>
Plusieurs cours
à partir de java.nio.channels et java.nio.channels.spi
packages.
|
libjre_concurrent.a | -l jre_concurrent |
<ph type="x-smartling-placeholder"></ph>
Plusieurs cours
depuis java.util.concurrent (java.util.concurrent.atomic )
et java.util.concurrent.locks .
|
libjre_icu.a | -l jre_icu |
<ph type="x-smartling-placeholder"></ph>
Plusieurs cours
de android.icu pour prendre en charge les fuseaux horaires (principalement pour activer
java.time ).
|
libjre_io.a | -l jre_io |
<ph type="x-smartling-placeholder"></ph>
Plusieurs classes (moins utilisées)
à partir du package java.io .
|
libjre_net.a | -l jre_net |
<ph type="x-smartling-placeholder"></ph>
Plusieurs cours
dans le package java.net . Toutefois, le java.net.URLClassLoader
se trouve dans jre_security , tandis que les javax.net et
Les classes javax.net.ssl se trouvent dans jre_ssl .
|
libjre_security.a | -l jre_security |
<ph type="x-smartling-placeholder"></ph>
La plupart des cours
dans le package java.security (quelques-uns se trouvent dans jre_core ) ;
ainsi que les classes dans java.security.* ,
javax.crypto.* et javax.security.* .
Si vous effectuez l'association, vous devrez également associer le framework de sécurité iOS.
(voir Bibliothèques SDK).
|
libjre_sql.a | -l jre_sql |
<ph type="x-smartling-placeholder"></ph>
Tous les cours
dans le package java.sql .
|
libjre_ssl.a | -l jre_ssl |
<ph type="x-smartling-placeholder"></ph>
Tous les cours
dans les packages javax.net et javax.net.ssl .
|
libjre_time.a | -l jre_time |
<ph type="x-smartling-placeholder"></ph>
Tous les cours
dans le package java.time .
|
libjre_util.a | -l jre_util |
<ph type="x-smartling-placeholder"></ph>
Plusieurs cours
du package java.util , ainsi que
java.util.logging . La plupart des classes java.util
se trouvent dans jre_core , n'incluez cette bibliothèque que s'il existe
sont des erreurs de symboles JavaUtil* non résolues
(Les symboles JavaUtilConcurrent* se trouvent dans
jre_concurrent ).
|
libjre_xml.a | -l jre_xml |
<ph type="x-smartling-placeholder"></ph>
Tous les cours
à partir des packages XML, y compris javax.xml.* ,
org.w3c.dom.* et org.xml.sax.* .
|
libjre_zip.a | -l jre_zip |
<ph type="x-smartling-placeholder"></ph>
Tous les cours
à partir des packages java.util.zip et java.util.jar .
Si vous effectuez l'association, vous devez également associer la bibliothèque ZIP du SDK. (voir
bibliothèques SDK)
|
libjre_emul.a (-l jre_emul)
La bibliothèque jre_emul
contient toutes les classes incluses dans l'émulation JRE de J2ObjC. Si une application est
associé à jre_emul
, aucune des autres bibliothèques jre_* ne doit être incluse, sinon l'éditeur de liens
signaler des erreurs de symboles en double. En effet, jre_emul
inclut toutes les classes définies dans ces
ou d'autres bibliothèques.
Autres bibliothèques J2ObjC
Ces bibliothèques Java et ces classes utils Android sont incluses dans le fichier en tant que bibliothèques statiques:
Bibliothèque | Indicateur de lien | Description |
---|---|---|
libguava.a | -l goyave | Guava: Bibliothèques Google Core pour Java |
libjavax_inject.a | -l javax_inject | Injection de dépendances JSR-330 bibliothèque d'annotations. |
libjson.a | -l JSON | Bibliothèque d'échange de données JSON. Il s'agit de la <ph type="x-smartling-placeholder"></ph> Version Android de JSON, qui diffère légèrement des autres implémentations. |
libjsr305.a | -l jsr305 | Les annotations JSR-305 pour les logiciels de détection des défauts. |
libjunit.a | -l junit -ObjC | Framework de test JUnit. |
libmockito.a | -l mockito -ObjC | Le framework de simulation Mockito pour les tests unitaires en Java |
libprotobuf_runtime.a | -l protobuf_runtime | Un tampon de protocole Google optimisé pour les applications J2ObjC. Les applications utilisant des tampons de protocole J2ObjC doivent compiler leur fichier avec j2objc_protoc. |
libandroid_util.a | -l android_util | La bibliothèque "android_util" contient un petit sous-ensemble des classes d'utilitaires de l'API Android. Il n'est pas destiné à fournir une émulation pour un environnement Android, mais simplement à partager des classes utiles comme "android.util.Log". |
Indicateur de lien -ObjC
L'indicateur -ObjC est fréquemment utilisé pour associer des applications iOS, mais il n'est obligatoire que si l'objectif
Les classes et catégories C doivent être chargées dynamiquement à partir de bibliothèques statiques. Cet indicateur entraîne toutes
de toutes les bibliothèques statiques associées à inclure dans l'application, qu'elles soient
utilisé. Il est donc recommandé que les applications qui utilisent J2ObjC ne soient associées qu'à l'indicateur -ObjC :
les classes ne se chargent pas au moment de l'exécution (l'un des symptômes est la génération de JavaLangClassNotFoundException
).
Les frameworks de test JUnit et Mockito s'appuient fortement sur la réflexion. Les applications de test qui les utilisent doivent donc contenant -ObjC.
Une alternative à l'association dans toute une bibliothèque statique afin que quelques classes puissent être chargées dynamiquement est pour référencer ces classes de manière statique. En Java, vous pouvez le faire dans un initialiseur statique. block; Voici un exemple issu de 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
};