ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AOS] Android Proguard μ„€μ •
    2023. 2. 11. 13:14
    λ°˜μ‘ν˜•

     

     

    🐱
    라이브러리 배포 전에 μ½”λ“œ λ‚œλ…ν™” μ„€μ • λΆ€νƒλ“œλ €μš”!
    λ‚œλ…ν™”ν•˜μ§€ μ•ŠμœΌλ©΄ 라이브러리 λ””μ»΄νŒŒμΌ μ‹œ μ½”λ“œκ°€ λ…ΈμΆœλ˜κ±°λ“ μš”.
    λ‚œλ…ν™”λŠ” μ–΄λ–»κ²Œ ν•˜λ©΄ λ˜λŠ”κ±΄κ°€μš”...?
    🐢

     

     

    🐱
    proguard라고 ν•œ 번쯀 듀어보셨죠? κ·Έκ±Έ μ΄μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.
    μ•„ν•˜! (λ””κ²Œ κ°„λ‹¨ν•œκ°€λ³΄λ„€γ…Žγ…Ž) λ„΅, μ•Œκ² μŠ΅λ‹ˆλ‹€!
    🐢

     

     

     

     

     

     

    μ•ˆλ“œλ‘œμ΄λ“œ κ°œλ°œμ„ ν•˜λ‹€λ³΄λ©΄ λ‹€λ“€ ν•œ 번쯀 build.gradleμ—μ„œ μ•„λž˜ μ½”λ“œλ‚˜

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

     

     

    proguard-rules.proλΌλŠ” νŒŒμΌμ„ λ³Έ 적 μžˆμ„ 것이닀.

     

     

     

     

    μ•„λ¬΄λž˜λ„ 곡뢀할 λ•Œμ—λ‚˜, ν•™λΆ€ ν”„λ‘œμ νŠΈλ₯Ό 진행할 λ•Œ λ‚œλ…ν™”ν•  ν•„μš”κ°€ 크게 μ—†κΈ° λ•Œλ¬Έμ— μ‚¬μš©ν•΄ λ³Έ κ²½ν—˜μ΄ 적을 것이닀. (λ‚˜ μ—­μ‹œλ„ μ‚¬μš©ν•΄ λ³Έ 적이 μ—†μ—ˆλ‹€.)

    ν•˜μ§€λ§Œ μ‹€λ¬΄μ—μ„œλŠ” λ‹€λ₯Έ 곳으둜 λΌμ΄λΈŒλŸ¬λ¦¬λ‚˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 배포할 λ•Œ μ½”λ“œ μœ μΆœμ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ ν•„μˆ˜μ μœΌλ‘œ μ‚¬μš©ν•œλ‹€.

     

     

    Proguard μ„€μ •ν•˜κΈ°

     

    proguardλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” build.gradle을 μ•½κ°„ μˆ˜μ •ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

    μœ„μ—μ„œ λ³Έ app μˆ˜μ€€ build.gradle의 μ½”λ“œμ—μ„œ minifyEnabled falseλ₯Ό true둜 λ³€κ²½ν•΄μ•Ό μ μš©λœλ‹€.

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

     

     

    ν•˜μ§€λ§Œ 이 섀정도 buildTypesκ°€ release 버전일 κ²½μš°μ—λ§Œ μ μš©λœλ‹€.

    debug 버전일 κ²½μš°μ—λ„ μ μš©ν•˜κ³  μ‹Άλ‹€λ©΄ μ•„λž˜μ™€ 같이 build type을 μΆ”κ°€ν•΄μ€€λ‹€.

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

     

     

    λΉŒλ“œ νƒ€μž…μ€ μ•ˆλ“œλ‘œμ΄λ“œ μŠ€νŠœλ””μ˜€ ν•˜λ‹¨ Build Variants νƒ­μ—μ„œ μ„€μ • κ°€λŠ₯ν•˜λ‹€.

     

     

     

    μ΄λ ‡κ²Œ κ°„λ‹¨ν•˜κ²Œ λλ‚˜λ©΄ μ’‹κ² μ§€λ§Œ... proguard 적용 μ œμ™Έ 섀정이 ν•„μš”ν•˜λ‹€.

     

    라이브러리 ν”„λ‘œμ νŠΈμ˜ 경우, proguardλ₯Ό μ΄μš©ν•΄ μ½”λ“œ λ‚œλ…ν™” ν›„ λ°°ν¬ν•˜λ©΄ λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ—μ„œ ν•΄λ‹Ή 라이브러리의 ν•¨μˆ˜λ₯Ό 가져와 μ‚¬μš©ν•  수 μ—†κ²Œ λœλ‹€.

    λ”°λΌμ„œ λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ—μ„œ λŒμ–΄μ™€ μ‚¬μš©ν•΄μ•Όν•˜λŠ” ν•„μˆ˜ ν•¨μˆ˜λ‚˜ μΈν„°νŽ˜μ΄μŠ€λŠ” λ‚œλ…ν™” μ œμ™Έ 섀정을 ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

    ν•΄λ‹Ή 섀정은 μœ„μ—μ„œ λ³Έ proguard-rules.pro νŒŒμΌμ—μ„œ μ„€μ • κ°€λŠ₯ν•˜λ‹€.

     

     

     

     

    λ‚œλ…ν™” μ˜ˆμ™Έμ²˜λ¦¬

    λͺ¨λ“  μΈν„°νŽ˜μ΄μŠ€ λ‚œλ…ν™” μ˜ˆμ™Έμ²˜λ¦¬

    - keep interface com.ν”„λ‘œμ νŠΈ.νŒ¨ν‚€μ§€λͺ….* { *; }

     

    λͺ¨λ“  클래슀 λ‚œλ…ν™” μ˜ˆμ™Έμ²˜λ¦¬

    - keep class com.ν”„λ‘œμ νŠΈ.νŒ¨ν‚€μ§€λͺ….* { *; }

     

    λ‚œλ…ν™”ν•  라이브러리

    - injars libs/라이브러리.jar // or aar, ... etc

     

    λ‚œλ…ν™”ν•  ν•„μš” μ—†λŠ” 라이브러리

    - libraryjars libs/라이브러리.jar // or aar, ... etc

     

     

    Proguard 곡식 λ¬Έμ„œ

     

    ProGuard Manual: Usage | Guardsquare

    ProGuard documentation about usage, configuration and options.

    www.guardsquare.com

     

     

     

     

    라이브러리의 규λͺ¨κ°€ 클수둝 λ‚œλ…ν™” μ˜ˆμ™Έμ„€μ • ν›„ λΉŒλ“œλœ 라이브러리둜 λͺ¨λ“  μž‘μ—…μ˜ 경우의 수λ₯Ό ν…ŒμŠ€νŠΈ ν•΄λ³΄λŠ” 것이 μ€‘μš”ν•˜λ‹€.

    μ˜ˆμƒμΉ˜ λͺ»ν•œ ν΄λž˜μŠ€κ°€ λ‚œλ…ν™”λ˜μ–΄ 였λ₯˜κ°€ λ°œμƒν•˜λŠ” κ²½μš°κ°€ 많기 λ•Œλ¬Έμ— 였랜 κΈ°κ°„, 그리고 λ‹€μ–‘ν•œ ν…ŒμŠ€νŠΈλ₯Ό  μˆ˜ν–‰ν•΄μ•Ό ν•œλ‹€.

     

     

     

    ν™”μ΄νŒ…...!

     

     

    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.