안드로이드 AIDL 문법(Android AIDL Syntax)

자주 받는 질문중의 하나는 “AIDL의 정확한 문법이 어떻게 되는가?” 입니다. 안드로이드의 문서에는 예제 형태로만 설명되어 있을 뿐 형식화된 문법이 제시되지 않고 있습니다. 대충 알고 대충 써라? 천만의 말씀.

 안드로이드(Android) 1.6 AIDL의 BNF Grammar 입니다. Yacc 문법을 따릅니다.

document:
        document_items
    |   headers document_items
    ;

headers:
        package
    |   imports
    |   package imports
    ;

package:
        PACKAGE
    ;

imports:
        IMPORT
    |   IMPORT imports
    ;

document_items:

    |   document_items declaration
    ;

declaration:
        parcelable_decl
    |   interface_decl
    ;

parcelable_decl:
        PARCELABLE IDENTIFIER ';'
    ;

interface_header:
        INTERFACE
    |   ONEWAY INTERFACE
    ;

interface_decl:
        interface_header IDENTIFIER '{' interface_items '}'
    ;

interface_items:

    |   interface_items method_decl
    ;

method_decl:
        type IDENTIFIER '(' arg_list ')' ';'
    |   ONEWAY type IDENTIFIER '(' arg_list ')' ';'
    ;

arg_list:

    |   arg
    |   arg_list ',' arg
    ;

arg:
        direction type IDENTIFIER
    ;

type:
        IDENTIFIER
    |   IDENTIFIER ARRAY
    |   GENERIC
    ;

direction:

    |   IN
    |   OUT
    |   INOUT
    ;

PARCELABLE, INTERFACE, IN, OUT, INOUT, ONEWAY 는 각각 키워드(Keyword) parcelable, interface, in, out, inout, oneway를 뜻하고, IMPORT, PACKAGE 는 각각 import, package 문장 전체를 뜻합니다. ARRAY 는 하나 이상의 []를 뜻하고, GENERIC 은 Collection<Object,String>과 같은 Java Generic 표현을 뜻합니다. IDENTIFIER 는 대략 Java 의 클래스 명으로 쓸 수 있는 문자열이라고 보시면 됩니다. 주석 관련 구문 요소들은 생략했습니다.
SDK 의 AIDL 설명에는 나오지 않지만, oneway 키워드를 인터페이스 또는 메쏘드 앞에 붙일 수 있음을 알 수 있습니다. One-way call 에 대한 설명은 android.os.IBinder.FLAG_ONEWAY 에 대한 SDK 문서에 등장합니다. 비록 AIDL 에서의 사용법을 설명하고 있지는 않지만, 메쏘드 실행이 끝나기를 기다리지 않고 호출 즉시 복귀하는 방법을 제공하고 있음을 알 수 있습니다. AIDL 에서 oneway 로 지정한 메쏘드들의 Proxy 는 모두 transact() 를 호출할 때 FLAG_ONEWAY 를 포함하게 됩니다. 인터페이스에 oneway 를 지정하면 모든 메쏘드에 oneway 를 지정한 효과가 발생합니다. 다중 배열은 지원되는 반면 인터페이스 계승은 지원되지 않음을 확인할 수 있습니다.

'old > Basic' 카테고리의 다른 글

Android Flow Diagram  (0) 2010.07.06
JNI  (0) 2010.07.06
Android Bitmap Object Resizing Tip  (0) 2010.07.06
Handler  (0) 2010.07.06
aidl  (0) 2010.07.06
Posted by jazzlife
,