안드로이드에서 Remote Service를 사용하여 서비스를 제공 할 때, 자바 기본 타입 및 안드로이드에서 허락된 타입만 사용 할 수 있습니다. 하지만, 해당 서비스에 맞는 데이터 타입이 필요한 경우도 있습니다. 이 경우는 안드로이드 프레임워크 소스에서 수정해야 하는 일이라 일반 어플 개발자는 해당사항이 없는 경우 입니다.
제가 해볼 수 있는 것은 Parcelable 인터페이스를 상속 받아 데이터 타입 클래스를 생성해서 프로세스간에 통신이 될 수 있는 타입을 정의해 보는 것이였습니다. 하지만, 빌드를 해보면 이것만으로는 aidl에서 해당 타입을 사용 할 수 없다는 메세지를 봐야만 했죠.
방법은 의외로 간단했습니다. 안드로이드 소스를 찾아보면 이와 비슷한 용도로 사용되는 클래스들이 있습니다. 그 클래스들이 어떻게 어떻게 선언했는지 찾아보면, Parcelable을 상속받은 데이터 클래스도 aidl를 생성해야만 했습니다. 그리고 Android.mk에 aidl 파일의 빌드에 추가를 해서 먼저 컴파일 되도록 해야 합니다.
현상 및 해결 방법은 아래 간단히 정리를 해봅니다.
컴파일 오류 메세지
frameworks/base/core/java/com/dhna/service/IMyService:4: couldn't find import for class com.dhna.data.ParcelableData
...
make: *** 끝나지 않은 작업을 기다리고 있습니다....
빌드 오류 해결 방법
1. Parcelable 인터페이스를 상속 받은 클래스를 생성한다.
2. 이 클래스에 대한 aidl 파일을 생성한다. (참고 2.1)
3. Android.mk 파일에 이 aidl 파일을 추가해서 컴파일 되도록 한다.
4. 빌드 성공!
2. 1 Parcelable 인터페이스를 상속 받은 데이터 클래스의 aidl 파일 작성하기
추가하려는 임의의 데이터 클래스가 ParcelableData 인 경우,
package com.dhna.data; parcelable ParcelableData;
ps. 이와 유사한 문제로 찾아보니 sdk/<api version>/framework.aidl 파일에 parcelable을 상속 받은 클래스를 추가 하는 방법이 있다고 합니다. 하지만 저는 여전히 오류가 발생했지요.. 여기에 추가한 것은 SDK 배포시 관련이 있지 않나 생각이 들지만, 아직 확인 할 방법은 없군요.
'안드로이드' 카테고리의 다른 글
[안드로이드] Context를 Activity로 강제 타입 캐스팅시 발생하는 문제(Shutting down VM) (0) | 2012.10.02 |
---|---|
[안드로이드] ListView의 fadingEdge 없애는 방법 (0) | 2012.09.26 |
[안드로이드] /system 디렉토리 remount 하기 (0) | 2012.09.19 |
[안드로이드] 텍스트 파일의 캐릭터 셋(Character Set) 얻기 (0) | 2012.09.04 |
[안드로이드] 이클립스 업데이트 오류 (Install download0) (0) | 2012.07.27 |
[안드로이드] Framework에 Service 추가하기 (0) | 2012.06.21 |
[안드로이드] InputStream ↔ String 변환하기 (0) | 2012.05.30 |
[안드로이드] onDestroy() 언제 호출되나? (0) | 2012.03.07 |
[안드로이드] 안드로이드 빌드 시스템 (0) | 2012.03.05 |
[안드로이드] Android.mk 사용하는 이미 정의된 문법 (0) | 2012.03.05 |