빌드관련 문서들을 읽어보며 공부한 내용을 정리한 것입니다.

안드로이드 빌드관련 정보

안드로이드 빌드를 최적화 하기 위해 .dex파일을 줄이는것을 목표로 함

추가로 코드의 유출을 방지하는것을 기대할 수 있음

R8

R8 컴파일러는 Java 바이트코드를 최적화하여 DEX 포맷으로 저장한다. 사용되지 않는 메서드, 리소스 등을 제거하여 DEX를 경량화하고, 난독화 등의 기능도 제공한다.

경량화 과정

축소 (Shrink)

축소 단계는 코드 축소와 리소스 축소로 나뉜다.

코드 축소는 런타임에 필요하지 않은 코드를 제거하는 과정이다. 외부 라이브러리 중 사용 되지 않는 부분을 제거할 수 있다. 라이브러리의 개수는 많지만 사용하는 부분이 매우 적을 때 사용하면 좋음

난독화 (obfuscation)

프로그램을 변화하는 방법의 일종으로 코드를 읽기 어렵게 만들어 역공학을 통한 공격을 막는 기술 JVM 계열 언어에서는 컴파일 결과로 나오는 바이트코드를 디컴파일하면 원본 코드를 대부분 복원할 수 있기 때문에 적용한다면 큰 이점이 있음 긴 클래스 이름을 짧게 바꾸기 때문에 DEX 파일의 용량이 줄어드는 효과도 있음

Proguard-rules.pro 파일에서 난독화 과정에서 제외시킬 부분을 지정할 수 있음

제외시키는 파일이 많아진다면 나중에 구분하기 어려워지므로 제외시키는 클래스들을 기준을 정해서 .pro파일들을 구분시키는것이 좋을것 같다. 혹은 같은 파일 안에서라도 확실히 구분시켜주는게 좋을듯

또는 @Keep 어노테이션을 붙이는 방법도 있음

최적화 (optimization)