본문 바로가기

Programming/Android

AAB(Android App Bundle) 생성 방법

 Android App Bundle 관련 문제가 발생하는 바람에 aab에 대해서 공부하게 되어 정리하기 위해 작성하게 되었습니다. 간단하게 정리하긴 했는데 자세한 내용은 Android 개발자 페이지를 보는게 가장 좋다고 생각합니다. 

 

1. aab(Android App Bundle)?

 -> 앱의 모든 컴파일된 코드 및 리소스를 포함하여 APK 생성 및 서명을 Google Play에 맡기는 게시형식

 -> aab로 생성시 선택된 디바이스에 필요한 파일만 추출하여 apks 파일 생성 가능

 -> 새로운 앱을 구글플레이에 올릴 때 반드시 aab형식으로 올려야 함

    (https://android-developers.googleblog.com/2020/11/new-android-app-bundle-and-target-api.html)

 

2. aab의 장점

 -> 다운로드 용량 최소화: aab를 사용하여 게시할 경우 사용자가 가능한 가장 작은 다운로드로 앱 설치 가능

 

3. aab 생성 및 설치 방법

 1) aab 파일 생성(Android Studio)

  -> Build -> Generate Signed Bundle or APK -> Android App Bundle 선택

 2) bundletool 설치

  -> https://github.com/google/bundletool/releases 에서 bundletool 설치

 3) aab가 설치된 디렉터리에 bundletool-all-1.8.2.jar 파일 이동

 4) aab 파일 변환

  (1) dynamic feature modules 방식으로 APKs 파일 변환

설명 - google play를 통한 배포방식과 가장 유사한 방식으로 APKs 패키지 내부에 각 디바이스에 적합한 split apk 파일이 포함되어있음
명령어 - java -jar "bundletool-all-1.8.2.jar" build-apks --connected-device --bundle="(aab)" --output="(생성할 파일명)" --ks=(key경로)/파일명 --ks-pass=pass:(암호) --ks-key-alias=key --key-pass=pass:(암호)
예시 - java -jar "bundletool-all-1.8.2.jar" build-apks --connected-device --bundle="XCSSample-release.aab" --output="certshare_demo_v7a.apks" --ks=/Users/hancomwith_mac_04/Untitled --ks-pass=pass:pw01 --ks-key-alias=key --key-pass=pass:pw01

 

  (2) universal module 방식으로 APKs 파일 변환

설명 - 단일 apk로 구성되어, 하나의 apk를 통하여 모든 디바이스에 설치 가능
- 기존의 apk 설치방식과 동일
명령어 - java -jar "bundletool-all-1.8.2.jar" build-apks --mode-universal --bundle="(aab)" --output="(생성할 파일명)" --ks=(key경로)/파일명 --ks-pass=pass:(암호) --ks-key-alias=key --key-pass=pass:(암호)
예시 - java -jar "bundletool-all-1.8.2.jar" build-apks --mode=universal --bundle="XCSSample-release.aab" --output="certshare_demo_v7a.apks" --ks=/Users/hancomwith_mac_04/Untitled --ks-pass=pass:pw01 --ks-key-alias=key --key-pass=pass:pw01

 

 5) apks 파일 디바이스에 설치

  -> java -jar "bundletool-all-1.8.2.jar" install-apks --apks="(apks)"

 

4. 참고사항

 -> universal 방식은 단일 apk 생성 방식으로 dynamic feature 방식에 비해 용량이 더 크다

 -> apk 설치시에는 정상동작하지만 aab를 사용하여 dynamic feature modules 방식으로 설치하였을 때 특정 abi에서 정상동작하지 않는 경우 universal module 방식을 사용하면 정상 동작할 수 있다