링크 빌드 단계 (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.channels 및 java.nio.channels.spi
패키지입니다
|
libjre_concurrent.a | -l jre_동시 |
<ph type="x-smartling-placeholder"></ph>
여러 수업
출발: java.util.concurrent , java.util.concurrent.atomic
및 java.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.net 및 javax.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.zip 및 java.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 링크 플래그
-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
};