개발/Android Studio

[Android] Aidl 로 class 옮기기

yeonlee 2023. 4. 4. 16:39

Aidl 로 class 옮기기

 

크게 

보내는 함수 .aidl 생성

보내는 함수 .java 를 parcelable 로 implement

전송하는 .aidl 에 임포트 및 in 추가

 

정도로 정리할 수 있다. 

 

 

CGMessage.aidl (보내고자 하는 클래스)

우선 해당하는 Class 를 aidl 로 만들어야 한다

// CGMessage.aidl
package com.ahope.test_ga;

// Declare any non-default types here with import statements
import com.ahope.test_ga.CGMessage;

parcelable CGMessage;

단, 이때는 인터페이스를 의미하는 I 를 앞에 붙이면 안된다. 

 

 

 

CGMessage.java

보내고자 하는 class 를 Parcelable 를 implement 해주어야 한다.

글면서 추가해줘야 하는 함수는

public static final Creator<CGMessage> CREATOR = new Creator<CGMessage>() {
public int describeContents() {
    return 0;
}
public void writeToParcel(Parcel parcel, int i) {

이렇게 3개가 있는데

writeToParcel은 보내는쪽에서 클래스의 멤버를 직렬화해주도록 변환해주는 기능을 하고

describeContents 는 받는쪽에서 클래스를 역직렬화하도록 변환하는 기능을 한다. 

 

Creator 는 parcelable 객체를 생성해주는 Serializable 에서 개선된 함수이다

CreateFromParcel 은 새 인스턴스를 만드는 역할을 하고 newArray 는 지정된 크기로 클래스의 새로운 array 를 만드는 역할을 한다.

 

 

 

 

 

ICGService.aidl (그 클래스를 보내는 구성요소)

원하는 Class 가 포함된 Aidl 메소드를 in을 포함해서 추가한다

그리고 import 로 추가된 Class 의 패키지를 추가시켜줘야 한다.

// ICGService.aidl
package com.ahope.test_ga;

// Declare any non-default types here with import statements
import com.ahope.test_ga.CGMessage;

interface ICGService {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
    int getStatus();
     void setSocket(String ip);
     void connect();
     void disconnect();
     int sendJsonStr(String jsonStr);
     int sendCGMsg(in CGMessage cgmsg);
     void receive();
}

보내고자하는 class 는 CGMessage 이고 이를 sendCGMsg 메소드로 보낸다