빌드 스크립트를 보는데 갑자기 문득 이러한 궁금증이 생겼다. 왜 처음 모듈을 만들게 되면, consumer-rules.pro 파일과 proguard-rules.pro 파일이 왜 생기는가?
과연 이 두개는 어디서 쓰이고, 어떻게 쓰이는가? 그래서 한번 찾아보기로 했다.
이 링크를 보면 Consumer-rules.pro 파일과 proguard-rules.pro 파일들이 언제 어디서 쓰이는지를 알 수 있을 것 같다.
여기서 제공하는 질문들을 일단 먼저 찾아보자
Will all the modules code be obfuscated by the rules of the main modules pro-guard rules even if the module does not specify any rules?
What is the difference between consumer-rules.pro and proguard-rules.pro in Android?
Should I enable minifyEnabled in my module?
I notices that I can add proguard rules for my module in the main module, so does that mean proguard-rules in the module are overriden in the main module?
1번 질문부터 살펴보자.
답은 이렇다.
난독화는 그렇게 진행되지 않는다. App 모듈에서 Property Minify 를 활성화하게 되면, 앱 모듈에서 사용가능한 코드들 뿐만 아니라, 서드파티 로 Dependency 가 걸려있는 라이브러리들도 난독화를 진행하려고 하며, 다른 라이브러리 모듈 역시 서드파티로 간주하게 된다. 그러나 서드파티가 종속하고 있는 라이브러리에 대해서는 건드리지 않는다.
답은 다음과 같다.
proguard-rules.pro 는 모듈과 그 모듈의 종속되어 있는 라이브러리의 proguard 와 연관되어 있는 규칙을 선언하는 파일이다.
잠깐! 그러면 proguard 는 무엇이냐?? → 코드를 난독화해주고, 최적화를 해주는 오픈소스 툴이다.
그말은 프로가드라는 오픈소스를 사용할 수 있게 해주는 규칙들을 선언해주는 파일이 proguard-rules.pro 라는 것이다.
consumer-rules.pro 는 고객 ( 혹은 소비자 ) 가 모듈에 적용할 수 있는 규칙을 선언하는 파일이다.
여기서 말하는 고객이란 → 이 모듈을 사용하는 곳, 혹은 종속성 자체로 선언한 라이브러리이며, 보통 라이브러리 선언자들이 많이 사용하게 된다 )
추천한다. 그러나 모든 아이템들이 설정이 잘 되어있는지 확인해봐야 할 것이다. ( classes.dex 파일에 압축되어있는 코드가 있을것 )
그래서 생각하건데, 프로젝트를 생성할 때에는 내가 library를 만들어서 사용할 것이냐, 혹은 Application Module 만 사용할 것이냐에 따라서 이 두개의 사용성을 정의해보면 좋을 것 같다. ( 애플리케이션만 있으면 굳이 consumer-rules.pro 파일은 필요 없어보인다.)