λ²ŒκΏ€μ˜€μ†Œλ¦¬πŸ¦‘ 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

 

 

 

 

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

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

 

 

 

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

 

 

λ°˜μ‘ν˜•