처음으로 Android Framework 소스를 수정해보았다.

    이번 학기에 학교에서 '임베디드 시스템 소프트웨어'란 과목을 수강하였다. 학기의 마지막에 간단한 자유 프로젝트 과제가 주어졌다. 근데 기간이 빠듯해서 프로젝트를 진행할 수 있는 시간이 사실상 2일밖에 없었다. 그냥 평범하게 학교수업에서 배운 내용을 바탕으로 할까 하다가 이미 아는 내용을 반복하는 것은 의미가 없다는 생각이 들었다. 그래서 무작정 Android Framework 소스를 수정해서 뭔가 해보는 걸로 프로젝트의 방향을 잡았다.

Android 기기의 Display 화면을 6x6으로 쪼개서 뒤섞은 모습

ㄷㄷㄷ
    
    위는 이번 미니 프로젝트에서 구현한 2가지 기능중에 한 가지인 Display Puzzle 기능이다. Android 기기의 Display 화면을 NxM 의 형태로 쪼개서 퍼즐처럼 뒤섞어 버린다. 이 것을 구현하기 위해 Hardware Abstraction Layer에서 gralloc 관련 부분을 수정했다. 프레임버퍼로 나가기 직전에 화면을 가로채서 뒤섞어버린다.

정상적인 화면

캡처를 했을 때, 화면이 오른쪽으로 90도 돌아가고 왼쪽부분에 투명한 회색 선이 생긴 상태로 캡처가 되게 된다.
   
    위는 2번째 기능을 보여준다. 사용자가 캡처를 하게되면, 화면이 오른쪽으로 90도 돌아가고 왼쪽부분에 투명한 회색 선이 생긴 상태로 캡처가 되게 된다. 물론 원래 화면을 그대로 두고 캡처만 저렇게 되게 된다.

출처 : http://cdn.edureka.co/blog/wp-content/uploads/2013/01/Android-Stack1.jpg
   
    아무튼, 별 의미는 없지만 안드로이드 프레임워크를 수정해야 할 수 있는 기능 2가지를 구현해보았다. 쉽게 할 수 있을 줄 알았는데 생각보다 이상현상들이 많이 발생해서 힘들었다. 개발 기간이 2일 밖에 안되서 어쩔 수 없이 야매로 해결하긴 했다. 안드로이드 프레임워크를 한번 분석해보고 싶었는데, 이번 기회에 맛보기정도는 할 수 있던 것 같다. 하면서 힘들었던 점은 코드를 수정하고 나서 결과를 보려면 빌드 시간+안드로이드기기에 올리는 시간 해서 약 20분 가까히 소요됐다는 점이다. 그래서 시간을 많이 허비했던 것같다. 어쨌든, 좋은 경험이었다. 참고로 위의 android architecture 상에서 내가 분석/수정 했던 부분은 Libraries의 Surface Manager와 HAL의 Graphics 부분이다. (Kitkat API19를 바탕으로 했다.) 시간이 2일 밖에 없어서 제대로 분석도 못하고 그냥 마구잡이로 한 것 같은데, 나중에 기회가 되면 제대로 한번 분석해보고 싶다. 아래 링크는 이 mini project를 upload 해둔 github link이다.

댓글