Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

zipalign

zipalign은 Android 애플리케이션(APK) 파일의 중요한 최적화 기능을 제공하는 보관 파일 정렬 도구입니다. zipalign의 목적은 압축되지 않은 모든 데이터가 파일 시작 부분에 맞게 특정 정렬이 적용된 상태로 시작되도록 하는 것입니다. 구체적으로 이미지, 원시 파일 등 APK 내 압축되지 않은 모든 데이터가 4바이트 경계에 맞게 정렬됩니다. 따라서 정렬이 제한된 바이너리 데이터가 포함되어 있어도 mmap()을 사용하여 모든 부분에 직접 액세스할 수 있습니다. 장점은 애플리케이션을 실행할 때 사용되는 RAM의 양이 줄어든다는 것입니다.

APK 파일을 최종 사용자에게 배포하기 전에 정렬하려면 항상 이 도구를 사용해야 합니다. Android 빌드 도구에서 이 작업을 처리할 수 있습니다. Android 스튜디오에서 APK를 자동으로 정렬합니다.

주의: 사용 중인 앱 서명 도구에 따라 앱 빌드 프로세스의 두 특정 지점 중 하나에서 zipalign을 사용해야 합니다.

  • apksigner를 사용하는 경우 APK 파일에 서명하기 에만 zipalign을 실행해야 합니다. apksigner를 사용하여 APK에 서명하고 APK를 추가로 변경하면 서명이 무효화됩니다.
  • jarsigner를 사용하는 경우 APK 파일에 서명한 에 zipalign을 실행해야 합니다.

zip 로컬 파일 헤더 섹션에 있는 'extra' 필드의 크기를 변경하면 조정됩니다. 'extra' 필드의 기존 데이터가 이 과정에 의해 변경될 수도 있습니다.

애플리케이션을 빌드할 때 zipalign을 사용하는 방법에 관한 자세한 내용은 애플리케이션 서명을 읽어보세요.

사용법

infile.apk를 정렬하고 outfile.apk로 저장:

zipalign [-f] [-v] <alignment> infile.apk outfile.apk

existing.apk의 정렬 확인:

zipalign -c -v <alignment> existing.apk

<alignment>는 바이트 정렬 경계를 정의하는 정수입니다. 항상 4(32비트 정렬을 제공함)이어야 하며, 그렇지 않으면 사실상 아무 작업도 처리하지 않습니다.

플래그

  • -f : 기존 outfile.zip을 덮어씁니다.
  • -v : 상세 출력
  • -p : outfile.zip에서 infile.zip 내의 공유된 모든 개체 파일에 동일한 페이지 정렬을 사용해야 합니다.
  • -c : 주어진 파일의 정렬을 확인합니다.