consumer-rule.pro VS proguard-rule.pro

염준우·2022년 9월 22일
0

빌드 스크립트를 보는데 갑자기 문득 이러한 궁금증이 생겼다. 왜 처음 모듈을 만들게 되면, 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번 질문부터 살펴보자.

1.모듈이 규칙들을 명시하지 않았더라도, 모든 모듈 코드는 메인 모듈 프로가드의 규칙에 의해 난독화가 진행되나요?

답은 이렇다.

난독화는 그렇게 진행되지 않는다. App 모듈에서 Property Minify 를 활성화하게 되면, 앱 모듈에서 사용가능한 코드들 뿐만 아니라, 서드파티 로 Dependency 가 걸려있는 라이브러리들도 난독화를 진행하려고 하며, 다른 라이브러리 모듈 역시 서드파티로 간주하게 된다. 그러나 서드파티가 종속하고 있는 라이브러리에 대해서는 건드리지 않는다.

2. 그러면 consumer-rules.pro 와 proguard-rules.pro 의 차이점은 무엇인가요?

답은 다음과 같다.

proguard-rules.pro 는 모듈과 그 모듈의 종속되어 있는 라이브러리의 proguard 와 연관되어 있는 규칙을 선언하는 파일이다.

잠깐! 그러면 proguard 는 무엇이냐?? → 코드를 난독화해주고, 최적화를 해주는 오픈소스 툴이다.

그말은 프로가드라는 오픈소스를 사용할 수 있게 해주는 규칙들을 선언해주는 파일이 proguard-rules.pro 라는 것이다.

consumer-rules.pro 는 고객 ( 혹은 소비자 ) 가 모듈에 적용할 수 있는 규칙을 선언하는 파일이다.

여기서 말하는 고객이란 → 이 모듈을 사용하는 곳, 혹은 종속성 자체로 선언한 라이브러리이며, 보통 라이브러리 선언자들이 많이 사용하게 된다 )

3. 모듈에서 minifyEnabled 를 설정해도 되나요?

추천한다. 그러나 모든 아이템들이 설정이 잘 되어있는지 확인해봐야 할 것이다. ( classes.dex 파일에 압축되어있는 코드가 있을것 )

그래서 생각하건데, 프로젝트를 생성할 때에는 내가 library를 만들어서 사용할 것이냐, 혹은 Application Module 만 사용할 것이냐에 따라서 이 두개의 사용성을 정의해보면 좋을 것 같다. ( 애플리케이션만 있으면 굳이 consumer-rules.pro 파일은 필요 없어보인다.)

참조 : https://stackoverflow.com/questions/60861929/what-is-the-difference-between-consumer-rules-pro-and-proguard-rules-pro-in-andr

profile
항상 새로움을 추구하는 안드로이드 개발자입니다! 🏆

0개의 댓글