[Android] Proguard ๐Ÿ›ก

Jayยท2021๋…„ 6์›” 13์ผ
0

Android

๋ชฉ๋ก ๋ณด๊ธฐ
35/39
post-thumbnail

Proguard

์ฝ”๋“œ๋ฅผ ๋‚œ๋…ํ™” ๋ฐ ์ตœ์ ํ™” ์‹œ์ผœ์ฃผ๋Š” ์˜คํ”ˆ ์†Œ์Šค ํˆด

  • ๋ฌด๋ฃŒ ์ž๋ฐ” ํด๋ž˜์Šค ํŒŒ์ผ ์ถ•์†Œ๊ธฐ, ์ตœ์ ํ™”๊ธฐ, ๋‚œ๋…ํ™”๊ธฐ, ํ”„๋ฆฌ๋ฒ„๋ ˆ์ดํ„ฐ.
  • ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค, ํ•„๋“œ, ๋ฐฉ๋ฒ•, ์†์„ฑ์„ ๊ฒ€์ถœํ•ด ์ œ๊ฑฐํ•œ๋‹ค.
  • bytecode๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ง€์‹œ์‚ฌํ•ญ์„ ์ œ๊ฑฐํ•œ๋‹ค.
  • ์งง์€ ์˜๋ฏธ ์—†๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜๋จธ์ง€ ํด๋ž˜์Šค, ํ•„๋“œ, ๋ฐฉ๋ฒ•์˜ ์ด๋ฆ„์„ ๋ฐ”๊พผ๋‹ค.

ํ•„์š” ์ด์œ 

์ž๋ฐ”๋Š” JVM์œ„์—์„œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ํ˜•ํƒœ๋กœ ์ปดํŒŒ์ผ ๋œ๋‹ค.
์ด๋•Œ, ์ปดํŒŒ์ผ ๋œ ์ฝ”๋“œ์—์„œ ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ ์ •๋ณด๊ฐ€ ๊ทธ๋Œ€๋กœ ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ์— ๋””์ปดํŒŒ์ผ์„ ํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๋””์ปดํŒŒ์ผ ์‹œ์— ์•Œ์•„๋ณผ ์ˆ˜ ์—†๋„๋ก.

  • ์ฝ”๋“œ ๋‚œ๋…ํ™”๋กœ ์ธํ•ด ๋””์ปดํŒŒ์ผ ์‹œ ๋ณธ์ธ ์ฝ”๋“œ ๋…ธ์ถœ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ถˆํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๋ฉ€ํ‹ฐ๋ฑ์Šค๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฉ€ํ‹ฐ๋ฑ์Šค(Multidex)..?

  • ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์„ ๊ตฌ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ ๋˜์–ด ๋ฑ์Šค(dex)ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ง„๋‹ค.
  • ํ•˜๋‚˜์˜ ๋ฑ์ŠคํŒŒ์ผ์—๋Š” ์ตœ๋Œ€ 65536๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋งŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋งŒ์•ฝ ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ๊ฐ€ 65536๊ฐœ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ๋ฑ์ŠคํŒŒ์ผ์ด ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑ๋œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฉด ๋ฉ€ํ‹ฐ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋นŒ๋“œ ๊ณผ์ •์—์„œ ์•ฑ ๋‚ด์˜ ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฑ์ŠคํŒŒ์ผ๋กœ ๋‚˜๋ˆ ์•ผ ํ•˜๋ฏ€๋กœ ๋นŒ๋“œ ์†๋„๊ฐ€ ๋Š๋ ค์ง€๊ณ  apk์šฉ๋Ÿ‰์ด ์ปค์ง„๋‹ค.

Proguard๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ์‹œ ๋ฌธ์ œ์ 

  • ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๊ฐ€ ๋‚œ๋…ํ™”๊ฐ€ ๋˜์ง€ ์•Š์•„ ๋””๋ฒ„๊ทธ ์‹œ์— ์ฝ”๋“œ ๋…ธ์ถœ์ด ์šฐ๋ ค๋œ๋‹ค.
  • ๋ถˆํ•„์š” ์ฝ”๋“œ๊ฐ€ ์•ฑ ์ปดํŒŒ์ผ ์‹œ ํฌํ•จ๋˜์–ด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์•ฑ์˜ ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
  • ๋ถˆํ•„์š” ์ฝ”๋“œ๊ฐ€ ์ปดํŒŒ์ผ์— ํฌํ•จ๋˜๊ธฐ์— ๊ฐœ๋ฐœ์‹œ ๋ฉ”์„œ๋“œ 65536๊ฐœ ์ดˆ๊ณผ๋กœ ๋ฉ€ํ‹ฐ๋ฑ์Šค ์‚ฌ์šฉ์„ ํ”ผํ•  ์ˆ˜ ์—†๋‹ค.

์žฅ์ 

  • ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๋‚œ๋…ํ™”
  • ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ
  • ๋ถˆํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ๋กœ ์ธํ•ด ๋ฉ€ํ‹ฐ๋ฑ์Šค ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ

APK ๋นŒ๋“œ ๊ณผ์ •

์•ฑ ๊ด€๋ จ(R.java, ์†Œ์Šค์ฝ”๋“œ, ์ž๋ฐ” ์ธํ„ฐํŽ˜์ด์Šค) ์ฝ”๋“œ๋“ค์€ ์ปดํŒŒ์ผ์„ ๊ฑฐ์ณ
1. ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ์ „ํ™˜๋˜๊ณ 
2. ์ธ์ฆ์„ ํฌํ•จํ•œ ํŒจํ‚ค์ง• ๊ณผ์ •์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ๋‹ค.

1๏ธโƒฃ Android Manifest, xml ๋“ฑ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค ํŒŒ์ผ๋“ค์ด ์ปดํŒŒ์ผ๋˜์–ด R.java ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ AAPT ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ํŠน์ • resourceid๋กœ ๋งคํ•‘์‹œํ‚จ๋‹ค.

2๏ธโƒฃ .aidl interface๋ฅผ ์ž๋ฐ” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

3๏ธโƒฃ javac๋Š” ์•ฑ ๊ด€๋ จ ์ฝ”๋“œ(R.java ํŒŒ์ผ, ์†Œ์Šค์ฝ”๋“œ, ์ž๋ฐ” ์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ์ปดํŒŒ์ผ ํ•˜์—ฌ ๋ฐ”์ดํŠธ์ฝ”๋“œ(.classํŒŒ์ผ)๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ ์ด๋•Œ ํ”„๋กœ๊ฐ€๋“œ ๊ณผ์ •์ด ์ผ์–ด๋‚œ๋‹ค. (dexํŒŒ์ผ ์ƒ์„ฑ)

4๏ธโƒฃ dex + 3rd party library ํด๋ž˜์Šค ํŒŒ์ผ -> .dex file

5๏ธโƒฃ AAPT + .dex file -> apk๋กœ ํŒจํ‚ค์ง• -> .apk ์ƒ์„ฑ

6๏ธโƒฃ debug ๋˜๋Š” release ์šฉ keystore๋กœ ์ธ์ฆ ์ง„ํ–‰ -> ์ธ์ฆ๋œ .apk ์ƒ์„ฑ

6๏ธโƒฃ-1๏ธโƒฃ release ๋ชจ๋“œ๋กœ ์ธ์ฆ ์‹œ zipalign tool์„ ์ด์šฉํ•˜์—ฌ align ์‹œ์ผœ์คŒ(align์‹œ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ๋†’์—ฌ์คŒ)

Ref

profile
developer

0๊ฐœ์˜ ๋Œ“๊ธ€