필수 링크 설정

링크 빌드 단계 (Xcode의 '바이너리를 라이브러리와 연결' 빌드 단계)에는 J2ObjC 전용 플래그가 필요합니다. 이는 애플리케이션이 변환된 Java 클래스를 사용하는 방법에 따라 달라집니다. 핵심 플래그는 j2objcc 명령줄 스크립트를 지원하지만 빌드 시 지정해야 합니다. 사용할 수 있습니다

SDK 라이브러리

이 라이브러리는 J2ObjC의 JRE 구현에 필수입니다. 포함하지 않음 _iconv로 시작하는 이름에 정의되지 않은 기호 오류가 발생합니다.

라이브러리링크 플래그설명
iconv -l 아이콘 문자 인코딩 및 디코딩을 위해 jre_core에서 사용합니다.

이 라이브러리는 J2ObjC의 JRE 구현에서 사용되며 앱에 연결해야 할 수도 있습니다.

라이브러리링크 플래그설명
우편번호 -l z java.util.zip에서 사용됩니다. 연결하는 경우 이 정보를 포함해야 합니다. jre_zip로 변경합니다.
보안 -framework 보안 jre_security를 연결하는 경우 필수 항목입니다.

도서관 검색 경로

J2ObjC의 배포판에는 여러 정적 라이브러리가 포함되어 있습니다. 프로젝트에서 찾을 수 있는 링커 위치를 지정합니다.

일반적으로 라이브러리 검색 경로에는 _$(j2objcdistribution)/lib가 포함되어야 합니다. 여기서 _$(j2objcdistribution) 변수는 J2ObjC의 로컬 사본 경로입니다. 예를 들어 J2ObjC 릴리스 보관 파일의 압축을 풀었습니다. '/usr/local/'인 경우 이 경로는 '/usr/local/j2objc'입니다.

중요: 프로젝트에서 실제로 _$(j2objcdistribution)을 사용하지 마세요. 항상 J2ObjC를 설치한 실제 경로입니다.

소스 코드의 사본에서 J2ObjC를 빌드하는 경우 사본의 사본은 _$(j2objcdistribution)입니다. 'j2objc/dist/' 를 참조하세요. 이 디렉터리는 make dist로 J2ObjC를 빌드할 때까지 존재하지 않습니다.

Xcode: 라이브러리 검색 경로

_$(j2objcdistribution)/lib를 추가하여 앱 타겟의 라이브러리 검색 경로 업데이트 실제 경로).

JRE 라이브러리

이러한 라이브러리는 J2ObjC의 JRE 에뮬레이션으로 정의된 클래스를 구현합니다.

참고: libjre_core.a 라이브러리에는 대부분의 다른 하위 집합의 클래스가 포함되어 있습니다. 제공합니다 앱 크기를 줄이려면 앱 연결을 시작하는 것이 좋습니다. -l jre_core를 사용하여 누락된 기호를 해결하는 하위 집합 라이브러리를 추가합니다. 예를 들어 가장 흔히 사용되는 java.io 클래스는 libjre_core.a에 있습니다. 따라서 해결되지 않은 기호 오류가 있는 경우에만 libjre_io.a 라이브러리를 포함하세요. (이름이 JavaIo로 시작하는)

