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