๋‚˜๋งŒ์˜ ์˜ค๋ž˜๋‹ฌ๋ฆฌ๊ธฐ๋ฅผ ํ•˜๋Š” ์‚ฌ๋žŒ

Become a ghost

Programming/Android

[240808][์•ˆ๋“œ๋กœ์ด๋“œ ์ž๋ฐ”] ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰ ๊ณผ์ •

jennnnna 2024. 8. 8. 17:26

์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰ ๊ณผ์ •

1. ์†Œ์Šค ์ฝ”๋“œ ์ž‘์„ฑ

๊ฐœ๋ฐœ์ž๋Š” Java/Kotlin ์†Œ์Šค ์ฝ”๋“œ, XML ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ, ๋ฆฌ์†Œ์Šค ํŒŒ์ผ ๋“ฑ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

2. ์ปดํŒŒ์ผ ํƒ€์ž„

์ด ๋‹จ๊ณ„์—์„œ๋Š” ์†Œ์Šค ์ฝ”๋“œ์™€ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์ด ์ปดํŒŒ์ผ๋˜์–ด ์•ฑ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์„ธ๋ถ€ ๋‹จ๊ณ„:

  1. ํ”„๋ฆฌํ”„๋กœ์„ธ์‹ฑ:
    • Gradle์ด ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฝ๊ณ  ํ”„๋กœ์ ํŠธ์˜ ์„ค์ •์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฆฌ์†Œ์Šค ์ปดํŒŒ์ผ:
    • XML ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ, ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ, ์ด๋ฏธ์ง€, ๋ฌธ์ž์—ด ๋ฆฌ์†Œ์Šค ๋“ฑ์ด AAPT(Android Asset Packaging Tool)์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
    • R.java ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์–ด ๊ฐ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๊ณ ์œ ํ•œ ID๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  3. ์†Œ์Šค ์ฝ”๋“œ ์ปดํŒŒ์ผ:
    • Java/Kotlin ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class ํŒŒ์ผ)๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.
    • Kotlin ํŒŒ์ผ์€ ๋จผ์ € Kotlin ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ ํ›„, Java ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ถ”๊ฐ€ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  4. ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋ณ€ํ™˜ ๋ฐ ๋‹ค๋“ฌ๊ธฐ:
    • ProGuard๋‚˜ R8 ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ , ๋‚œ๋…ํ™”ํ•˜๋ฉฐ, ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  5. DEX ํŒŒ์ผ ์ƒ์„ฑ:
    • ์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ dx ๋˜๋Š” d8 ๋„๊ตฌ์— ์˜ํ•ด Dalvik ๋ฐ”์ดํŠธ์ฝ”๋“œ(.dex ํŒŒ์ผ)๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
  6. APK ๋นŒ๋“œ:
    • ๋ชจ๋“  ์ปดํŒŒ์ผ๋œ ํŒŒ์ผ(.dex ํŒŒ์ผ, ๋ฆฌ์†Œ์Šค ํŒŒ์ผ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ)์ด ํ•˜๋‚˜์˜ APK ํŒŒ์ผ๋กœ ํŒจํ‚ค์ง•๋ฉ๋‹ˆ๋‹ค.
    • APK ํŒŒ์ผ์ด ์„œ๋ช…๋ฉ๋‹ˆ๋‹ค. ๋””๋ฒ„๊ทธ ๋นŒ๋“œ๋Š” ๋””๋ฒ„๊ทธ ํ‚ค๋กœ ์„œ๋ช…๋˜๊ณ , ๋ฆด๋ฆฌ์ฆˆ ๋นŒ๋“œ๋Š” ๋ฆด๋ฆฌ์ฆˆ ํ‚ค๋กœ ์„œ๋ช…๋ฉ๋‹ˆ๋‹ค.

3. ๋Ÿฐํƒ€์ž„

์ด ๋‹จ๊ณ„์—์„œ๋Š” ์ปดํŒŒ์ผ๋œ ์•ฑ์ด ์‹ค์ œ๋กœ ๋””๋ฐ”์ด์Šค์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์„ธ๋ถ€ ๋‹จ๊ณ„:

  1. APK ์„ค์น˜:
    • ๋นŒ๋“œ๋œ APK ํŒŒ์ผ์ด ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋‚˜ ์‹ค์ œ ๋””๋ฐ”์ด์Šค์— ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.
  2. ์•ฑ ์‹คํ–‰:
    • ์„ค์น˜๋œ ์•ฑ์ด ๋””๋ฐ”์ด์Šค์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    • ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ(Dalvik ๋˜๋Š” ART)์ด APK ํŒŒ์ผ์˜ .dex ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ , ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ:
    • ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ์ด ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, onCreate(), onStart(), onResume() ๊ฐ™์€ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

์ „์ฒด ๋นŒ๋“œ ๋ฐ ์‹คํ–‰ ํ๋ฆ„

  1. ์†Œ์Šค ์ฝ”๋“œ ์ž‘์„ฑ
    • Java/Kotlin ์ฝ”๋“œ, XML ๋ ˆ์ด์•„์›ƒ, ๋ฆฌ์†Œ์Šค ํŒŒ์ผ ์ž‘์„ฑ.
  2. ์ปดํŒŒ์ผ ํƒ€์ž„
    • ํ”„๋ฆฌํ”„๋กœ์„ธ์‹ฑ (Gradle ์„ค์ • ์ฝ๊ธฐ)
    • ๋ฆฌ์†Œ์Šค ์ปดํŒŒ์ผ (AAPT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ R.java ์ƒ์„ฑ)
    • ์†Œ์Šค ์ฝ”๋“œ ์ปดํŒŒ์ผ (Java/Kotlin ์ปดํŒŒ์ผ๋Ÿฌ ์‚ฌ์šฉ)
    • ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ตœ์ ํ™” (ProGuard/R8)
    • DEX ํŒŒ์ผ ์ƒ์„ฑ (dx/d8 ๋„๊ตฌ ์‚ฌ์šฉ)
    • APK ๋นŒ๋“œ ๋ฐ ์„œ๋ช…
  3. ๋Ÿฐํƒ€์ž„
    • APK ์„ค์น˜ (์—๋ฎฌ๋ ˆ์ดํ„ฐ/๋””๋ฐ”์ด์Šค)
    • ์•ฑ ์‹คํ–‰ (Dalvik/ART์—์„œ DEX ํŒŒ์ผ ๋กœ๋“œ)
    • ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ (์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ)