안드로이드

안드로이드 키 매핑

부르스리 2015. 3. 10. 15:46
반응형


키를 새롭게 매핑하고 싶을 때가 있다.

또는 새로운 단말기 개발에 새로운 키가 달려있는 경우가 있다.

안드로이드는 보통 터치 기반이라서 키를 매핑할 일이 거의 없지만...


좌우지간 새로운 키를 매핑하려면

.kl 파일과 .kcm 파일을 알아야 한다.(Key Layout, Key Character Map)


frameworks/base/data/keyboards 밑에 보면 많이 들어있다.

그 중 Generic.kl 을 보면

기본적인 키들이 매핑이 되어있고

많은 키들이 #으로 주석처리되어있다.

이중 영 안쓸것 같은 키를 찾아 새로운 키로 매핑해주면 된다.

하드웨어키를 매핑하려면 커널단과 함께 작업이 필요한데

커널은 내가 잘 모른다. 생략. ㅎㅎ

좌우지간 그렇게 새로운 키를 매핑하면 앱단으로 키가 들어오게 된다.

그러니까..

하드웨어키를 리눅스 커널이 받아서 안드로이드로 올려준다는 거다.

key 1     ESCAPE

key 2     1

요렇게 되어있다.

커널에서 새로운 키를 340번 키로 올려준다고 하면

key 340 XXX

라고 정의하면 되겠다.



그런데 새롭게 매핑한 키를 누르면 자꾸 키가 두개가 들어오는 현상이 벌어질때가 있다.

그럴때는 .kcm 파일을 열어보자.

매핑한 키를 찾아 가보면

key A {

    label:                              'A'

    base:                               'a'

    shift, capslock:                    'A'

}

이런식으로 정의가 되어있을 것이다.

딱! 보면 감이 온다.

기본적으로 a 인데 shift랑 누르거나 capslock이 켜져있으면 A 가 된다는 뜻이렸다.

그런데 개중에

key NUMPAD_0 {

    label:                              '0'

    base:                               fallback INSERT

    numlock:                            '0'

}

이런것도 있다.

fallback 이놈이 문제다.

fallback 이란 어떤 조건에도 일치하지 않아 적합한 처리 요소 또는 처리기가 선택되지 못한 경우, 

기본 처리기를 선택하는 작업인데

쉽게 말해서 꿩 대신 닭이라는 뜻이다. 문제는 꿩도 오고 닭도 온다는 것..

그러니까 numlock 이 들어와있으면 0 인데 기본적으로는 INSERT 라는 것이다.

이런식으로 fallback 이 있으면 키가 두개가 들어오는 현상이 벌어질 수 있는 것이다.

key BUTTON_A {

    base:                               fallback DPAD_CENTER

}

이렇게 되어있는 BUTTON_A 를 사용하면

BUTTON_A 도 들어오고 DPAD_CENTER 도 들어오게 된다.

이럴때는 

key BUTTON_A {

    base:                               none

}

으로 바꿔주자.


참고로 단말에 넣을때는

빌드해서 넣던가

아님 /system/usr/keylayout 에 .kl 파일을

/system/usr/keychars 에 .kcm 파일을 push 하면 된다.






반응형