semtax의 개발 일지

안드로이드 universalApk 옵션과 빌드 시, AndroidManifest.xml 파일 위치 본문

개발/Android

안드로이드 universalApk 옵션과 빌드 시, AndroidManifest.xml 파일 위치

semtax 2020. 5. 22. 20:49
반응형

개요

이번 포스팅에서는 안드로이드 split, 그리고 universalApk 옵션과 그에 따른 빌드 중간 파일 위치에 대해 다뤄 보도록 하겠습니다.

(사실 회사에서 버그잡는걸로 삽질하다가 알아낸 내용입니다..)

까먹지 않게 올려봅니다.

Android gradle splits, universalApk

안드로이드에서, universalApk 옵션은 splits 블록에 포함되어 있으며, 다양한 타깃머신(arm, x86)에 대한 apk, 즉 다중 머신 빌드를 위해 존재합니다.

해당옵션을 이용해서 타깃 머신별로 빌드 파일 또는 프로젝트를 따로 만들 필요 없이 다양한 환경을 지원하는 apk를 만들 수 있습니다.

보통 아래와 같이 설정합니다.

android {
  splits {
    abi {
          // Enables building multiple APKs per ABI.
          enable true

          // By default all ABIs are included, so use reset() and include to specify that we only
          // want APKs for x86 and x86_64.

          // Resets the list of ABIs that Gradle should create APKs for to none.
          reset()

          // Specifies a list of ABIs that Gradle should create APKs for.
          include "x86", "x86_64"

          // Specifies that we do not want to also generate a universal APK that includes all ABIs.
          universalApk false
    }
  }
}

이제 해당 옵션에 따라서 빌드 과정에서 생성된 병합된 AndroidManifest.xml 파일 의 위치가 어떻게 바뀌는지 알아보도록 합시다.

병합된 Manifest 파일

안드로이드에서 APK 빌드를 진행할때, APK 파일에는 AndroidManifest.xml 파일이 하나만 포함됩니다.

그런데, 안드로이드 스튜디오 프로젝트에는 기본 소스 세트(SourceSets), 빌드 변형(BuildVariants) 및 외부 라이브러리에서 제공하는 여러 파일들이 포함될 수 있습니다.

따라서 앱을 빌드할 때 모든 manifest 파일을 APK에 패키징되는 단일 manifest 파일로 병합 됩니다.

이때, universalApk 옵션 여부에 따라서 병합된 Manifest 파일의 위치가 달라지게 됩니다.

빌드 중간 파일 위치

해당 옵션을 적용하지 않은 경우, android build tool gradle version 3.6 기준으로 아래와 같은 위치에 AndroidManifest.xml이 생성 됩니다.

app/build/intermediates/merged_manifest/<buildType>/

이때, buildType 는 debug, dev, release 와 같은 app/build.gradle 안에 있는 buildType 이름입니다.

하지만, universalApk 옵션을 적용한 경우에는 아래위치에 AndroidManifest.xml 이 생성됩니다.

app/build/intermediates/merged_manifest/<buildType>/universal

출처

  1. https://developer.android.com/studio/build/configure-apk-splits
  2. https://developer.android.com/studio/build/manifest-merge
반응형
Comments