์๋๋ก์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ๋ก์ ํธ๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ง ์ ์๋ค. ๋ง์ฝ ์๋ก ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์ผํ ์ด๋ฆ์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ, ์๋๋ก์ด๋ ๋น๋ ๋๊ตฌ๋ ํ๋์ ๋ฆฌ์์ค๋ฅผ ์ ํํด์ผ๋ง ํ๋ค. ๊ณต์ ๋ฌธ์ ์์ ์ด ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํ๋ค.
์ฌ๋ฌ AAR ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ข ์์ฑ ๋ชฉ๋ก์ ๋งจ ์ฒ์(dependencies ๋ธ๋ก์ ์๋ถ๋ถ)์ ๋์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฆฌ์์ค๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ฆ A ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ B ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ชจ๋ ic_user.png ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ A๋ฅผ build.gradle ์์กด๊ด๊ณ์ ๋จผ์ ์ ์ธํ๋ค๋ฉด, A ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ic_user.png ๊ฐ ์ฑ์ ํ์ฌ๋๋ค. ์ด ๊ณผ์ ์์ ์๋์น ์์๋ ๋์์ด ์ผ์ด๋ ์ ์์ผ๋ ์ฃผ์ํด์ผ ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๋ฌธ์ ๊ฐ ๊ฐ๋จํ์ง ์๋ค. ์ ๋ง build.gradle ์ ์ ์ธ๋ ์์๋๋ก ์ ํ๋ ๊น? ๊ทธ๋ ์ง ์๋ค.
libA ๊ฐ libB ์ ์์กดํ๋ฉฐ build.gradle์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค๊ณ ์๊ฐํด๋ณด์.
implements libB
implements libA
๋ถ๋ช
ํ B๋ฅผ ๋จผ์ ์ ์ธํ์ผ๋ B์ ๋ฆฌ์์ค๊ฐ ๋จผ์ ์ ํ๋ ๊ฒ ๊ฐ์ง๋ง, A์ ๋ฆฌ์์ค๊ฐ ์ ํ๋๋ค. ๊ทธ ์ด์ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ข
์์ฑ ์์ ๋๋ฌธ์ธ ๊ฒ์ผ๋ก ์ถ์ ๋๋ค. ์ฆ, build.gradle ํ์ผ์ ๋ช
์ํ ์์๊ฐ ์๋, ์ข
์์ฑ ์์์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค๊ณ ์ถ์ ๋๋ค. ๋ช
ํํ ๋ฌธ์์์ ํ์ธํ ๊ฒ ์๋๋ผ ํ
์คํธ ๊ฒฐ๊ณผ ํ์ธํ ๊ฒ์ด๋ผ ์ ํํ ์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค.
์ข
์์ฑ ์์ ๋ฌธ์์ ๋ฐ๋ฅด์๋ฉด, libA ๊ฐ libB์ ์์กดํ๋ฏ๋ก libA ๊ฐ ๋ ์ฐ์ ์์๊ฐ ๋๋ค. ์ฆ, libB ์์กด์ ๋จผ์ ๋ช
์ํ๋๋ผ๋ libA ์์กด์ด ๋จผ์ ๋์จ๋ค. ๊ทธ๋์ ๋ฆฌ์์ค๋ libA ๋ฅผ ๋จผ์ ์ ํํ๋ ๊ฒ ๊ฐ๋ค. ํ์ธํ๊ณ ์ถ๋ค๋ฉด gradlew app:androidDependencies ๋ฑ์ ๋ช
๋ น์ ์ํํ๋ฉด ์ถ๋ ฅ๋๋ ์ข
์์ฑ์ ๋ด์ฉ์ ๋ณด๋ฉด ๋๋ค.
์ฐธ๊ณ ๋ก ์ฑ ๋น๋ ๊ณผ์ ์์ ์์ฑ๋๋ build/intermediates/blame/debug/single/debug.json๋ฅผ ๋ณด๋ฉด ๊ฐ ๋ฆฌ์์ค๊ฐ ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก๋ถํฐ ์ ํ๋์๋์ง ํ์ธํ ์ ์๋ค. ์ด ๋ด์ฉ๋ ๊ณต์ ๋ฌธ์์์ ์ฐพ์ง ๋ชปํ๊ณ , ํ
์คํธ๋ฅผ ํ๋ ๊ณผ์ ์์ ์ฐพ์๋๋ค.
์, ๊ทธ๋ผ libB์ ๋ฆฌ์์ค๋ฅผ ์ฐ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ์ง๊ธ๊น์ง ์ฐพ์๋ธ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ libB์ ๋ํ ์ข
์ ๊ด๊ณ๋ฅผ ์ ๊ฑฐํด์, libB์ ์ข
์์ฑ ์ฐ์ ์์๋ฅผ ๊ฐ์ ๋ก ๋์ด์ฌ๋ฆฌ๋ ๋ฐฉ์์ด๋ค. ์ฆ build.gradle ์ ์ด๋ ๊ฒ ์์ฑํ๋ฉด ๋๋ค.
implements libB
implements libA {
exclude libB
}
์ ๊ฒฝ์ฐ๋ libA ํ๋๋ง libB๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ์ ์์ฃผ ๋จ์ํ๋ฐ, ์ฌ๋ฌ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ด ์ค ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ libB์ ์์กดํ๋์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ์ด๋ป๊ฒ ํ ๊น? ๋ค์๊ณผ ๊ฐ์ configuration ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋๋ค. ๋จ ์๋ ์ฝ๋๋ ๋๋ฌด ๋ฌด์ํ๋ ์ ์ ํ ํํฐ๋ง์ด ํ์ํ ๋ฏ ํ๋ค.
configurations.all.each { config ->
config.allDependencies.all { dep ->
if (dep instanceof ModuleDependency) {
dep.exclude(["group": "๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ทธ๋ฃน", module: "๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋ ์ด๋ฆ"])
}
}
}
์ฐธ๊ณ ๋ก ํด๊ฒฐ์ฑ ์ ์ฐพ๋ ์์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฆฌ์์ค ๊ณต๊ฐ ์ฌ๋ถ๋ฅผ ์ ์ดํ๋ฉด ๋์ง ์์๊น ์ถ์ด ์ฐพ์๋ดค๋๋ฐ, ๋ฆฌ์์ค ๊ณต๊ฐ ์ฌ๋ถ๋ ๊ฐ๋ฐ ๊ณผ์ ์ด๋ ๋น๋ ๋จ๊ณ์ ๊ฒ์ฆ์๋ง ์ํฅ์ ๋ฏธ์น ๋ฟ, ๋ฆฌ์์ค ๋ณํฉ์ ์ํฅ์ ๋ฏธ์น์ง ๋ชปํ๋ฏ๋ก ํด๊ฒฐ์ฑ ์ด ๋์ง ๋ชปํ๋ค.