๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Android] ์•ฑ ๊ฐœ๋ฐœ์—์„œ์˜ ๋นŒ๋“œ(Build)

์ถœ์ฒ˜

ChatGPT


์•ˆ๋“œ๋กœ์ด๋“œ ๋นŒ๋“œ ๊ณผ์ •์˜ ์ฃผ์š” ๋‹จ๊ณ„

1. ํด๋ฆฐ Clean

๋ชฉ์ 

  • ์ด์ „ ๋นŒ๋“œ์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ์‚ญ์ œํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋นŒ๋“œ๋ฅผ ์ค€๋น„ํ•œ๋‹ค.

์ž‘์—…

  • ์ด์ „ ๋นŒ๋“œ์—์„œ ์ƒ์„ฑ๋œ ์ค‘๊ฐ„ ํŒŒ์ผ ๋ฐ ์ถœ๋ ฅ๋ฌผ์„ ์‚ญ์ œํ•œ๋‹ค.
  • 'build/' ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ์ œ๊ฑฐํ•ด ๊นจ๋—ํ•œ ์ƒํƒœ์—์„œ ๋นŒ๋“œ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค

 

2. ์†Œ์Šค ์ฝ”๋“œ ์ปดํŒŒ์ผ Compile

Java์™€ Kotlin ์ปดํŒŒ์ผ

  • Java: '.java' ํŒŒ์ผ์„ '.class' ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.
  • Kotlin : '.kt' ํŒŒ์ผ์„ '.class' ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.
  • ์ด ๊ณผ์ •์€ JVM ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค.

 

์ฃผ์š” ๋„๊ตฌ

  • Java ์ปดํŒŒ์ผ๋Ÿฌ  ('javac')
  • Kotlin ์ปดํŒŒ์ผ๋Ÿฌ ('kotlinc')

 

3. ๋ฆฌ์†Œ์Šค ์ฒ˜๋ฆฌ Resource Processing

๋ชฉ์ 

  • ์•ฑ์˜ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ(์ด๋ฏธ์ง€, ๋ ˆ์ด์•„์›ƒ, ๋ฌธ์ž์—ด ๋“ฑ)์„ ์ปดํŒŒ์ผํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

์ž‘์—…

  • AAPT(Android Asset Packaing Tool)๋ฅผ ์‚ฌ์šฉํ•ด 'res/' ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” XML ํŒŒ์ผ, ์ด๋ฏธ์ง€, ๋ ˆ์ด์•„์›ƒ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ๋ฆฌ์†Œ์Šค ID๋ฅผ ์ƒ์„ฑํ•ด R.java์— ํฌํ•จํ•œ๋‹ค.
  • ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ '.flat' ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

 

4. ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ Data Binding and Processing

๋ชฉ์ 

  • ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ, XML ๋ ˆ์ด์•„์›ƒ์—์„œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ํด๋ž˜์Šค ์ƒ์„ฑ

์ž‘์—…

  • ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์‚ฌ์šฉ ์‹œ, 'ViewModel'์ด๋‚˜ 'LiveData'์™€์˜ ๋ฐ”์ธ๋”ฉ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ทฐ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค.

 

5. R8 ํ”„๋กœ๊ฐ€๋“œ ๋‚œ๋…ํ™” R8 ProGuard Obfuscation

๋ชฉ์ 

  • ์ฝ”๋“œ ๋‚œ๋…ํ™” ๋ฐ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๊ณ , ์•ฑ ํฌ๊ธฐ๋ฅผ ์ค„์ธ๋‹ค.

์ž‘์—…

  • ProGuard ๋˜๋Š” R8์„ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ ๋‚œ๋…ํ™” ๋ฐ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋‚˜.
  • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ์™€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ฑฐํ•ด APK ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ธ๋‹ค.
  • ProGuard ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ์ •์˜ํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ ๋‚œ๋…ํ™” ๋ฐ ์ตœ์ ํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

