์ถ์ฒ
ChatGPT
Dex(Dalvik Executable)์ Androidd ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์คํ ํ์ผ ํฌ๋งท์ด๋ค. Android์์๋ Java ์ฝ๋๋ฅผ ์ปดํ์ผํ ํDalvik ๊ฐ์ ๋จธ์ง(DVM) ๋๋ ๊ทธ ํ์์ธ Android Runtime(ART)์์ ์คํ๋๋๋ก DEX ํฌ๋งท์ ๋ณํํ๋ค. ์ด ํฌ๋งท์ Android ์์คํ ์ ๊ณ ์ ํ ์๊ตฌ์ฌํญ์ ์ต์ ํ๋์ด ์์ผ๋ฉฐ, ๋ฆฌ์์ค ํจ์จ์ ์ธ ์คํ์ ๋ชฉํ๋ก ํ๋ค. DEX๋ Android ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋์ ์ดํดํ๊ณ ์ต์ ํํ๋ ๋ฐ ์์ด ์ค์ํ ์์์ด๋ค.
DEX์ ์ฃผ์ ๊ฐ๋ ๊ณผ ํน์ง
1. Dalvik ๊ฐ์ ๋จธ์ (DVM)
- Android๋ Java ๊ฐ์ ๋จธ์ (JVM)์ด ์๋ Dalvik ๊ฐ์ ๋จธ์ (DVM)์ ์ฌ์ฉํ๋ค. Dalvik์ Android์์ ์ฑ์ ์คํํ๊ธฐ ์ํด ํน๋ณํ ์ค๊ณ๋ ๊ฒฝ๋์ ๊ฐ์ ๋จธ์ ์ด๋ค.
- DVM์ .dex ํ์ผ์ ์คํํ๋ฉฐ, ๊ฐ ์ฑ์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํด์ ๋์ด ๋ฉ๋ชจ๋ฆฌ์ ํ๋ก์ธ์ค๋ฅผ ๊ณต์ ํ๋ค.
2. DEX ํฌ๋งท
๋จ์ผ DEX ํ์ผ
์ผ๋ฐ์ ์ธ Android ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปดํ์ผ ์ ๋ชจ๋ ํด๋์ค ํ์ผ์ ๋จ์ผ .dex ํ์ผ๋ก ๋ณํฉํ๋ค. ์ด๋ ์ฌ๋ฌ Java .class ํ์ผ์ด ๋จ์ผ DEX ํ์ผ๋ก ์ปดํ์ผ๋๋ค๋ ์๋ฏธ์ด๋ค.
๋ฉํฐ-DEX ์ง์
ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, DEX ํ์ผ์ ํฌ๊ธฐ๊ฐ Android์ ์ ํ์ ์ด๊ณผํ ์ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Android๋ ์ฌ๋ฌ ๊ฐ์ DEX ํ์ผ์ ์ง์ํ๋ฉฐ, ์ด๋ฅผ ํตํด ํฐ ๊ท๋ชจ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
3. ํจ์จ์ฑ
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ
DEX ํฌ๋งท์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๊ธฐ ์ํด ์ค๊ณ๋์๋ค. ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๊ณผ ์ค๋ณต ์ ๊ฑฐ๋ฅผ ํตํด ์์คํ ๋ฆฌ์์ค๋ฅผ ์ต์ ํํ๋ค.
๋น ๋ฅธ ์คํ
Dalvik ๋ฐ ART๋ ์คํ ์๊ฐ์ ์ต์ ํ๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถํ๋ฅผ ์ค์ด๊ณ , ๋น ๋ฅธ ์คํ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
4. DEX ํ์ผ ์์ฑ ๊ณผ์
Java ์์ค ์ฝ๋
์ ํ๋ฆฌ์ผ์ด์ ์ Java ์์ค ์ฝ๋ ํ์ผ(.java)
๋ฐ์ดํธ์ฝ๋
Java ์ปดํ์ผ๋ฌ(javac)๋ฅผ ์ฌ์ฉํ์ฌ .java ํ์ผ์ ๋ฐ์ดํธ์ฝ๋(.class ํ์ผ)๋ก ๋ณํ.
DEX ๋ณํ
Android SDK์ 'dx' ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ์ฌ๋ฌ .class ํ์ผ์ ํ๋์ DEX ํ์ผ(.dex) ํ์ผ๋ก ๋ณํ
APK ํจํค์ง
.dex ํ์ผ์ Android ํจํค์ง(.apk)๋ก ๋ฒ๋ค๋ง๋๋ฉฐ, ๋ฆฌ์์ค ํ์ผ๊ณผ ๋งค๋ํ์คํธ ๋ฑ๊ณผ ํจ๊ป Android ๋๋ฐ์ด์ค์ ์ค์น๋ ์ ์๋ค.
5. ART(Android Runtime)
- ART๋ Android 5.0(Lollipop)๋ถํฐ ๋์ ๋ ์๋ก์ด ๋ฐํ์ ํ๊ฒฝ์ผ๋ก, Dalvik์ ํ์์ด๋ค.
- Ahead-Of-Time(AOT) ์ปดํ์ผ : ART๋ ์ฑ ์ค์น ์ ์ฝ๋๋ฅผ ๋ฏธ๋ฆฌ ์ปดํ์ผํด, ์ฑ ์คํ ์์ ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํจ๋ค. Dalvik์ด ์คํ ์๊ฐ์ JIT(Just-In-Time) ์ปดํ์ผ์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ๋ ๋์กฐ์ ์ด๋ค.
- ART๋ ์ฌ์ ํ DEX ํ์ผ์ ์ฌ์ฉํ๋ฉฐ, DEX ํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ์ต์ ํ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
6. ๋ฉํฐ-DEX ๋ฌธ์ ํด๊ฒฐ ๋ฐ ๋ฉํฐ-DEX ์ค์
- Android ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก DEX ํ์ผ์ด ์ปค์ง๊ฒ ๋๊ณ , ๋จ์ผ DEX ํ์ผ์ ํ๊ณ๋ฅผ ๋์ ์ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฉํฐ-DEX๊ฐ ์ฌ์ฉ๋๋ค.
- ๋ฉํฐ-DEX ์ค์ ๋ฐฉ๋ฒ : Android ํ๋ก์ ํธ์์ 'build.gradle' ํ์ผ์ 'multiDexEnabled true'๋ฅผ ์ถ๊ฐํ์ฌ ๋ฉํฐ-DEX๋ฅผ ํ์ฑํํ๋ค.
android {
defaultConfig {
...
multiDexEnabled true
}
}
DEX ํ์ผ์ ์ฅ์ ๊ณผ ๋จ์
์ฅ์
1. ์ต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ
DEX ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ์ ๊ณ ๋ คํ์ฌ ์ค๊ณ๋์๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ํํ๊ณ ์์คํ ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.
2. ๋น ๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์คํ
ART ๋ฐ Dalvik VM์ ์ต์ ํ๋ฅผ ํตํด DEX ํ์ผ์ ๋น ๋ฅธ ์คํ ์๊ฐ์ ์ ๊ณตํ๋ค. ์ด๋ ํนํ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ์ค์ํ ์ฑ๋ฅ์์์ด๋ค.
3.๋ฉํฐ-DEX ์ง์
์ ํ๋ฆฌ์ผ์ด์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋๋ผ๋ ๋ฉํฐ-DEX๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ผ๋ฉฐ, ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ง์ํ๋ค.
4. ํ๋ซํผ ํธํ์ฑ
DEX ํฌ๋งท์ Android ํ๋ซํผ์์ ํ์คํ๋ ์คํ ํฌ๋งท์ผ๋ก, ๋ค์ํ ๋๋ฐ์ด์ค์์ ํธํ์ฑ์ ๋ณด์ฅํ๋ค.
๋จ์
1. ๋ณต์กํ ๋๋ฒ๊น
DEX ํ์ผ์ ์๋ฐ ์์ค ์ฝ๋์ ๋ค๋ฅด๊ฒ ๋ณํ๋ ๋ฐ์ดํธ์ฝ๋ ํฌ๋งท์ด๊ธฐ ๋๋ฌธ์, ๋๋ฒ๊น ๋ฌธ์ ํด๊ฒฐ์ด ๋ณต์กํ ์ ์๋ค.
2. ์ปดํ์ผ ์๊ฐ ์ฆ๊ฐ
DEX ๋ณํ ๋ฐ ๋ฉํฐ-DEX ๊ด๋ฆฌ๋ก ์ธํด ์ปดํ์ผ ์๊ฐ์ด ์ฆ๊ฐํ ์ ์๋ค. ์ด๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ ์๊ฐ์ ์ํฅ์ ๋ฏธ์น๋ค.
3. ๋์คํฌ ๊ณต๊ฐ ์ฌ์ฉ
๋ฉํฐ-DEX๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ฌ๋ฌ ๊ฐ์ DEX ํ์ผ๋ก ์ธํด ๋์คํฌ ๊ณต๊ฐ ์ฌ์ฉ์ด ์ฆ๊ฐํ ์ ์๋ค.
DEX ํ์ผ ๊ด๋ จ ์ฃผ์ ๋๊ตฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
1.ProGuard
์ฝ๋ ๋๋ ํ ๋๊ตฌ๋ก, DEX ํ์ผ์ ์ต์ ํํ๊ณ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๋ฐ ์ฌ์ฉ๋๋ค. ProGuard๋ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋ฎ์ถฐ ๋ณด์์ ํฅ์์ํค๋ฉฐ, DEX ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ค์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
2. R8
ProGuard์ ํ์ ๋๊ตฌ๋ก, ๋ ๋์ ์ต์ ํ์ ๋๋ ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. Google์์ ๊ฐ๋ฐํ R8์ DEX ํ์ผ์ ํฌ๊ธฐ ์ต์ ํ์ ์ฑ๋ฅ ๊ฐ์ ์ ๋ชฉํ๋ก ํ๋ฉฐ, ๋ ๋น ๋ฅธ ๋น๋ ์๊ฐ์ ์ ๊ณตํ๋ค.
3. DexGuard
ProGuard์ ์์ฉ ๋ฒ์ ์ผ๋ก, ์ถ๊ฐ์ ์ธ ๋ณด์ ๊ธฐ๋ฅ๊ณผ ์ต์ ํ๋ฅผ ์ ๊ณตํ๋ค. DexGuard๋ ๊ณ ๊ธ ๋๋ ํ์ ๋ณด์ ๊ธฐ๋ฅ์ ํตํด DEX ํ์ผ์ ๋ณดํธํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ์์ค์ ๋์ธ๋ค.
4. Multidex Library
Android์ ๋ฉํฐ DEX ์ง์์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ๋ฌ DEX ํ์ผ์ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํ๋ค. ์ด๋ฅผ ํตํด ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์์ ๋ฉํฐ-DEX ๋ฌธ์ ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
dependencies {
implementation 'androidx.multidex:multidex:2.0.1'
}
DEX ์ต์ ํ ๋ฐ ๋ฌธ์ ํด๊ฒฐ
1. DEX ์ต์ ํ
์ฝ๋ ๋๋ ํ ๋ฐ ์ต์ ํ
ProGuard ๋๋ R8์ ์ฌ์ฉํด ๋ถํ์ํ ์ฝ๋ ์ ๊ฑฐ ๋ฐ ์ต์ ํ
๋ฉํฐ-DEX ์ฌ์ฉ ์ ์ฃผ์์ฌํญ
๋ฉํฐ-DEX๋ฅผ ์ฌ์ฉํ ๋ ์ด๊ธฐ DEX ํ์ผ ๋ก๋ฉ ์๊ฐ์ด ์ฆ๊ฐํ ์ ์์ผ๋ฏ๋ก, ์ฑ ์ด๊ธฐํ ์๊ฐ์ ์ต์ ํํด์ผ ํ๋ค.
2. DEX ๋ฌธ์ ํด๊ฒฐ
64K ๋ฉ์๋ ์ ํ
๋จ์ผ DEX ํ์ผ์๋ 65,536๊ฐ ์ด์์ ๋ฉ์๋๋ฅผ ํฌํจํ ์ ์๋ค๋ ์ ํ์ด ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฉํฐ-DEX๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ถํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ฑฐํด ๋ฉ์๋ ์๋ฅผ ์ค์ด๋ ์ต์ ํ๋ฅผ ์ํํด์ผ ํ๋ค.
๋น๋ ์ฑ๋ฅ ํฅ์
๋น๋ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด R8์ ์ฌ์ฉํด ์ต์ ํํ๊ณ , ๋ฉํฐ-DEX ๋ก๋๋ฅผ ์ ์ ํ๊ฒ ๊ตฌ์ฑํด ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
๊ฒฐ๋ก
DEX ํ์ผ์ Android ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ํต์ฌ์ ์ธ ์ญํ ์ ํ๋ฉฐ, Android์ ํนํ๋ ์๊ตฌ์ฌํญ์ ๋ง์ถฐ ์ต์ ํ๋ ์คํ ํ๊ฒฝ์ ์ ๊ณตํ๋ค. DEX ํฌ๋งท์ Android ์ฑ์ ์ฑ๋ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํํ๋ ๋ฐ ์ค์ํ ์์์ด๋ฉฐ, ProGuard ๋ฐ R8 ๋ฑ์ ๋๊ตฌ๋ฅผ ํตํด ์ต์ ํ ๋ฐ ๋ณด์์ ๊ฐํํ ์ ์๋ค. ๋ฉํฐ-DEX ์ง์์ ํตํด ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฅ์ฑ์ ๋ณด์ฅํ๋ฉฐ, ๋ค์ํ Android ๋๋ฐ์ด์ค์์์ ํธํ์ฑ์ ์ ๊ณตํ๋ค. DEX ํ์ผ์ ์ดํด์ ์ต์ ํ๋ Android ๊ฐ๋ฐ์๊ฐ ๋ณด๋ค ํจ์จ์ ์ด๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๋ฐ ๊ธฐ์ฌํ๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] ์ฑ ๊ฐ๋ฐ์์์ ๋น๋(Build) (0) | 2024.08.02 |
---|---|
[Android] Android ์ ํ๋ฆฌ์ผ์ด์ ์ปดํ์ผ ๋ฐ ํจํค์ง ๊ณผ์ (0) | 2024.08.02 |
[OOP] ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ Object-Oriented Programming, OOP (0) | 2024.08.02 |
[OOP] ํด๋์ค์ ๊ฐ์ฒด์ ๊ด๊ณ (0) | 2024.08.01 |
[Java] Static ํค์๋ ์ฌ์ฉ ์ ์ฃผ์ํด์ผ ํ ์ (0) | 2024.08.01 |