(자마린)Xamarin.Android .AAR Binding(안드로이드 .AAR File을 자마린 바인딩 자바 라이브러리로 구현 후 Xamarin.Android 프로젝트에서 호출하기)
2.5.3 Xamarin.Android .AAR Binding(안드로이드 .AAR File을 자마린 바인딩 자바 라이브러리로 구현 후 Xamarin.Android 프로젝트에서 호출하기)
n 안드로이드 아카이브(.AAR) 파일은 안드로이드쪽의 라이브러리 형식의 파일이며 아래 내용을 포함하는 ZIP 아카이브 형식의 파일이다.
l 컴파일된 자바 코드
l 리소스 ID
l 자원
l 메타 데이터(Activity 선언, 사용권한등)
n 자마린쪽의 바인딩 프로젝트에는 하나의 .AAR 파일 만 포함될 수 있으므로 다른 .AAR에 대한 .AAR 종속성이있는 경우, 바인딩 프로젝트에 포함 된 다음 참조되어야 한다.
1. 안드로이드 스튜디오에서 .AAR 파일 생성
n “HelloAAR”이라는 이름으로 새프로젝트 생성
n 다음 화면에서 “Phone And Tablet” 선택
n “Add No Activity” 선택
n 인터페이스(SayHello.java), 구현클래스(SayHelloImpl.java) 작성
n AndroidManifest.xml에서 android:theme="@style/AppTheme"를 삭제, values >> styles.xml을 삭제한다. (AppTheme를 참조하므로 Xamarin.Android App에서 AppTheme를 찾을 수 없다는 오류가 발생한다.)
n build.gradle(Module:app)에서 플러그인을 com.android.library로 변경, defaultConfig의 applicationId를 삭제한다.
n 우상단 “Gradle” 버튼을 클릭하여 assembleRelease 태스크를 더블 클릭하여 실행하자.
n 프로젝트 >> app >> build >> outputs >> aar >> app-release.aar 파일이 생성됨을 확인.
2. 자마린쪽 바인딩 라이브러리 만들기
n Visual Studio에서 Android >> 바인딩 라이브러리(Android)를 선택하여 “SayHelloLib” 이라는 이름의 바인딩 라이브러리 프로젝트를 생성하자.
n 생성된 프로젝트에서 “Jars” 폴더에서 우측마우스 클릭 >> 추가 >> 기존항목 추가 선택 후 이전에 만든 .AAR 파일을 추가한다.
n 추가된 app-release.aar 파일을 선택 후 하단의 속성창의 빌드 작업(Build Action) 속성에서 “LibraryProjectZip”을 선택. (.AAR파일용)
n 만약 .AAR 파일이 안드로이드 API를 사용하는 경우 적합한 Android API 레벨을 선택해야 하며 본 예제에서는 Android API를 사용하지 않았으므로 마음대로 최신 API 레벨을 사용할 수 있다.
n 프로젝트를 빌드하면 DLL이 생성된다. (이 DLL을 Xamarin.Android 프로젝트에서 참조 추가해 SayHelloImple의 sayHello() 메소드를 호출한다.)
3. Xamarin.Android 응용프로젝트를 생성 후 DLL에 포함된 .AAR파일의 sayHello() 메소드를 호출하자.
n “UseSayHelloLib” 이라는 이름의 Xamarin Android, 비어있는 앱(Android) 응용 프로젝트를 생성하자.
n 참조 >> 참조추가에서 2번 단계에서 작성한 “SayHelloLib.dll” 파일을 참조추가 하자.
(SayHelloLib >> bin >> debug)
n Resources >> layout >> activity_main 파일을 열어 간단히 UI를 구성하자. Button, Text(Large) 두 컨트롤을 드래그 해서 올리고 이름은 기본값인 button1, textView1로 그대로 두자.
n MainActivity에서 Button의 클릭 이벤트를 작성하고 sayHello() 메소드를 호출해 보자.
n 2번 단계의 바인딩 라이브러리인 DLL이 만들어 질 때 원래 .AAR 파일에서 만든 자바 인터페이스 이름의 앞에는 “I”가 붙어 ISayHello로 변하고, 자바의 패키지명의 첫글자가, sayHello() 메소드명도 SayHello()로 첫글자가 대문자로 래핑된다.