6. Dexing ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋ณ€ํ™˜

๋ชฉ์ 

  • JVM ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ Android ๋””๋ฐ”์ด์Šค์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ DEX ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

์ž‘์—…

  • D8 ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด '.class' ํŒŒ์ผ์„ '.dex' ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  • ๋‹ค์ค‘ DEX๋ฅผ ์ง€์›ํ•ด ๋ฉ€ํ‹ฐ DEX ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • R8 ๋„๊ตฌ๊ฐ€ ์ƒˆ์šฉ๋  ๊ฒฝ์šฐ ์ฝ”๋“œ ์ตœ์ ํ™”์™€ ๋‚œ๋…ํ™”๋ฅผ ๋ณ‘ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

7. ํŒจํ‚ค์ง• Packaging

๋ชฉ์ 

  • ๋ชจ๋“  ์ฝ”๋“œ์™€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•˜๋‚˜์˜ APK ํŒŒ์ผ๋กœ ํŒจํ‚ค์ง•ํ•œ๋‹ค.

์ž‘์—…

  • 'apkbuilder' ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด '.dex' ํŒŒ์ผ, ๋ฆฌ์†Œ์Šค, ๋งค๋‹ˆํŽ˜์ŠคํŠธ, ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์„ ํ•˜๋‚˜์˜ APK ํŒŒ์ผ๋กœ ๋ณ‘ํ•ฉํ•œ๋‹ค.
  • AndroidManifest.xml์— ์ •์˜๋œ ์ •๋ณด์— ๋”ฐ๋ผ APK ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.
  • ์„œ๋ช… ๋ฐ ์ •๋ ฌ(Align) ๊ณผ์ •์„ ํ†ตํ•ด APK๋ฅผ ์ตœ์ ํ™”ํ•œ๋‹ค.

 

8. ์„œ๋ช… Signing

๋ชฉ์ 

  • APK ํŒŒ์ผ์— ๋””์ง€ํ„ธ ์„œ๋ช…์„ ํ•ด ์•ฑ์˜ ์ถœ์ฒ˜์™€ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

์ž‘์—…

  • debug ๋นŒ๋“œ์—์„œ๋Š” ๋””๋ฒ„๊ทธ ํ‚ค์Šคํ† ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์ž๋™ ์„œ๋ช…ํ•œ๋‹ค.
  • release ๋นŒ๋“œ์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ๊ณตํ•œ ๋ฆด๋ฆฌ์ฆˆ ํ‚ค์Šคํ† ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์„œ๋ช…ํ•œ๋‹ค. 
  • APK ์„œ๋ช…์€ Google Play Store ๋ฐฐํฌ์— ํ•„์ˆ˜์ ์ด๋‹ค.

 

9. ์ •๋ ฌ Aligning

๋ชฉ์ 

  • APK ํŒŒ์ผ์˜ ๋Œ€์ดํ„ฐ ์ •๋ ฌ์„ ํ†ตํ•ด ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค.

์ž‘์—…

  • 'zipalilgn' ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด APK์˜ ZIP ์••์ถ• ๋ฐ์ดํ„ฐ๋ฅผ 4๋ฐ”์ดํŠธ ๊ฒฝ๊ณ„๋กœ ์ •๋ ฌํ•œ๋‹ค.
  • ๋””์ŠคํŠธ I/O ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œ์ผœ ์•ฑ ์‹คํ–‰ ์†๋„๋ฅผ ์ตœ์ ํ™”ํ•œ๋‹ค.

 

10. ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ ์ƒ์„ฑ Ouput Generation

๋ชฉ์ 

  • ์ตœ์ข… APK ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ๋ฐฐํฌ ์ค€๋น„๋ฅผ ์™„๋ฃŒํ•œ๋‹ค.

