자마린.안드로이드 강좌(Xamarin.Android), Xamarin.Android EmbeddedJar Binding(안드로이드 JAR 라이브러리 바인딩)
Xamarin.Android EmbeddedJar Binding(안드로이드 JAR 라이브러리 바인딩)
n Java 라이브러리는 대개 .JAR (Java Archive) 형식으로 패키지화 되지만 Java Bindings 라이브러리에서 .JAR 패키지를 패키지화하여 Xamarin.Android 응용 프로그램에서 해당 기능을 사용할 수 있다.
n Java Bindings 라이브러리의 목적은 .JAR 파일의 API를 자동 생성 코드 래퍼를 통해 C # 코드에서 사용할 수 있도록 하는 것이다.
n Xamarin Tooling(자마린 툴링)은 하나 이상의 입력 .JAR 파일에서 Bindings Library를 생성 할 수 있으며 바인딩 라이브러리 (.DLL 어셈블리)에는 아래 내용이 포함되어 있다.
l 원본 JAR 파일의 내용
l .JAR 파일 내에 Java Type을 래핑하는 C# Type인 Managed Callable Wrappers(MCW), 생성 된 MCW 코드는 JNI (Java Native Interface)를 사용하여 API 호출을 기본 .JAR 파일로 전달한다.
n 기본적으로 안드로이드와 함께 사용하도록 지정된 모든 .JAR 파일에 대한 바인딩 라이브러리를 작성할 수 있지만 Xamarin Tooling(자마린 툴링)은 현재 Android가 아닌 Java 라이브러리 바인딩을 지원하지 않는다.
n DLL이 런타임시 .JAR에 종속되도록 .JAR 파일의 내용을 포함하지 않고 바인딩 라이브러리를 빌드하도록 선택할 수도 있다.
n 1. 안드로이드 스튜디오에서 새로운 프로젝트를 생성하고 location, application name, company domain을 기술하고 다음 페이지 Target Android Device에서“Phone and Tablet” 선택
(안드로이드 최신버전 3.1.4 이상에서는 지원하지 않으므로 SKIP, 실습하려면 하위버전에서 하세요)
n Add an Activity to Mobile 화면에서 “Add No Activity”를 선택 후 “Finish” 클릭
n 자마린으로 바인딩 될 SayHello 인터페이스 및 SayHelloImpl 구현클래스를 작성하자.
n Build.gradle(Module : sayhello)
n 안드로이드 스튜디오 우측의 Gradle을 클릭 후 :sayhello -> Tasks -> other -> exportJar 태스크를 더블 클릭하여 실행(exportJar Task가 보이지 않으면 Gradle Project 상단 좌측의 refresh 버튼을 클릭하자.)
n 이제 sayhello\libs 폴더에 sayhello.jar 파일이 생성되었다.
n 2. Visual Studio에서 Android à Binding Library(Android) 프로젝트 생성
n Bindings Library (BL)는 Managed Callable Wrappers for Java 유형을 포함하는 어셈블리이므로 C# 호출을 통해 Java 코드를 호출 할 수 있다.
n 이전 프로젝트에서 생성한 sayhello.jar 파일을 Jars 디렉터리에 추가한다. Jars -> 추가 -> 기존항목
n Java Bindings 라이브러리 프로젝트를 작성할 때 .JAR 파일이 바인딩 라이브러리에 임베드되는지 또는 별도로 패키지되는지 여부를 “빌드작업(Build Action)” 속성에서 지정해야 한다.
ü EmbeddedJar - .JAR 파일이 라이브러리에 임베드 된다.
ü InputJar - .JAR 파일은 Bindings 라이브러리와 별도로 유지된다.
n EmbeddedJar 형식은 JAR의 Java 바이트 코드가 Dex 바이트 코드로 변환되고 APK에 (Managed Callable Wrappers와 함께) 포함된다.
n .JAR 파일을 바인딩 라이브러리와 별도로 유지하려면 InputJar 옵션을 사용할 수 있지만 응용프로그램을 실행하는 장치에서 .JAR 파일을 사용할 수 있어야 한다.
n 일반적으로 .JAR이 자동으로 바인딩 라이브러리에 포함되어 패키징 되도록 EmbeddedJar 빌드 작업을 사용한다.
n 솔루션 빌드, 주의 : BL은 Android 라이브러리와 동일한 또는 그 이상의 Android API 레벨을 타겟팅 해야한다
n 3. 이제 C # 코드에서 Java 라이브러리를 사용할 수 있는데 Xamarin.Android 프로젝트를 생성하자. Android -> 비어있는 앱(blank app) 선택 후프로젝트 이름을 “UseSayHello”라고 하자.
n activity_main을 더블클릭 하여 아래와 같이 화면을 만들자. (button, Text(Large) 두개의 컨트롤을 사용하며 컨트롤의 이름은 default로 두자.)
n BL(바인딩 라이브러리) 프로젝트를 참조추가 하자. 참조 -> 참조추가, 찾아보기에서 C:\xamarin project\SayHello\SayHello\bin\Debug의 SayHello.dll을 참조추가 하면 된다.
n 아래 MainActivity의 코드에서 자바쪽에서 만든 SayHello를 사용했다.
n 실행결과