관리 메뉴

드럼치는 프로그래머

[안드로이드] AIDL에 Parcelable 데이터 사용하기 본문

★─Programing/☆─Android

[안드로이드] AIDL에 Parcelable 데이터 사용하기

드럼치는한동이 2013. 3. 26. 09:37

안드로이드에서 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 배포시 관련이 있지 않나 생각이 들지만, 아직 확인 할 방법은 없군요.

 

 

[출처] http://dhna.tistory.com/348

Comments