앱을 Google Play에 게시하면 Android App Bundle을 빌드하고 업로드해야 합니다. 이렇게 하면 Google Play에서 각 사용자의 기기 설정에 최적화된 APK를 자동으로 생성하여 제공하므로 사용자는 앱을 실행하는 데 필요한 코드와 리소스만 다운로드하면 됩니다. Google Play에 게시하지 않는다면 다중 APK 게시가 유용하지만 각 APK를 직접 빌드, 서명 및 관리해야 합니다.
Google Play에서 다중 APK를 활용하기 위해 Android 애플리케이션을 개발할 때 처음부터 몇 가지 권장사항을 채택하여 불필요한 문제를 예방하고 개발 프로세스로 나아갈 수 있습니다 이 과정에서는 Google Cloud API를 통해 각 앱은 화면 크기의 다른 클래스를 다룹니다. 다중 APK 코드베이스를 아주 쉽게 유지하는 데 필요한 도구도 제공합니다.
다중 APK가 필요한지 확인
다양한 크기의 Android 기기에서 작동하는 애플리케이션을 만들 때 당연히 애플리케이션이 더 큰 기기에서 사용 가능한 모든 공간을 활용하길 원할 것입니다. 작은 화면에서 호환성이나 사용성을 저해하지 않는 것이 좋습니다. 처음에는 다중 APK 지원이 최상의 솔루션인 듯 보이지만 그렇지 않은 경우가 많습니다. 다중 APK 개발자 가이드의 단일 APK 대신 사용 섹션에는 지원 라이브러리 사용을 포함하여 단일 APK로 이를 달성하는 방법에 관한 유용한 정보가 포함되어 있습니다. 또한 다중 화면 지원 가이드를 참고할 수 있고 Android SDK를 사용하여 다운로드할 수 있는 지원 라이브러리도 있습니다. 이 라이브러리를 통해 Honeycomb 이전 기기에서 프래그먼트를 사용할 수 있어 단일 APK에서 다중 화면 지원이 훨씬 쉬워집니다.
관리 가능한 경우 애플리케이션을 단일 APK에 제한하면 여러 이점이 있습니다. 포함:
- 더욱 쉽게 게시하고 테스트할 수 있습니다.
- 코드베이스를 하나만 유지 관리하면 됩니다.
- 애플리케이션을 기기 설정 변경에 맞게 조정할 수 있습니다.
- 여러 기기에서 앱 복원을 쉽게 할 수 있습니다.
- 시장 선호도, 업그레이드로 인한 행동에 대해 걱정할 필요가 없습니다. 하나의 APK에서 어떤 APK가 어떤 기기 클래스와 함께 사용되는지
이 강의의 나머지 부분에서는 해당 주제를 연구하고 철저하게 학습한 내용을 학습한 것으로 가정합니다. 자료를 검토한 결과 다중 APK가 적합한 경로라고 애플리케이션입니다.
요구사항 차트
필요한 APK 수와 화면을 빠르게 확인할 수 있는 간단한 차트를 만들어 시작하세요. 크기 다행히 쉽고 빠르게 요구사항을 차트로 작성할 수 있습니다. 나중에 참고할 수 있습니다 다양한 화면 크기를 나타내는 셀 행으로 시작합니다. Android 플랫폼에서 사용할 수 있습니다.
작은 | 표준 | 대형 | 특대형 |
이제 차트에 색상을 지정해 각 색상이 APK를 표시하도록 합니다. 한 가지 예를 들어 보겠습니다. 각 APK를 특정 범위의 화면 크기에 적용할 수 있습니다.
작은 | 표준 | 대형 | 특대형 |
필요에 따라 두 개의 APK, 즉 '소형과 나머지' '특대형 및 다른 모든 것"이라고 합시다. 차트에 색상을 지정하면 팀 내 커뮤니케이션도 더 쉬워집니다. 이제 화면 유형이 수와 관계없이 각 APK를 '파란색', '녹색' 또는 '빨간색'으로 지칭하세요. 확인할 수 있습니다
라이브러리 프로젝트에 모든 공통 코드 및 리소스 배치
이것은 기존의 Android 애플리케이션을 수정하거나 처음부터 시작할 때든 상관없이, 코드베이스에 가장 먼저 해야 할 일이며, 가장 중요한 일입니다. 라이브러리 프로젝트에 들어가는 모든 것은 한 번만 업데이트하면 되므로(언어 현지화된 문자열과 색상 테마, 공유 코드에서 수정된 버그를 생각해 보세요) 개발 시간이 단축되고 어이없는 실수가 발생할 가능성이 줄어듭니다.
참고: 이 강의에서는 다루지 않지만 자세한 내용은 Android 라이브러리 만들기를 참고하세요.
다중 APK 지원을 사용하도록 기존 애플리케이션을 변환하는 경우 모든 현지화된 문자열 파일, 값 목록, 테마가 있는지 코드베이스를 검색합니다. APK 간에 변하지 않을 색상, 메뉴 아이콘, 레이아웃을 만들고 모든 것을 라이브러리 프로젝트에 넣을 수 있습니다 많이 변경되지 않는 코드도 라이브러리 프로젝트에 들어가야 합니다. 이러한 클래스를 확장하여 APK에서 APK로 한두 개의 메서드를 추가할 수도 있습니다.
반면에 애플리케이션을 처음부터 만드는 경우에는 코드를 최대한 많이 작성한 다음 먼저 라이브러리 프로젝트에 개별 APK를 포함할 수도 있습니다. 여기에 추가하는 것보다 장기적으로 관리하기가 훨씬 쉽습니다. 또 다른, 몇 달 후에 이 blob을 위로 이동할 수 있는지 '망가뜨리지 않고 보관함' 섹션에 표시하겠습니다
새로운 APK 프로젝트 만들기
출시할 각 APK에는 별도의 Android 프로젝트가 있어야 합니다. 손쉬운 사용 라이브러리 프로젝트와 모든 관련 APK 프로젝트를 동일한 상위 폴더 아래에 배치합니다. 또한 각 APK의 패키지 이름이 동일해야 하는 것은 아니지만 패키지 이름을 라이브러리와 공유해야 합니다. 체계에 따라 3개의 APK가 있는 경우 루트 디렉터리는 다음과 같을 수 있습니다.
alexlucas:~/code/multi-apks-root$ ls foo-blue foo-green foo-lib foo-red
프로젝트가 만들어지면 라이브러리 프로젝트를 각 APK 프로젝트의 참조로 추가하세요. 만약 라이브러리 프로젝트에서 시작 활동을 정의하고 해당 활동을 APK로 확장합니다. 살펴보겠습니다 라이브러리 프로젝트에 시작 활동을 정의해두면 모든 개별 APK가 'Universal'(범용)을 애널리틱스 초기화, 라이선스 확인 실행, 초기화 절차를 개선하는 데 도움이 됩니다.
manifest 조정
사용자가 Google Play를 통해 다중 APK를 사용하는 애플리케이션을 다운로드하는 경우 사용할 APK는 두 가지 간단한 규칙에 따라 선택됩니다.
- manifest는 특정 APK가 적합하다고 표시해야 합니다.
- 적합한 APK 중에 가장 높은 버전 번호가 우선됩니다.
앞서 설명한 다중 APK 세트를 예로 들어 각 APK가 '타겟'보다 큰 모든 화면 크기를 지원하도록 설정되었습니다. 화면 크기 개별적으로 보면 각 APK의 가능한 범위는 다음과 같습니다.
작은 | 표준 | 대형 | 특대형 |
소형 | 표준 | 대형 | 특대형 |
소형 | 표준 | 대형 | 특대형 |
그러나 '가장 높은 버전 번호'를 사용하면 버전 코드 속성을 각 APK가 빨간색 ≥ 녹색 ≥ 파란색이 되도록 하면 차트가 다음과 같이 효과적으로 축소됩니다.
작은 | 표준 | 대형 | 특대형 |
이제 빨간색 APK에는 다른 두 개에는 없는 요구사항이 있다고 가정해보겠습니다. 이 Android의 Google Play 필터 페이지 개발자 가이드에는 가능한 원인의 전체 목록이 있습니다. 예를 들어, 다음과 같이 가정하겠습니다. 전면 카메라가 필요합니다. 실제로 빨간색 APK의 전체 요점은 추가 충분한 화면 공간을 확보해야 합니다. 하지만 알고 보니 모든 특대형 기기에 전면 카메라가 있는 것은 아닙니다! 어떻게 해야 할까요?
다행히 사용자가 이러한 기기에서 Google Play를 탐색하는 경우 Google Play는 빨간색 화면에 전면 카메라가 요구사항으로 나열되어 있는 것을 확인하고 조용히 무시하고 레드와 기기가 디지털 세상에서 천생연분이 아니라고 판단했습니다. 그러면 녹색은 특대형 기기와 호환될 뿐만 아니라 사용할 수 있습니다. 사용자는 여전히 Google Play에서 앱을 다운로드할 수 있습니다. 전면 카메라에 문제가 발생했음에도 불구하고 이러한 특정 화면을 지원하는 APK는 여전히 존재했습니다. 있습니다.
별도의 '트랙'에 모든 APK를 보관하려면 올바른 버전 코드 체계를 갖추는 것이 중요합니다. 앱의 버전 코드 영역에서 Google 개발자 가이드를 참조하세요. 예제 APK 세트에서는 가능한 세 가지 중 하나만 다루고 있으므로 크기가 큰 경우 각 APK를 1000으로 구분하고 거기서부터 증분하는 것으로 충분합니다. 이 다음과 같을 수 있습니다.
파란색: 1001, 1002, 1003, 1004...
녹색: 2001, 2002, 2003, 2004...
빨간색:3001, 3002, 3003, 3004...
모두 종합하면 Android 매니페스트는 다음과 같을 것입니다. 있습니다.
파란색:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1001" android:versionName="1.0" package="com.example.foo"> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" /> ...
녹색:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="2001" android:versionName="1.0" package="com.example.foo"> <supports-screens android:smallScreens="false" android:normalScreens="false" android:largeScreens="true" android:xlargeScreens="true" /> ...
빨간색:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="3001" android:versionName="1.0" package="com.example.foo"> <supports-screens android:smallScreens="false" android:normalScreens="false" android:largeScreens="false" android:xlargeScreens="true" /> ...
기술적으로 다중 APK는 지원 화면이나 태그 또는 compatible-screens 태그입니다. Supports-screens가 일반적으로 선호됩니다. 동일한 매니페스트에서 두 태그를 모두 사용하는 것은 일반적으로 좋지 않습니다. 그것은 불필요하게 복잡해지고 오류 발생 가능성이 높아집니다. 또한 기본값(기본적으로 소형과 표준이 항상 true입니다)을 활용하는 대신 매니페스트는 명시적으로 각 화면 크기의 값을 설정합니다. 이렇게 하면 많은 문제를 방지할 수 있습니다. 예를 들어 타겟 SDK가 < 9인 매니페스트는 특대형을 자동으로 false로 설정합니다. 아직 이 크기가 존재하지 않기 때문입니다. 따라서 명시적으로 설정하는 것이 중요합니다.
출시 전 체크리스트 검토
Google Play에 업로드하기 전에 다음 항목을 다시 확인하세요. 이러한 작업은 모든 APK의 전체 체크리스트를 나타내는 것은 아닙니다. 업로드되는 애플리케이션입니다.
- 모든 APK의 패키지 이름은 동일해야 합니다.
- 모든 APK는 동일한 인증서로 서명되어야 합니다.
- APK가 지원할 모든 화면 크기를 manifest에서 true로 설정합니다. 모든 화면 크기 피하고 싶다면 false로 설정하세요.
- 매니페스트 필터에 충돌하는 정보가 있는지 다시 확인합니다. 특대형 화면의 컵케이크는 누구에게도 표시되지 않을 것입니다.)
- 각 APK의 매니페스트는 지원되는 화면, OpenGL 텍스처, 플랫폼 버전
- 하나 이상의 기기에서 각 APK를 테스트해 봅니다. 그것만 빼고 말하자면 맞춤설정 가능한 기기 에뮬레이터를 활용할 수 있습니다. 맘껏 활용하세요.
또한 출시하기 전에 컴파일된 APK를 검사하여 APK에 APK 또는 당황하지 마세요. 이 작업은 'aapt' 있습니다. Aapt(Android Asset Packaging Tool)는 Android 애플리케이션을 만들고 패키징하는 빌드 프로세스의 일부이며 Android 애플리케이션을 검사하는 데도 매우 유용한 도구입니다.
>aapt dump badging package: name='com.example.hello' versionCode='1' versionName='1.0' sdkVersion:'11' uses-permission:'android.permission.SEND_SMS' application-label:'Hello' application-icon-120:'res/drawable-ldpi/icon.png' application-icon-160:'res/drawable-mdpi/icon.png' application-icon-240:'res/drawable-hdpi/icon.png' application: label='Hello' icon='res/drawable-mdpi/icon.png' launchable-activity: name='com.example.hello.HelloActivity' label='Hello' icon='' uses-feature:'android.hardware.telephony' uses-feature:'android.hardware.touchscreen' main supports-screens: 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240'
aapt 출력을 검사할 때 지원 화면 및 호환 화면과 의도치 않은 'uses-feature'가 없는지 확인합니다. 값 할 수 있습니다. 위의 예에서 APK는 모든 기기에 표시되지 않습니다.
이유가 무엇인가요? 필수 권한 SEND_SMS를 추가하면서 android.hardware.telephony의 기능 요구사항이 암시적으로 추가되었기 때문입니다. 대부분의 특대형 기기는 텔레포니 하드웨어가 없는 태블릿이므로 Google Play에서 이러한 경우 특대형 화면 크기로 보고되고 텔레포니 하드웨어를 보유할 만큼 큰 기기가 나올 때까지 이 APK를 필터링합니다.
다행히 매니페스트:
<uses-feature android:name="android.hardware.telephony" android:required="false" />
android.hardware.touchscreen
요구사항도 암시적으로 추가됩니다. APK를 터치스크린이 아닌 TV에 표시하려면 매니페스트에 다음을 추가해야 합니다.
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
출시 전 체크리스트를 완료했다면 Google Play에 APK를 업로드하세요. Google Play를 탐색할 때 애플리케이션이 표시되는 데 약간의 시간이 걸릴 수 있지만 표시되면 마지막으로 한 번 확인합니다 확인해야 할 수도 있는 테스트 기기에 애플리케이션을 다운로드합니다. 타겟팅하는지 확인해야 합니다.
Google Play에서 다중 APK 게시에 관한 자세한 내용은 다중 APK 지원.