zipalign

zipalign은 보관 파일 중 압축되지 않은 모든 파일이 파일 시작 부분을 기준으로 정렬되도록 하는 ZIP 파일 정렬 도구입니다. 이렇게 하면 mmap(2) 를 통해 이러한 파일에 직접 액세스할 수 있으므로 RAM에 데이터를 복사할 필요가 없고 앱 메모리 사용량을 줄일 수 있습니다.

APK 파일을 최종 사용자에게 배포하기 전에 zipalign을 사용하여 최적화합니다. Android Gradle 플러그인(AGP)을 사용하는 Android 스튜디오를 사용하여 빌드하는 경우 자동으로 실행됩니다. 이 경우에도 zipalign을 사용하여 APK가 정렬되었는지 확인해야 하지만 정렬할 필요는 없습니다. 이 문서는 맞춤 빌드 시스템의 운영자를 위해 작성되었습니다.

주의: zipalign은 빌드 프로세스의 특정 지점에서 사용해야 합니다. 이 지점은 사용하는 앱 서명 도구에 따라 다릅니다.

  • apksigner를 사용하는 경우 APK 파일 서명 전에 zipalign을 사용해야 합니다. apksigner를 사용하여 APK에 서명하고 APK를 추가로 변경하면 서명이 무효화됩니다.
  • jarsigner를 사용하는 경우(권장하지 않음) APK 파일에 서명한 후에 zipalign을 사용해야 합니다.

정렬을 위해 zipalign은 zip Local File Header 섹션에 있는 "extra" 필드 크기를 변경합니다. 이 프로세스는 "extra" 필드의 기존 데이터를 변경할 수도 있습니다.

사용법

APK에 공유 라이브러리(.so 파일)가 포함되어 있다면 -p를 사용하여 공유 라이브러리가 mmap(2)에 적합한 4KiB 페이지 경계에 맞게 정렬되어 있는지 확인합니다. 다른 파일의 경우(즉, 정렬이 필수 정렬 인수에 의해 zipalign으로 지정된 파일) Android 스튜디오는 32비트와 64비트 시스템 모두 4바이트로 정렬합니다.

infile.apk를 정렬하고 outfile.apk로 저장하는 방법은 다음과 같습니다.

zipalign -p -f -v 4 infile.apk outfile.apk

existing.apk의 정렬을 확인하려면 다음 명령어를 사용합니다. 이 명령어는 Android 스튜디오 또는 AGP를 사용하여 빌드하는 경우 APK가 정렬되었는지 확인하는 데 사용해야 하는 명령어입니다.

zipalign -c -v 4 existing.apk

옵션

다음 표에는 사용할 수 있는 zipalign 옵션이 나와 있습니다.

옵션 설명
-c 정렬을 확인하기만 합니다(파일을 수정하지 않음).
-f 기존 출력 파일을 덮어씁니다.
-h 도구 도움말을 표시합니다.
-p 압축되지 않은 .so 파일의 페이지를 정렬합니다.
-v 상세 출력을 표시합니다.
-z Zopfli를 사용하여 다시 압축합니다.