Paramètres du lien obligatoires

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èqueIndicateur de lienDescription
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èqueIndicateur de lienDescription
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èqueIndicateur de lienDescription
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èqueIndicateur de lienDescription
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".

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
  };