android 프로젝트 최적화에 대해

정동현·2022년 12월 19일

최적화란?

최적화는 범용적으로 사용할 수 있는 단어이다.
앱을 실제 사용하는 사용자에게 최적화된 UX/UI 경험을 제공하는 것도 하나의 예시이며,
사용자는 모르지만 내부적으로 코드의 연산을 축소하여 같은 결과를 보여주는 것도 포함 될 수 있다.
오늘의 최적화 주제는 코드나 UX/UI 부분이 아닌, 프로젝트 설정부터 빌드까지의 최적화에 대해 얘기하고자 한다.

유저가 디바이스에 앱을 설치할 때, 앱 설치 파일의 용량이 크면 클수록 거부감이 들 수 있다.
Google에서는 몇가지 방법을 제시하고 있다.

  • 코드 축소
  • 리소스 축소
  • 난독화
  • 최적화

(해당 부분에 최적화에 대해 축 작성중..)

위의 구글에서 제시한 방법들을 적용하는 과정을 빌드 스크립트에 적용하다가 문득 이러한 궁금증이 생겼다.
왜 처음 모듈을 만들게 되면, consumer-rules.pro 파일과 proguard-rules.pro 파일이 왜 생기는가?
과연 이 두개는 어디서 쓰이고, 어떻게 쓰이는가? 그래서 한번 찾아보기로 했다.

링크를 보면 consumer-rules.pro 파일과 proguard-rules.pro 파일들이 언제 어디서 쓰이는지를 알 수 있을 것 같다.

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 를 설정해도 되나요?

stackoverflow에서 몇가지 작성글들을 찾아보았는데, 각 모듈에서 별도의 설정을 권장하고 있다.
그러나 모든 아이템들이 설정이 잘 되어있는지 확인해봐야 할 것이다. (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

4. 리소스 축소도 모듈에서 설정해도 되는가?

리소스 축소는 모듈(라이브러리)에는 적용 불가능하였다. 이 부분은 찾을 필요도 없이 isShrinkResources를 선언하고 빌드하면 빌드 메세지로 에러가 출력된다.

0개의 댓글