졸업 프로젝트로 진행한 안드로이드 프레임워크를 분석 후기(?) 를 차근히 정리를 하려고 합니다.
먼저 저는 프로세스를 (성능 검증 -->빌드--> 포팅) 싸이클을 반복하여 프로젝트를 진행하였습니다.
성능 검증
의 경우 지금 WindowManager 관련 클래스를 보고 중첩되는 if - else
, 디자인 패턴 변경 가능성
등을 찾아서 코드를 따라가면서 //todo
코멘트를 달면서 진행을 하였습니다.
빌드
의 경우는 클라우드를 사용을 하였습니다. 안드로이드가 어느 정도 버전이 올라가면서 저의 로컬 컴퓨터로는 감당을 하지 못했습니다. 그래서 클라우드 인스턴스를 활용하여 빌드했습니다. (엄청 빠릅니다. putty, scp 많이 써본 것 같습니다.) 또한, 구글 레퍼런스 폰인 PIXEL 1 을 사용하였습니다.
그 이유는 AOSP 및 하드웨어 드라이버가 공개되어 있기 때문입니다. 다른 스마트 폰의 경우 제조자 드라이버를 구하기 힘들 수 있습니다.
포팅
플래싱, 포팅 혼용해서 사용을 하는데 개인적으로 플래싱이라는 말이 입에 붙는 것 같습니다.
빌드
과정을 거치면 이미지 파일이 생성이 되는데 이를 스마트 폰에 입히는 작업입니다. (스크립트 or 명령어) 만 있으면
쉽게 가능합니다.
⚠프로젝트 주의사항⚠
- 어노테이션을 주의하자. (어노테이션은 라이브러리하고 물려있는 경우가 많습니다.)
- 구글 레퍼런스 기기 (nexus 시리즈나, pixel 시리즈) 를 활용하는 것이 좋다.
시작하기
우선 연관되는 클래스를 전부 나열하기
우선 WindowMnager 는 interface
안에도 코드가 있기 때문에 포함을 한다.
todo 로 코멘트 남기면서 진행을 했습니다.
PIXEL 기기가 생각 보다 예뻐서 놀랐습니다.
빌드 환경 구성 --> wsl+docker, 클라우드 (알아볼 것), pure Linux 등을 정하는 것이 좋을 것 같다
application side
interface
ViewManager
interface
WindowManager
class
ViewRootImpl
class
Window
class
WindowContentFraneStats
class
WindowManageGlobal
class
WindowManagerImpl
server side
interface
IWindowManager
interface
IWindowSession
interface
IWindowSessionCallback
class
WindowConfiguration
class
WindowHashMap
class
WindowList
class
WindowManagerDebugConfig
class
WindowManagerGlobalLock
class
WindowManagerService
class
WidwoMangerServiceDumpProto
생각하는 3가지 개선할 수 있는 것 같은 것
-
WindowHashMap --> EnumList 변환
-
WindowList --> ArrayList 확장 본인 생각은 그냥 queue
-
Annomymous
class
-> lambda 메모릭 방지 Runnable 직접 구현한 형태도 많이 보인다.
other section
- application --> Object 처리
server --> WindowManagerGlobalLock (justclass
) android bp 참조 - Generic 이상한 부분 컴파일러는 대단하다.
- Math.min 사용안하고 직접 구현
- 많은 if else 부분
- 불필요한 if --> 바로 inline return
- 번외) 텔레스코핑 패턴 (Rect
class
, WindowManager.LayoutParams)
이러 시나리오로 개선을 하고 실험을 진행을 하고자 합니다.
참고문헌
🧶 모든 문서는 수정될 수 있습니다
'안드로이드' 카테고리의 다른 글
[WindowManager] 윈도우 매니저 개선하기 3 (실험 앱 만들기) Firebase Storage (0) | 2021.01.02 |
---|---|
[WindowManger] 윈도우 매니저 개선하기 2 (환경 구성하기) (0) | 2020.12.29 |
[안드로이드] 코드랩 시리즈(1) Using Android Notifications (알림1) (0) | 2020.12.04 |
[안드로이드] 앱을 빨리 이해하는 방법(1) - 연재중 (0) | 2020.12.04 |
[안드로이드] 개념 및 용어 정리 - 인텐트 intent (0) | 2020.11.18 |
댓글