์ž‘์—…

  • Debug ๋ฐ Release ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋นŒ๋“œ ์ถœ๋ ฅ๋ฌผ์„ ์ƒ์„ฑํ•œ๋‹ค.
  • APK ํŒŒ์ผ์€ 'build/outputs/apk/' ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค.

 

11. ํ…Œ์ŠคํŠธ Test

๋ชฉ์ 

  • ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์•ฑ์˜ ํ’ˆ์งˆ์„ ๊ฒ€์ฆํ•œ๋‹ค.

์ž‘์—…

  • ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Test) : ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ
  • UI ํ…Œ์ŠคํŠธ(Instrumented Test) : ์‹ค์ œ ๊ธฐ๊ธฐ ๋˜๋Š” ์• ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์•ฑ์˜ UI๋ฅผ ํ…Œ์ŠคํŠธ
  • Lint ๊ฒ€์ฆ : ์ฝ”๋“œ ํ’ˆ์งˆ ๋ฐ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ฅผ ์ ๊ฒ€.

 

12. ๋ฐฐํฌ Deplyment

๋ชฉ์ 

  • ๋นŒ๋“œ๋œ APK ํŒŒ์ผ์„ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•œ๋‹ค.

์ž‘์—…

  • ๋กœ์ปฌ ํ…Œ์ŠคํŠธ : Android Emulator ๋˜๋Š” ์—ฐ๊ฒฐ๋œ ์‹ค์ œ ๊ธฐ๊ธฐ์— APK๋ฅผ ์„ค์น˜ํ•˜๊ณ  ํ…Œ์ŠคํŠธ
  • CI/CD ํŒŒ์ดํ”„๋ผ์ธ : Jenkins, GitHub Actions ๋“ฑ์„ ์‚ฌ์šฉํ•ด ์ž๋™ํ™”๋”˜ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค์ •
  • Google Play Store : ์ตœ์ข… APK๋ฅผ Google Play Store์— ์—…๋กœ๋“œํ•˜์—ฌ ๋ฐฐํฌ

 

๊ฒฐ๋ก 

Android ์•ฑ ๊ฐœ๋ฐœ์—์„œ์˜ '๋นŒ๋“œ' ๊ณผ์ •์€ ๋งค์šฐ ๋ณต์žกํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ, ๋ณด์•ˆ, ๊ธฐ๋Šฅ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜์ ์ด๋‹ค. Gradle ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜๊ณ , ๊ฐœ๋ฐœ์ž๊ฐ€ ๋” ์‰ฝ๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค.

์š”์•ฝ

 

  1. ์†Œ์Šค ์ฝ”๋“œ ์ปดํŒŒ์ผ: Java์™€ Kotlin ์†Œ์Šค ์ฝ”๋“œ๋ฅผ JVM ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.
  2. ๋ฆฌ์†Œ์Šค ์ฒ˜๋ฆฌ: XML, ์ด๋ฏธ์ง€ ๋“ฑ ์•ฑ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  3. DEX ๋ณ€ํ™˜: JVM ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ DEX ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  4. ํŒจํ‚ค์ง• ๋ฐ ์„œ๋ช…: ๋ชจ๋“  ํŒŒ์ผ์„ APK๋กœ ํŒจํ‚ค์ง•ํ•˜๊ณ , ๋””์ง€ํ„ธ ์„œ๋ช…ํ•œ๋‹ค.
  5. ๋ฐฐํฌ ๋ฐ ํ…Œ์ŠคํŠธ: APK๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋ฐฐํฌ ์ค€๋น„๋ฅผ ์™„๋ฃŒํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋“ค์€ Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ๋„๋‹ฌํ•˜๊ธฐ ์ „ ๊ฑฐ์น˜๋Š” ํ•„์ˆ˜์ ์ธ ๊ณผ์ •์ด๋ฉฐ, ๊ฐ ๋‹จ๊ณ„๋Š” ์•ฑ์˜ ์•ˆ์ •์„ฑ๊ณผ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.