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

[Android ์•ฑ๊ฐœ๋ฐœ ์ž…๋ฌธ] ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ (@ ์ถ”๊ฐ€ํ•˜๊ธฐ)

by ์ ผ์ ผ39 2024. 3. 18.

1. ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ

    : Android ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ ์•ฑ ๋ฆฌ์†Œ์Šค ๋ฐ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” APK๋กœ ํŒจํ‚ค์ง•ํ•จ

    - AndroidStudio๋Š” ๊ณ ๊ธ‰ ๋นŒ๋“œ ํˆด ํ‚ท์ธ Gradle์„ ์‚ฌ์šฉํ•ด ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•˜๊ณ  ๊ด€๋ฆฌํ•จ

 

1) ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์˜ ๊ตฌ์กฐ

2) ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์—ญํ• 

    : ์†Œ์Šค์ฝ”๋“œ๋ฅผ DEX(Dalvik Executable) ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๊ทธ ์™ธ ๋ชจ๋“  ๊ฒƒ์„ ์ปดํŒŒ์ผ ๋œ ๋ฆฌ์†Œ์Šค๋กœ ๋ณ€ํ™˜

    - aapt ๋„๊ตฌ๋Š” ๋ฆฌ์†Œ์Šค ํŒŒ์ผ(/res ํด๋” ํ•˜์œ„ ํŒŒ์ผ)๋“ค์„ ์ปดํŒŒ์ผ ๋œ ๋ฆฌ์†Œ์Šค (R ํด๋ž˜์Šค ํŒŒ์ผ๊ณผ ํŒจํ‚ค์ง€๋œ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ)๋กœ ๋ณ€ํ™˜

    - kotlinc ์ปดํŒŒ์ผ๋Ÿฌ๋Š” kotlin ์†Œ์Šค ํŒŒ์ผ(์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ R.java์™€ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ .kt ํŒŒ์ผ)์„ kotlin ํด๋ž˜์Šค ํŒŒ์ผ(.class ํ™•์žฅ์ž)๋กœ ๋ณ€ํ™˜

    - dx ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ๋„๊ตฌ๋Š” ์ปดํŒŒ์ผ๋œ kotlin ํด๋ž˜์Šค ํŒŒ์ผ์„ DEXํŒŒ์ผ (.dex ํ™•์žฅ์ž)๋กœ ๋ณ€ํ™˜์‹œํ‚ด

    - ์ด DEXํŒŒ์ผ์—๋Š” Android๊ธฐ๊ธฐ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋จ

 

3) APKPackager

    : DEXํŒŒ์ผ๊ณผ ์ปดํŒŒ์ผ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹จ์ผ APK์— ๊ฒฐํ•ฉํ•จ

    - ์•ฑ์„ Android ๊ธฐ๊ธฐ์— ์„ค์น˜ํ•˜๊ณ  ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด APKPackager๋Š” ๋””๋ฒ„๊ทธ ๋˜๋Š” ๋ฆด๋ฆฌ์Šค ํ‚ค์Šคํ† ์–ด๋ฅผ ์‚ฌ์šฉํ•ด APK๋ฅผ ์„œ๋ช…

    (1) ๋””๋ฒ„๊ทธ ๋ฒ„์ „์˜ ์•ฑ (= ํ…Œ์ŠคํŠธ ๋ฐ ํ”„๋กœํŒŒ์ผ๋ง ์ „์šฉ์˜ ์•ฑ)

        - ๋นŒ๋“œ ์ค‘์ธ ๊ฒฝ์šฐ์—๋Š”, ํŒจํ‚ค์ €๊ฐ€ ๋””๋ฒ„๊ทธ ํ‚ค์Šคํ† ์–ด๋กœ ์•ฑ์— ์„œ๋ช…ํ•จ
        - Android Studio๋Š” ๋””๋ฒ„๊ทธ ํ‚ค์Šคํ† ์–ด๋กœ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•จ

    (2) ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „์˜ ์•ฑ (= ์™ธ๋ถ€์— ๋ฆด๋ฆฌ์Šคํ•  ์•ฑ)

        - ๋นŒ๋“œ ์ค‘์ธ ๊ฒฝ์šฐ์—๋Š”, ํŒจํ‚ค์ €๊ฐ€ ๋ฆด๋ฆฌ์Šค ํ‚ค์Šคํ† ์–ด๋กœ ์•ฑ์— ์„œ๋ช…ํ•จ

    (3) ์ตœ์ข… APK๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „

        - ํŒจํ‚ค์ €๋Š” ๊ธฐ๊ธฐ์—์„œ ์‹คํ–‰๋  ๋•Œ ๋” ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์•ฑ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด zipalign ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉ

 

2. ๋นŒ๋“œ ๊ตฌ์„ฑ ํŒŒ์ผ

    - ์ƒˆ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์‹œ, Android Studio๊ฐ€ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋นŒ๋“œ ๊ตฌ์„ฑ ํŒŒ์ผ (build.gradle(project level), settings.gradle, build.gradle(module level) ๋“ฑ)์„ ์ž๋™์œผ๋กœ ๋งŒ๋“ค๊ณ , ์ ํ•ฉํ•œ ๊ธฐ๋ณธ๊ฐ’์— ๋”ฐ๋ผ ํŒŒ์ผ์— ๊ฐ’์„ ์ฑ„์›€

1) build.gradle(Project level)

    : ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ์ตœ์ƒ์œ„ build.gradle ํŒŒ์ผ์€ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ๋ชจ๋“ˆ์— ์ ์šฉ๋˜๋Š” ๋นŒ๋“œ ๊ตฌ์„ฑ์„ ์ •์˜

buildscript{
    repositories{
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
    }
}

allprojects{
    repositories{
        google()
        jcenter()
    }
}

task clean(type: Delete){
    delete rootProject.buildDir
}

    // buildscript{ } ๋ธ”๋ก : ๋ชจ๋“  ๋ชจ๋“ˆ์— ๊ณตํ†ต๋˜๋Š” Gradle ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ์ข…์†์„ฑ์„ ์ •์˜

    // allprojects{ } ๋ธ”๋ก : ํ˜„ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ์ข…์†์„ฑ์„ ์ •์˜

 

2) settings.gradle

    : ์•ฑ์„ ๋นŒ๋“œํ•  ๋•Œ ์–ด๋–ค ๋ชจ๋“ˆ์„ ํฌํ•จํ• ์ง€๋ฅผ Gradle์— ์•Œ๋ ค์คŒ

    - ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์ด ํŒŒ์ผ์€ ๊ฐ„๋‹จํ•จ. (๋‹ค์Œ ์ฝ”๋“œ๋งŒ์„ ํฌํ•จํ•จ)

include ':app'

 

3) build.gradle(Module level)  

 

 

//apk๋ฅผ ๋”ฐ๋กœ ๋นผ๋ ค๋ฉด

build > build APK > build APK > locate ๋ˆ„๋ฅด๋ฉด ํŒŒ์ผ์ด ๋‚˜์˜ด