월별 글 목록: 2017년 2월월

앱(APK) 크기를 줄이는 또 다른 방법

앱 크기를 줄이는 팁으로 사용하지 않는 이미지, Proguard 사용 등의 여러 가지 방법이 있다. 이 방법들 모두는 결국 zip 포맷으로 패키징되는 파일을 개수나 크기를 줄여서 .apk 파일의 크기를 줄이는 것이다. 이 글에서는 .apk 파일이 포함하는 또 다른 파일인 텍스트 파일을 제거해서 앱의 크기를 줄이는 방법을 살펴보자. 텍스트 파일이라서 앱 크기에 큰 영향을 미치지는 않지만, 그래도 약간의 크기를 줄일 수 있는 또 다른 방법으로 알아두면 좋겠다.

이 방법은 안드로이드 스튜디오에서 빌드와 패키징을 담당하는 툴인 그레들의 빌드파일(build.gradle)에 packagingOptions{} 영역에 패키징시에 제외할 파일을 기술하는 것이다. 이 설정은 아래와 같이 동일 파일의 중복으로 인한 에러를 해결하는데 또한 사용한다.

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/DEPENDENCIES

그래서, 위 에러를 해결하기 위한 최소의 설정은 다음과 같다.

android {
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
    }
}

컴파일한 앱의 크기를 확인해 보면, 크기가 9,154,124 바이트이다.

다음으로 어느 파일을 제외할 수 있는지 살펴보자. 안드로이드 스튜디오에서 Build > Analyze Apk 로 위의 파일을 선택하면 아래의 화면을 볼 수 있다.

위 화면에서 체크한 파일들을 앱 패키징시에 제외시키도록 packageOptions에 추가하자. 그리고 일반적으로 많이 사용하는 텍스트 파일도 역시 미리 포함시켜 넣어서 아래와 같이 설정한다.

android {
	packagingOptions {
	    exclude 'META-INF/DEPENDENCIES.txt'
	    exclude 'META-INF/DEPENDENCIES'
	    exclude 'META-INF/dependencies.txt'
	    exclude 'META-INF/LICENSE.txt'
	    exclude 'META-INF/LICENSE'
	    exclude 'META-INF/license.txt'
	    exclude 'META-INF/LGPL2.1'
	    exclude 'META-INF/ASL2.0'
	    exclude 'META-INF/NOTICE.txt'
	    exclude 'META-INF/NOTICE'
	    exclude 'META-INF/notice.txt'
	    exclude 'META-INF/MANIFEST.MF'
	    exclude 'META-INF/manifest.mf'
	    exclude 'META-INF/MANIFEST'
	    exclude 'META-INF/manifest'

	    exclude 'META-INF/CHANGES'
	    exclude 'META-INF/README'
	    exclude 'META-INF/NOTES.TXT'

	    exclude 'licenses/thoughtworks.TXT'
	    exclude 'licenses/extreme.indiana.edu.license.TXT'
	    exclude 'licenses/javolution.license.TXT'
	}
}

이제 다시 패키징한 파일을 살펴보자. 필요 없는 텍스트 파일들을 제외하고, 컴파일한 파일의 크기는 9,137,085 바이트이다.

이 과정으로 앱의 크기가 17,000 바이트를 줄일 수 있다. 이 과정으로 메가 바이트 단위로 앱의 크기를 줄이기는 힘들겠지만, 약간이나마 크기를 줄이는데 기여할 수 있다.