라이브러리링크 플래그설명
libjre_core.a -l jre_core <ph type="x-smartling-placeholder"></ph> 최소한의 클래스 집합 J2ObjC의 JRE 에뮬레이션에 필요하며 소스 파일을 생성합니다. 번역된 Java 소스가 JRE 지원을 참조하는 경우 네트워킹, XML, SQL 등과 같은 항목에 대한 정보와 추가 라이브러리 (아래 참조) 도 연결해야 합니다.
libjre_beans.a -l jre_beans <ph type="x-smartling-placeholder"></ph> 모든 수업 (java.beans 패키지에서 가져옴) 모든 Java Beans 클래스가 이 중 다수가 Swing 및 AWT 앱에서만 사용되기 때문입니다.
libjre_channels.a -l jre_channels <ph type="x-smartling-placeholder"></ph> 여러 수업 출처: java.nio.channelsjava.nio.channels.spi 패키지입니다
libjre_concurrent.a -l jre_동시 <ph type="x-smartling-placeholder"></ph> 여러 수업 출발: java.util.concurrent, java.util.concurrent.atomicjava.util.concurrent.locks 패키지
libjre_icu.a -l jre_icu <ph type="x-smartling-placeholder"></ph> 여러 수업 android.icu에서 시간대 지원 (주로 사용 설정 목적) java.time).
libjre_io.a -l jre_io <ph type="x-smartling-placeholder"></ph> 자주 사용되지 않는 여러 클래스 (java.io 패키지에서 가져옴)
libjre_net.a -l jre_net <ph type="x-smartling-placeholder"></ph> 여러 수업 (java.net 패키지에서) 하지만 java.net.URLClassLoader 클래스는 jre_security에 있고 javax.net 및 수업 javax.net.ssl개가 jre_ssl에 있습니다.
libjre_security.a -l jre_security <ph type="x-smartling-placeholder"></ph> 대부분의 클래스 java.security 패키지에 포함 (일부는 jre_core에 있음) java.security.*의 클래스도 지원합니다. javax.crypto.*, javax.security.* 패키지 연결하는 경우 iOS 보안 프레임워크도 연결해야 합니다. (SDK 라이브러리 참고)
libjre_sql.a -l jre_sql <ph type="x-smartling-placeholder"></ph> 모든 수업 (java.sql 패키지에서)
libjre_ssl.a -l jre_ssl <ph type="x-smartling-placeholder"></ph> 모든 수업 javax.netjavax.net.ssl 패키지에 포함됩니다.
libjre_time.a -l jre_time <ph type="x-smartling-placeholder"></ph> 모든 수업 (java.time 패키지에서)
libjre_util.a -l jre_util <ph type="x-smartling-placeholder"></ph> 여러 수업 java.util 패키지의 java.util.logging 패키지. 최대 java.util개 클래스 jre_core에 있으므로 이 라이브러리가 있는 경우에만 해결되지 않은 JavaUtil* 기호 오류 (JavaUtilConcurrent* 기호가 jre_concurrent 라이브러리)
libjre_xml.a -l jre_xml <ph type="x-smartling-placeholder"></ph> 모든 수업 XML 관련 패키지(예: javax.xml.*, org.w3c.dom.*, org.xml.sax.*
libjre_zip.a -l Jre_zip <ph type="x-smartling-placeholder"></ph> 모든 수업 java.util.zipjava.util.jar 패키지에서 앱을 다운로드합니다. 이 파일을 연결하는 경우 SDK ZIP 라이브러리도 연결해야 합니다. ( SDK 라이브러리)

libjre_emul.a (-l jre_emul)

jre_emul 라이브러리에는 J2ObjC의 JRE 에뮬레이션에 포함된 모든 클래스가 포함되어 있습니다. 앱이 jre_emul와 연결된 경우 다른 jre_* 라이브러리가 포함되어서는 안 됩니다. 그렇지 않으면 링커가 중복 기호 오류를 신고하세요. jre_emul가 클래스에 정의된 모든 클래스를 포함하기 때문입니다. 액세스할 수 있습니다

기타 J2ObjC 라이브러리

이러한 Java 라이브러리 및 Android 유틸리티 클래스는 J2ObjC 정적 라이브러리로 배포할 수 있습니다.

라이브러리링크 플래그설명
libguava.a -l 구아바 Guava: Java용 Google 핵심 라이브러리
libjavax_inject.a -l javax_inject JSR-330 종속 항목 삽입 주석 라이브러리를 사용합니다.
libjson.a -l JSON JSON 데이터 교환 라이브러리 이것은 <ph type="x-smartling-placeholder"></ph> Android 버전의 JSON으로, 다른 구현과 약간 다릅니다.
libjsr305.a -l jsr305 소프트웨어용 JSR-305 주석 결함 감지 라이브러리를 제공합니다.
libjunit.a -l junit -ObjC JUnit 테스트 프레임워크
libmockito.a -l 모시토 -ObjC 자바의 단위 테스트를 위한 Mockito 모의 프레임워크
libprotobuf_runtime.a -l protobuf_runtime Google 프로토콜 버퍼 J2ObjC 앱에 최적화된 런타임입니다. J2ObjC protobuf를 사용하는 앱은 proto를 컴파일해야 함 j2objc_protoc를 포함하는 파일을 찾을 수 있습니다.
libandroid_util.a -l android_util `android_util` 라이브러리에는 Android API 유틸리티 클래스의 작은 하위 집합이 포함됩니다. Android 환경의 에뮬레이션을 제공하기 위한 것이 아니라 `android.util.Log`와 같은 유용한 클래스를 사용합니다.

-ObjC 플래그는 iOS 앱을 연결할 때 자주 사용되지만 Objective C 클래스와 카테고리는 정적 라이브러리에서 동적으로 로드되어야 합니다. 이 플래그를 사용하면 앱에 포함될 모든 연결된 정적 라이브러리의 클래스 있습니다. 따라서 J2ObjC를 사용하는 앱은 다음과 같은 경우에 -ObjC 플래그로만 연결되는 것이 좋습니다. 런타임 시 클래스가 로드되지 않습니다 (한 가지 증상은 JavaLangClassNotFoundException이 발생하는 경우임).

JUnit 및 Mockito 테스트 프레임워크는 리플렉션에 크게 의존하므로 이를 사용하는 테스트 앱은 -ObjC와 링크됩니다.

전체 정적 라이브러리에 연결하여 일부 클래스를 동적으로 로드할 수 있도록 하는 대안 대신 이러한 클래스를 정적으로 참조합니다. Java에서는 정적 이니셜라이저에서 이 작업을 실행할 수 있습니다. block; J2ObjC의 IosSecurityProvider 클래스를 기반으로 하는 Android 보안 API를 제공합니다.

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