[Flutter]

Flutter에서 Android 동작 원리

Hevton 2022. 12. 25. 22:15
반응형

 

 

안드로이드 개발을 해온 나로써, 플러터에서 안드로이드의 동작 원리가 궁금해졌다.

그리고 이는, Flutter에서 네이티브한 구현을 할 수 밖에 없는 위젯 구현에 대해서 진행할 때에도 많은 도움이 되었다.

 

 

Flutter는 iOS / AOS 가 이해할 수 있는 C/C++ 언어로 컴파일 된 뒤에 그들 위에서 실행된다.

AOS의 경우에 안드로이드의 MainActivity가 먼저 실행되겠고, 그 위에서 Flutter 코드 화면들이 동작한다고 추상적으로 생각하면 된다.

 

이 과정에서는 FlutterEngine이라는 것이 쓰이고, 이 로직이 FlutterActivity에 구현되어 있다.

 

FlutterEngine은 각 OS에서 Dart 코드를 실행할 수 있게 해주는 인터페이스 역할을 해준다.

 

그리고 FlutterView 위에서 화면이 보여지게 된다.

 

 

MainActivity에 진입해보면, FlutterActivity를 extends 하고 있는 것을 확인할 수 있는데

 

FlutterActivity에서 눈여겨 보아야 할 함수 네 가지가 있다.

 

getAppBundlePath() : main.dart 패키지의 위치를 알 수 있다

 

getDartEntrypointFunctionName() : 기본값은 "main"을 리턴하게 된다. 즉, Flutter의 main함수가 진입점이기에 main을 리턴해주면 되는 것이고, 여기서 main02를 리턴하면 진입점은 main02가 된다. EntrypointFunction을 커스텀 할 수 있다는 것.

 

getDartEntrypointArgs() : Flutter의 main함수의 원형은 void main()이다. 여기서 인자를 List<String> 형태로 넘겨줄 수 있는데,

이 함수를 오버라이딩해서 List<String> 값을 넘겨주면 main함수에 인자로 넘어간다.

 

getInitialRoute() : 디폴트 값은 "/" 이다. Flutter에서 Navigator 형식으로 URI를 지정할 수 있듯이, 

"/user" , "/news" 이런식으로 Flutter에서 미리 등록해놓고 여기서 지정하면 된다.

 

 

 

아예 안드로이드 코드 실행 도중에, 플러터를 실행하고 싶으면 FlutterEngine을 직접 사용하면 된다.

 

 

FlutterEngine은 Dart와 Flutter코드를 구동하고 해석해서 Native에서 활용할 수 있도록 해주는 엔진이다.

하지만 FlutterEngine만으로는 화면을 구성하진 못한다. FlutterView를 이용하며 Flutter화면을 담아내고

FlutterEngine에 FlutterView를 연결하여 동작시킨다.

 

 

 

 

참고

https://ctoahn.tistory.com/29

 

 

반응형