App execution process (Android)
์ฌ์ฉ์๊ฐ ๋๋ฐ์ด์ค์์ ํ๋ฌํฐ๋ก ๊ฐ๋ฐํ ์ฑ์ ์คํํ์๋, Android OS ์์ ์ด๋ป๊ฒ ๋์ํ๋์ง์ ๋ํด ์์๋ณด์.
Android
1. ์ฑ ํด๋ฆญ
์ฌ์ฉ์๊ฐ ๋๋ฐ์ด์ค์์ ์ฑ ์์ด์ฝ์ ํด๋ฆญํ๊ฒ ๋๋ฉด, Android ๋ฐ์ฒ๊ฐ AndroidManifest.xml
์ <intent-filter>
๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฑ์ ์ง์
์ ์ ํ์/ํ๋จ ํ, ์์คํ
์๋ฒ๋ก ์ ๋ฌํ๋ค.
๐ณ ์์คํ ์๋ฒ: ์๋๋ก์ด๋ ๋ถํ ์, Zygote๋ฅผ ๋ณต์ฌํด์ ๋ง๋ ๋ณ๋์ ์์คํ ํ๋ก์ธ์ค.
์๋๋ก์ด๋ ์ด์์ฒด์ ์ ํต์ฌ ์๋น์ค๋ค์ด ๋์ํ๋ ๊ณณ.
์ฑ ์ค์น/์ญ์
UI ์๋์ฐ ๋ฐฐ์น ๋ฑ
// MainActivity๊ฐ ์คํ
<activity android:name=".MainActivity">
<intent-filter>
// MAIN ํ๋์ ํ ์ ์๋ LAUNCHER์ ๋จ๋ ์ฑ => ์ฑ ์์ด์ฝ ๋๋ ์๋ ์คํ๋๋๋ก ํ์ฉ
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
๐ณ intent-filter: ์ฑ์ด ์ด๋ค ์คํ ์์ฒญ์ ๋ฐ์๋ค์ผ์ ์๋์ง ๋ช ์ํ ๊ฒ.
์๋๋ก์ด๋๋ ์ฑ ๊ฐ ํต์ , ์คํ ์์ฒญ์
intent
๋ผ๋ ๋ฉ์์ง ๊ฐ์ฒด๋ก ํํํ๋ค.๋ฐ๋ผ์, ์ฑ์ด
intent
๋ก ํํ๋ ์์ฒญ์ ๋ฐ์๋ค์ผ ์ ์๋๋ก,AndroidManifest.xml
์ ๋ช ์ํด์ผํ๋ค.
2. Zygote ํ๋ก์ธ์ค ์์ฑ
Zygote
์ ์๋๋ก์ด๋์ ์ด์์ฒด์ ํ๋ก์ธ์ค์ด๋ค.
์์คํ ์๋ฒ๋ ํด๋ฆญํ ์ฑ์ด ํ์ฌ ํ๋ก์ธ์ค๋ก ์คํ๋๊ณ ์๋์ง ํ์ธํ๋ค. ๋ง์ฝ ์คํ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด, Zygote๋ฅผ ๋ณต์ ํด ์คํ๋ ์ฑ์ ๋ ๋ฆฝ์ ์ธ ํ๋ก์ธ์ค๊ฐ ์์ฑํ๋ค. ์์ฑ๋ ํ๋ก์ธ์ค ์์ ART๊ฐ 1๋ฒ์์ ํ์ํ ์ฑ์ ์ง์ ์ ์ธ MainActivity๋ฅผ ๋ก๋ฉํ๊ณ ์ธ์คํด์ค๋ฅผ ์์ฑํด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ค.
๐ณ Zygote: ์๋๋ก์ด๋์์ ์คํ๋๋ ๋ชจ๋ ํ๋ก์ธ์ค์ ๋ถ๋ชจ ํ๋ก์ธ์ค
์๋๋ก์ด๋ OS ๋ถํ ์, ๊ฐ์ฅ ๋จผ์ ์คํ๋จ.
์๋๋ก์ด๋๋ ๋ฆฌ๋ ์ค ๊ธฐ๋ฐ์ด๊ธฐ ๋๋ฌธ์, ์ฑ์ ์คํํ ๋๋ง๋ค ๋ ๋ฆฝ๋ ํ๋ก์ธ์ค๊ฐ ํ์ํ๋ค.
์ด๋, ์ฑ๋ง๋ค JVM ๋ฑ์ ์ด๊ธฐํ๋ฅผ ์ค์ํ๋ฉด ์ฑ ์๋ ์ ํ๋ก ์ด์ด์ง
๋ฐ๋ผ์ Zygote ๋ผ๋ ๊ธฐ๋ณธ ํ๋ก์ธ์ค๋ฅผ ๋์ดํ, ์ฑ์ด ์คํ ๋ ๋๋ง๋ค Zygote๋ฅผ ๋ณต์ฌํด ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑํ
Zygote์์๋ ์ด๋ฏธ ์คํ์ค์ธ JVM์ด ์๊ธฐ ๋๋ฌธ์ ์ด๊ธฐํ ๋น์ฉ์ ์ค์ผ์ ์์.
3. MainActivity ์คํ
Flutter๋ฅผ ์ฌ์ฉํ ์ฑ์ ๊ฒฝ์ฐ, MainActivity๋ ๋ด๋ถ์ ์ผ๋ก FlutterActivity๋ฅผ ์์ํ๊ณ ์๋ค.
์ฆ, MainActivity ์คํ โ ART๊ฐ MainActivity ์ธ์คํด์ค(FlutterActivity๋ฅผ ์์ํ) ์์ฑ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ ์ฌ
์ธ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด FlutterActivity๋ ์ด๋ค ๋์์ ํ๋์ง ์์๋ณด์.
FlutterActivity๋ ๋ด๋ถ์ ์ผ๋ก libflutter.so๋ผ๋ Flutter ์์ง ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ์ดํ Dart VM์ ์์ฑํ๊ณ Dart์ EntryPoint์ธ main.dart๋ฅผ ์คํํ๊ฒ ๋๋๋ฐ, ์ด๋๋ถํฐ ์ฐ๋ฆฌ๊ฐ ์์ฑํ dart์ฝ๋๊ฐ ์ ์ฉ๋๋ ๊ฒ์ด๋ค.
๐ณ Flutter ์์ง์ ART๊ฐ ์คํํด์ ๋์ด๋ค ๋ผ๋ ํํ์ ์กฐ๊ธ ๋ ์์ธํ๊ฒ ์ดํด๋ณด์
FlutterActivity ๋ด๋ถ์์๋ JNI๋ฅผ ์ฌ์ฉํด์ ๋ค์ดํฐ๋ธ ์ฝ๋์ธ libflutter.so๋ฅผ ํธ์ถํ๋ค.
๐ณ JNI: Java์์ C++ ํจ์๋ฅผ ๋ถ๋ฌ์ฌ์ ์๊ฒ ํด์ฃผ๋ ๋ธ๋ฆฟ์ง ์ญํ
๋ถ๋ฌ์จ libflutter.so๋ก ์ธํด, Flutter ์์ง์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ฉฐ ์คํ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ART๋ Java ์์ญ์ ๊ด๋ฆฌํ๊ณ , C++ ์์ญ์ ART์ ๋ณ๊ฐ๋ก JNI๋ฅผ ์ฌ์ฉํด์ ์ง์ ๋ถ๋ฌ์ ์คํํด์ผํ๋ค.
์ฆ, ํธ์ถ ์์ฒด๋ ART๊ฐ ํ์ง๋ง, Flutter ์์ง์ C++ ๋ฐํ์์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ART์ ๋ณ๋ ฌ์ ์ผ๋ก ์คํ๋๋ค. (ART๋ Java ๋ฐํ์)
4. UI ๋ ๋๋ง
void main() {
runApp(MyApp());
}
์คํ๋ Flutter ์์ง ๋ด๋ถ์์ Dart VM์ด ์คํ๋๋๋ฐ, ์ต์ด EntryPoint์ธ main.dart์ main ํจ์๋ฅผ ์คํํด Flutter ์ฑ ๋ ๋๋ง ํ์ดํ ๋ผ์ธ์ด ์คํ๋๋ค. (Flutter์ ๋ ๋๋ง ํ์ดํ ๋ผ์ธ์ ๋ฐ๋ก ํฌ์คํ ํ ์์ ์ด๋ค)
Last updated