Build the new, modular Android App Bundle (Google I/O ’18)

피에르 레 세네 : 안녕하세요 저는 Pierre이고 Google Play의 소프트웨어 엔지니어입니다

안토니 모리스 : 안녕하세요 저는 Google Play의 소프트웨어 엔지니어 인 Anthony입니다 IBRAHIM KARAHAN : 저는 Google의 파트너 개발자 옹호자 인 Ibo입니다 피에르 레 세네 : 음, 여러분 중 일부는 이전 세션에서 온 것일 수도 있습니다 Google Play에 대한 개요를 제공 한 원형 극장에서 동적 게재 및 새로운 게시 형식 안드로이드 앱 번들 (Android App Bundle)과 어떻게 이것은 애플 리케이션을 작게 만들 것입니다

이 세션에서는 기술 심층적 인 다이빙을 할 것입니다 이 새로운 출판 형식 우리는 그것이 무엇을 포함하는지, 그것을 어떻게 만드는지, 그것을 게시하는 방법뿐만 아니라 그것을 테스트 할 수있는 다른 방법을 제공합니다 Google Play의 생성 및 게재 방법에 대해서도 설명합니다 APK를 최종 사용자에게 제공합니다

이제 Android App 번들의 형식부터 시작해 보겠습니다 Android App Bundle은 zip 아카이브입니다 이미 익숙한 파일이 들어 있습니다 APK에서는 텍스트 파일, 리소스, 자산, 네이티브 라이브러리 앱 번들과 APK가 두 가지 목적을 지닌 두 가지 고유 한 형식입니다

앱 번들은 순전히 출판 형식입니다 그래서 그것은 장치에 직접 설치 될 수 없습니다 또한 일부 메타 데이터 파일 최종 APK에서 끝나지 않는 도구가 올바른 방식으로 APK를 구축하는 데 도움이됩니다 마지막으로 앱 번들의 형식이 APK보다 엄격합니다 우리는 도구가 완전히 묶음에있는 파일 이해하기 유효한 APK를 생성 할 수 있습니다

이제 하나의 앱 번들을 열고 내부 내용을 살펴 보겠습니다 그래서 그 묶음을 열면, 이것은 당신이 기대해야하는 것입니다 그래서 이것은 많은 사람들에게 익숙해 져야합니다 바퀴를 다시 발명하는 대신에, 우리는 APK의 일부 구조를 재사용하기로 결정했습니다 우리가 파일을 더 잘 설명하는 데 필요한 것을 수정해야합니다

그래서 우리는 그들을 자유롭게 통과 할 것입니다 시작하려면 앱 번들에 다중 모듈 지원, 전에 들었을 수도 있습니다 그리고 곧 모듈에 대해 더 자세히 알려 드리겠습니다 지금 당장은 최상위 디렉토리 앱 번들에는 모듈의 이름이 있습니다 모듈에는 항상 base라는 모듈이 있습니다

번들에 이것이 우리가 여기서 바라 보는 것입니다 Android 매니페스트가 계속 표시됩니다 새 프로젝트는 실제 XML 파일입니다 APK에서는 바이너리 형식을 볼 수 있습니다

앱 번들에서 프로토콜 버퍼로 컴파일됩니다 형식을 사용하면보다 쉽게 ​​변환 할 수 있습니다 APK와 달리 dex 파일은 dex라는 디렉토리 아래에 있습니다 Android 리소스, 애셋, 반면에 부정적인 도서관은, APK와 동일한 디렉토리 구조를 따르십시오 유일한 차이점은 XML 리소스입니다

이들은 또한 프로토콜 버퍼 포맷으로 컴파일되며, 바이너리 형식 대신 resourcespb 파일은 리소스 테이블입니다 이것은 파일 resourcesarac과 같습니다

APK에서 보았을 수도 있습니다 앱에있는 리소스를 설명합니다 및 타겟팅pb 확장자는 프로토콜 버퍼 형식입니다

다시 말하면, 이전에 도구를 변형하기가 더 쉬워졌습니다 APK에서 이진 형식으로 변환됩니다 assetspb 및 nativepb 파일 자산에 대한 자원 테이블과 동일합니다

및 네이티브 라이브러리 그래서 자산이나 네이티브 라이브러리가있는 경우에만 존재합니다 또한 파일의 대상 지정을 설명합니다 각각의 디렉토리에 있습니다 앞에서 언급 한 것처럼 리소스 테이블, 자산 테이블 및 기본 라이브러리 테이블 앱 파일 타겟팅에 대해 설명합니다

그래서 나는 그것이 의미하는 바를 설명하겠습니다 파일 타겟팅은 설명입니다 주어진 파일을 대상으로하는 장치 또는 사용자 유형 Google Play 동적 게재의 핵심 개념입니다 파일 타겟팅을 이해 한 이후 은 주어진 사용자에게 필요한 파일 만 제공 할 수 있음을 의미합니다 그리고 이것이 우리가 앱을 더 작게 만들 수있게 해줍니다

앱 번들은 APK에 존재하는 타겟팅을 다시 사용합니다 당신은 이미 이것에 익숙합니다 그래서 나는 빨리 가서 빨리 달릴 것입니다 리소스의 경우, 예를 들어, 리소스의 디렉토리 이름에 HDPI HDPI 장치를 대상으로 지정하거나 프랑스 사용자를 대상으로 fr을 추가하십시오 네이티브 라이브러리의 경우 동일합니다

디렉토리에 아키텍처를 추가합니다 여기서도 새로운 것은 없습니다 앱 번들도 같은 방식으로 작동합니다 이제 우리는 당신 중 일부를 위해, 애셋은 앱의 큰 부분을 차지합니다 따라서 앱 번들은 자산 타겟팅을 지원합니다

언어 타겟팅부터 시작합니다 곧 텍스처 압축 형식을 추가 할 예정입니다 및 그래픽 API 버전 따라서 우리는 관련 자산 만 사용자에게 제공 할 수 있습니다 앱과 게임의 크기를 줄이십시오

이것이 대상 자산 디렉토리를 만드는 방법입니다 해시 기호를 사용하는 동안 타겟팅하는 저작물 디렉토리를 식별하려면 다음에 정의하는 키가옵니다 우리가 목표로 삼고있는 차원들 – 예를 들어, lang은 언어를, tcf는 텍스처 압축 포맷을, 등등 그런 다음 키와 관련된 값이옵니다 음, 몇 가지 예를 살펴 보겠습니다

애셋이 포함 된 디렉토리의 예는 다음과 같습니다 프랑스어 사용자 이것은 자산 디렉토리의 또 다른 예이며, 여기서 텍스쳐 압축 포맷에 기초하여 타겟 화되고, etc1 형식을 지원하는 장치를 타겟팅합니다 이제 앱 번들 형식에 대해 더 많이 알고 있으므로 나는 Anthony에게 그것을 넘겨 줄 것이다 사용자에게 소규모 앱을 제공하는 데이 방법을 사용하는 방법을 알려줍니다 ANTHONY MORRIS : 고마워, 피에르

안녕, 모두들 피에르가 너에게 설명하고 있었어 우리가 어떻게 형식을 바꾸는 지 Play 스토어에 게시합니다 그리고 지금 나는 너에게 설명 할거야 사용자에게 제공하는 서비스의 형식을 어떻게 변경하는지, 어떻게 우리가 이것을 제공하는 데에만 사용하는지 각 사용자에게 필요한 것

이제 분할 된 APK부터 시작하겠습니다 그래서 Android Lollipop에서 Android에 기능을 추가했습니다 플랫폼으로 분할 APK라고합니다 Split APK를 사용하면 여러 APK를 장치에 설치할 수 있습니다 마치 하나의 앱에 속한 것처럼 행동합니다

이 분할 APK를 설치할 수 있습니다 다른 장치에서 다른 조합으로, 한 번에 하나씩 설치하거나 한 장씩 설치할 수 있습니다 이제 분할 된 APK는 일반 APK와 동일한 형식을 갖습니다 여기에는 Java 코드 색인 파일, 원시 코드, 자원, 및 자산 디렉토리 일단 APK가 분리되면, 단일 APK에있는 것처럼 액세스 할 수 있습니다

또한, 각 애플리케이션 패키지 이름과 버전이 같다 다른 모든 것들과 코드 장치에 설치되어 있어야합니다 동일한 키로 서명해야합니다 자 이제 Android App을 어떻게 사용할 수 있는지 살펴 보겠습니다 우리가 장치에 제공하는 분할 APK를 묶어서 생성하십시오

먼저 앱 번들을 살펴 보겠습니다 모든 장치에 공통되는 모든 것을 찾아야합니다 기본 APK에 넣습니다 그래서 여기에는 Android 매니페스트 파일이 포함됩니다 예를 들어, dex 파일 등이 있습니다

그런 다음 다른 APK를 생성합니다 각 화면 밀도에 대해 각 분할에는 모든 내구재가 포함됩니다 Android 프레임 워크에 의해 선택되었을 것입니다 그 밀도를 가진 장치에서 다른 APK를 생성 할 수도 있습니다

네이티브 라이브러리를 포함하는 각 네이티브 아키텍처 용 그 아키텍처의 그리고 우리는 다른 분할을 생성 할 수 있습니다 앱에서 지원하는 각 언어에 대해 각 언어의 문자열을 다른 APK에 저장합니다 자, 함께, 우리는 이러한 분할 구성을 호출합니다 분할 또는 구성 분할

이제 기기에 앱을 제공하려고 할 때, 우리는이 분할의 서브 세트를 제공하기 만하면됩니다 모든 기기에 모든 것을 제공하는 대신 그래서 삼성 갤럭시 J5가 있다고 해봅시다 기본 APK와 xhdpi 밀도를 설치합니다 split, ARM 아키텍처 분할 및 영어 왜냐하면 나는 영어 만 할 뿐이니까 하지만 그보다 조금 더 까다 롭습니다

Pierre는 프랑스어와 영어를 모두 구사하며, 그는 자신의 장치에서 두 가지 언어를 모두 지정합니다 설정 그래서 그의 장치에서 Pixel 2 XL과 올바른 밀도와 아키텍처 우리는 영어와 불어를 모두 제공합니다 자기 장치로 나눠 피에르가 브라질로 이주하여 포르투갈 인

그런 다음 포르투갈어를 장치에 추가 할 수 있습니다 이제 그가이 작업을 수행 할 때 Play 스토어 이를 인식하고 포르투갈어를 다운로드하려고 시도합니다 기기에서 스플릿을 사용하는 모든 앱에 대한 언어 분할 그리고 그 당시 장치가 온라인 상태가 아닌 경우, 그러면 우리는 그 언어를 다운로드 할 것입니다 다음 기회에 나눕니다

그리하여 이것이 config split이 작동하는 방법입니다 그러나 내가 처음에 언급했듯이, Lollipop 이상에서만 지원됩니다 이는 현재 사용자의 약 85 %를 차지하지만 대부분의 사용자는 여전히 L 장치를 대상으로합니다 이러한 기기의 경우 앱 번들 여전히 크기 절약을 달성 할 수 있습니다 특정 밀도를 포함하는 독립 실행 형 APK 생성 및 아키텍처

그래서 우리가 L 플러스에서 할 것처럼 분할을 생성하는 대신, 우리는 독립형 APK 매트릭스를 생성 할 것입니다 우리는 이것을 언어로 확장하는 것을 간략히 고려했다 쪼개지도 그러나 우리는 합계의 약간을했다 손에 조금 닿았습니다

하지만 지금은 Pre L 기기의 경우 각 독립 실행 형 APK에 모든 언어를 포함합니다 이제 앱을 제공하려고 할 때 장치에 가장 적합한 단일 APK를 선택하십시오 Galaxy Nexus라는 첫 번째 Android 기기가 있다면 우리는 hdpi 팔 독립형 APK를 제공 할 것입니다 이것을 인식 할 수 있습니다 당신이 한 일과 비슷하다

과거에는 멀티 APK로 하지만이 모든 것을 하나로합시다 이 그림은 이렇게 보입니다 실제로는 방법에 대한 세부 사항을 실제로 걱정하지 않아도됩니다 이 모든 분할 APK가 생성됩니다 또는 독립 실행 형 APK가 생성됩니다

하나의 앱 번들 만 업로드하면됩니다 Play는 오른쪽 분할을 생성하고 각 장치에 적합한 역할을합니다 그리고 우리가 지금까지 토론 한 차원들 시작일뿐입니다 Pierre는 앱 번들을 사용하여 애셋을 타겟팅하는 방법에 대해 설명했습니다 그래픽 API를 사용하면 곧 설정 분할을 생성합니다 그걸 바탕으로 우리는 또한 설정 생성을 시작합니다

새로운 플랫폼 기능을 활용하기 위해 분할합니다 그리고 우리는 압축되지 않은 네이티브 라이브러리 m-class 장치에서 이제 이보에게 가져 가라고 부탁합니다 이 앱을 사용하여 앱 크기를 얼마나 줄일 수 있는지 살펴 봅니다 묶음

이브라힘 카라간 : 고마워요, 안소니 이제 Play에서 APK를 기기로 분할하는 방법을 알았습니다 우리는 앱 번들로 크기 절약에 대해 이야기 할 것입니다 평균적으로 앱 번들로 게시 된 앱 20 % 더 작아지고 매회 20 % 절약됩니다 응용 프로그램이 다운로드되거나 업그레이드됩니다

이제 우리가이 숫자에 어떻게 도달했는지 살펴 보겠습니다 Play 스토어의 모든 애플리케이션을 분석했습니다 다운로드 횟수는 1 백만 회를 넘습니다 그리고 우리는 문자열에 대해 언어 분리를 사용하여 크기의 95 % 이상을 절약 할 수 있습니다 이미지의 경우 45 %입니다

또한 네이티브 라이브러리의 경우 크기의 20 %를 절약 할 수 있습니다 즉, 모든 앱이 앱 번들로 이동하는 경우, 우리는 하루에 약 10 페타 바이트의 데이터를 저장합니다 앱 다운로드 및 업데이트에서 가져옵니다 그것은 1000 만 기가 바이트, 또는 3 억 뮤직 비디오입니다 YouTube에서

그리고 그 위에 사용자는 추가 300 메가 바이트를 볼 수있었습니다 더 많은 사진, 더 많은 앱 또는 더 많은 음악을위한 디스크 공간 확보 자신의 장치에 이제 실제 크기 절약을 살펴 보겠습니다 이는 초기 액세스 프로그램 및 파트너 중 일부입니다 그래서 우리는 Twitter로 시작할 것입니다

Twitter – 이미 다중 APK로 게시 중입니다 전에 아키텍처가 분할되었습니다 그러나, 그들의 응용 프로그램은 번역되었습니다 많은 언어로, 그리고 그것은 여러 화면을 지원합니다 밀도 그들은 여전히 ​​출판비로 많은 비용을 절감합니다

앱 번들과 함께 크기가 20 % 증가합니다 또한 더 이상 다중 APK를 제공 할 필요가 없습니다 다음은 이전에 멀티 APK를 사용하지 않는 TextPlus입니다 앱 번들을 사용하면 앱 번들을 사용하여 모든 크기에서 26 %의 크기 절감 Jaumo의 앱은 원래 크기의 절반이며, 이것은 그들이 [무관심] 한 대형 도서관을 가지고 있기 때문입니다 또한 단일 APK에서 여러 아키텍처를 지원했습니다

이제 앱 번들을 만드는 방법을 살펴 보겠습니다 지금 저장을 시작할 수 있습니다 최신 안드로이드 스튜디오 32 카나리아 Android 앱 번들을 완벽하게 지원합니다 이제 우리는 빌드 할 새로운 옵션을 보게 될 것입니다

빌드 메뉴의 번들 [부적절한] 모든 앱 번들 할당은 쉽습니다 우리는 앱 모듈, 제품 맛을 선택하기 만합니다 빌드 유형 및 Android Studio 당신을위한 앱 번들을 만들고, 서명하고, 게시 할 준비가되었습니다 커맨드 라인을 선호하는 사람들을 위해 또는 자동화 된 빌드 시스템과 통합하려는 경우, 새로운 Gradle Android 플러그인은 새로운 작업 세트를 제공합니다

Android 앱 번들을 만들 수 있습니다 기억하십시오, 이것은 당신이 사용하는 것입니다 – 조립 작업 명령 줄에서 APK를 만듭니다 이제 앱 번들의 경우 번들 명령으로 전환하십시오 어셈블 링 태스크와 마찬가지로, 번들 태스크 또한 특정 향미료를 만들 수 있습니다 귀하의 응용 프로그램의

일단 번들 작업이 끝나면 출력 폴더에 앱 번들을 만들려고하는데, 맛과 빌드 유형이 선택되었습니다 빌드 된 아키텍트는 bundleiad입니다 번들 작업은 서명 구성과 호환됩니다 귀하의 build

gradle 파일 그리고 하나의 gradle 작업으로, 당신은 서명 된 앱 번들을 생성 할 수 있습니다 출판 준비 또한 앱 번들을 사용하면 Play가 자동으로 애플리케이션을 아키텍처, 화면 밀도, 및 언어 스플릿을 기본적으로 사용합니다 당신 구성을 할 필요가 없습니다

그러나 우리는 또한 개발자 스플릿을 완전히 제어 할 수 있습니다 어떤 이유로 든 분할을 사용하지 않으려는 경우 모든 차원에서 새로 도입 된 기능을 사용하여 번들 블록은 여기에 이제 Pierre는 앱을 게시하는 방법에 대해 이야기 할 것입니다 번들을 재생 콘솔에 추가합니다 PIERRE LECESNE : 감사합니다

좋아요, 그래서 당신은 앱 번들을 만들었습니다 이제 어떻게 게시 할 수 있는지 살펴 보겠습니다 Google Play Console에 있습니다 먼저 Google Play에서 앱 서명에 등록해야합니다 기억하는 사람들을 위해이 프로그램을 시작했습니다

작년에 Google I / O에서 등록 할 때 공개 키를 안전하게 전송합니다 Google Play에 그런 다음이 릴리스 키를 사용하여 Play에 서명합니다 사용자를 대신하여 생성 된 APK 사용자에게 보내기 전에 그러나 APK를 계속 업로드하는 경우 제작 탭 트랙에서 테스트 트랙에서 앱 번들을 테스트하고, Play는 업로드 된 APK를 사임하지 않습니다 그리고 우리는 당신이 자신감을 가질 수 있도록 이것을했습니다 먼저 작은 청중에게 앱 번들을 시험해보고, 현재 프로덕션 사용자에게 영향을주지 않습니다

등록한 후에는 릴리스를 관리하고, APK에서했던 것처럼 새 릴리스 만들기 – 앱 번들을 현재 같은 위치에 드롭합니다 APK를 삭제하고 업로드를 기다립니다 업로드되면 출시를 검토하고 출시를 해제 할 수 있습니다 그게 전부 야 그리고 나는 충분히 강조 할 수 없다

더 이상 멀티 APK를 처리 할 필요가 없습니다 Play Console이 백그라운드에서 생성했습니다 지원되는 모든 APK를 제공합니다 이제 앱 번들을 업로드했습니다 그리고 플레이는 너를 위해 모든 힘든 일을 해냈다

큰 그러나 개요를 가질 수 있으면 좋지 않을까요? Play에서 무엇을 생성 했습니까? 이제 Play Console에서 새로운 도구를 만들었습니다 번들 탐색기라고합니다 번들 탐색기를 사용하면 업로드 된 번들을 탐색 할 수 있습니다 보세요

첫 번째 화면에서 오른쪽 상단 모서리에 번들 게시로 얻을 수있는 크기 절감 효과 이제 앱의 1/4 이상을 저장했습니다 물론 이것은 장치마다 다릅니다 그래서 우리는 널리 사용되는 장치 구성을 사용하여 이것을 계산했습니다 또한 장치 구성 목록 아래에 있습니다

및 해당 장치에 대한 APK 서비스의 전체 크기입니다 몇 가지 기기를 클릭하고 어느 기기를 볼 수 있습니까? 기기는 각 버켓에 있습니다 지원되는 모든 장치를 이름으로 검색 할 수도 있습니다 생성 된 APK 집합을 다운로드하려면 특정 장치에 게재되었습니다 이것은 매우 도움이 될 것입니다

그 특정 장치에 대한 버그 보고서를 얻고, 그리고 사용자가 얻은 것을 정확히 얻고 싶습니다 APK가 제공되는 서비스 따라서 이름을 검색하고 다운로드를 클릭 한 다음, Play에서 제공 한 APK 세트를 받게됩니다 물론, 우리는 여러분 모두를 잊지 않았습니다 누가 우리의 출판 API를 사용하는지 앱 번들 업로드는 오늘 API를 사용하여 가능합니다

모든 문서를 찾을 수 있습니다 developersgooglecom/android 게시자 그리고 이제 앤서니에게 넘기십시오 ANTHONY MORRIS : 고마워, 피에르

이제 우리는 빌드하고 게시하는 방법을 배웠습니다 Android 앱 번들 그러나 우리가 배포판을 완성하기 전에, 우리는 여전히 테스트의 라운드를하고 싶습니다 그러나 앱 번들 자체는 설치할 수 없습니다 그럼 어떻게 테스트합니까? 첫째, 개발 과정에서 앱에서 빌드 된 APK를 설치할 수 있습니다

Android Studio에서 직접 다운로드 할 수 있습니다 따라서 여기서 아무 것도 할 필요가 없습니다 그러나 품질 관리 팀의 경우 항상 그렇지는 않습니다 Android Studio에서 소스 코드에 액세스 할 수 있습니다 따라서 세 개발자의 이야기를 통해 이야기하겠습니다

앨리스, 밥, 클레어 QA로 앱 번들을 테스트하는 방법 항목 앨리스부터 시작합시다 Alice는 새로 출시 된 내부 테스트를 사용합니다 재생 콘솔에서 내부 트랙은 알파 베타 트랙과 유사하지만, 이미 익숙 할 수도 있습니다 그러나 지연이 거의 없다는 점이 다릅니다

번들 업로드와 업데이트 사이 테스터 장치에서 사용할 수 있습니다 품질 보증 테스트를위한 신속한 처리 Play Console (앨리스)을 거치며 품질 보증팀이 받게 될 신뢰감이 있습니다 자신의 장치에서 byte와 byte는 무엇과 같은가? 최종 사용자는 릴리스를 프로덕션으로 푸시하면 얻을 수 있습니다 앨리스가 어떻게 이것을 설정하는지 보도록하겠습니다

정말 간단합니다 그래서 Alice는 최대 100 명의 QA 테스터의 이메일리스트를 생성합니다 내부 테스트 트랙에 적합합니다 그녀의 QA 테스터가 업데이트 링크를 따릅니다 업로드 된 번들을 받게됩니다

내부 테스트 트랙으로 그게 전부 야 그러나 모든 사용자가 Play Console에 액세스 할 수있는 것은 아닙니다 귀하의 품질 보증주기 동안 피에르가 밥의 이야기를 들어 봅시다 피에르 레 세네 : 사실, 밥은 접근 할 수 없습니다

Play Console에 연결합니다 그는 자신의 컴퓨터에서 로컬로 테스트하는 것을 선호합니다 아무것도 업로드하기 전에,하지만 그는 여전히 사용자가 얻을 수있는 것을 테스트하려고합니다 어떻게 그 일을합니까? 음, 번들에서 APK를 생성하려면, Play는 Bundletool이라는 새로운 도구를 사용합니다 따라서 Bob이 로컬에서 빌드를 재생하려면, 그는 단순히 Bundletool을 다운로드하고 몇 가지 간단한 명령

Bundletool에는 Build APKs라는 명령이 있습니다 Android 앱 번들을 사용하여 우리가 APK 세트 아카이브라고 부르는 것 APK 세트에는 APK 모음이 들어 있습니다 장치에 설치할 준비가되었습니다 APK 설치라는 또 다른 명령 해당 APK 세트 아카이브를 가져 와서 APK를 추출하고, 해당 장치에 설치하십시오

실제 커맨드 라인 작업을 보도록하겠습니다 그래서 여기에 명령 [? 최근?] Bob에 의해 build-apks 호출, 앱 번들 전달, APK가 만들어지기를 원하는 위치를 말합니다 그리고 깃발 연결 장치를 통과시킴으로써, Bundletool은 현재 기기 전용 APK를 구축합니다 자신의 컴퓨터에 연결되어 있습니다 그리고 Bob이 APK를 생성하려고한다면, 말하자면 팀원이 아닌 다른 사람 손에 물리적 장치, 그것은 여전히 ​​수 있습니다

사양이 포함 된 파일을 제공하십시오 장치를 JSON 형식으로 그리고 당신은 여기서 그 파일의 압축을 볼 수 있습니다 이 장치가 지원하는 API에 대한 정보를 제공하며, 지원되는 언어, 화면 밀도 및 APK 버전 Bundletool도 이러한 장치 사양 파일을 생성합니다 따라서 온라인에서 장치 사양을 찾을 필요는 없습니다

또는 직접 작성하지 않아도됩니다 이 명령을 실행하면됩니다 이 파일을 생성하십시오 또한 Bob은이 APK를 설치하려고하기 때문에 장치에서 APK는 개인 키로 서명해야합니다 그래서 그는 경로를 키 스토어에 전달합니다

APK 세트에 포함 된 모든 APK 그러면 서명되어 Bob의 장치에 직접 설치할 수 있습니다 다음은 APK 설치 명령의 호출입니다 APK 세트에서 APK를 추출합니다 연결된 장치에 직접 설치합니다 쉬운

그래서 Bob과 그의 지역 테스트였습니다 이제 Ibo가 클레어의 이야기를 들려 줄 것입니다 이브라힘 카라한 : 클레어가 일하고있다 중간 규모 회사의 경우 그들의 응용 프로그램을 채우기 위해 지속적인 통합 도구를 설정하십시오 매일 QA 팀은 야간에 응용 프로그램 빌드, 여러 장치에 설치, 응용 프로그램이 올바르게 작동하는지 테스트합니다

클레어는 QA 팀을 돕고 싶어합니다 그녀는 Bundletool을 다시 사용합니다 CI에 APK 세트를 생성합니다 그녀는 다음과 같은 명령을 사용합니다 Bob은 이전에 사용했습니다

그러나 이번에는 장치 사양 플래그를 생략하고, APK 세트를 생성합니다 APK 세트에는 가능한 모든 기기의 APK입니다 이제 QA 팀이 CI에서 설정 한 APK 만 가져옵니다 그들은 장치를 연결하려고합니다 install-apks 명령을 실행하십시오

Bundletool이 장치 구성을 읽습니다 첨부 된 기기에서 APK 세트의이 구성과 일치하는 APK, 장치에 설치하십시오 Play와 동일한 선택입니다 특정 기기에 대해 APK를 게재 할 때 발생합니다 Bundletool이 할 수있는 한 가지 더 범용 플래그를 전달하여 범용 APK를 생성하는 것입니다

범용 APK는 파일을 포함하는 단일 APK입니다 모든 장치의 모든 파일 따라서 모든 장치에 설치할 수 있습니다 글쎄, 그건 정말 대변하지 않아 사용자가 언제 받게 될지 Play 스토어에서 애플리케이션을 설치합니다 그러나 이는 APK를 사용자에게 전달하는 편리한 방법입니다

사용자가 어떤 장치를 실행 중인지 모를 때 Bundletool은 Android App Bundle을 만드는 데 사용되는 도구이기도합니다 Gradle은 장면 뒤에서 그것을 사용합니다 우리는 다른 사람들과 함께 일할 것입니다 체인, 툴체인 제작, 빌드 툴 통합 Android 앱 번들을 만들 수 있습니다 귀하가 사용하고있는 툴체인의 그리고 마지막으로, 우리는 어떻게 Google이 제공 한 APK를 생성합니다

귀하의 사용자에게 Bundletool을 오픈 소싱하는 이유는 무엇입니까? 오늘 가서 githubcom/google/bundletool을 이용하십시오 실행 파일 또는 [? 빌드?]에서 그것 출처 이제 Pierre는 다른 방법에 대해 이야기 할 것입니다 응용 프로그램을 더 작게 만들 수 있습니다

PIERRE LECESNE : 감사합니다 Google Play 동적 전송을 사용하면 우리는 헤어지는 새로운 방법을 도입하고 있습니다 앱을 별도의 기능으로 통합하여 각 사용자마다 필요합니다 레시피 앱이 있다고 가정하고 초기 다운로드를 작게 유지하려고합니다 모든 사용자가 좋아하는 동안 레시피 검색, 작은 분량 만 선택 실제로 새로운 레시피를 추가 할 수 있습니다

그리고이 기능이 앱의 중요한 공간 당신이 할 수있는 일은 그 기능을 자체 모듈로 분해하는 것입니다 필요한 때에 만 봉사하십시오 여기서 사용자를 찾는 방법을 볼 수 있습니다 앱을 엽니 다

그래서 사용자가 레서피를 추가하기를 원할 때, 그는 바닥에 작은 플러스를 클릭한다 그리고 백그라운드에서 볼 수 있습니다 모듈이 다운로드되어 설치됩니다 몇 초 후에 모듈을 사용할 수 있습니다 앱의 어느 부분에서 별도의 기능으로 탈출 하시겠습니까? 사용자 중 일부만이 기능을 사용하는 경우, 좋은 후보가 될 수 있습니다

특히 해당 기능이 앱에서 상당한 공간을 차지하는 경우 마지막으로, 사용자가 몇 초 동안 기다릴 수 있는지 고려하십시오 기능을 사용하기 전에 생성 할 기능을 결정한 후에는 이것이 앱 번들에서와 같이 보일 것입니다 기본 디렉토리 이외에도, 이제 별도의 디렉토리가 있습니다 앱의 각 모듈에 대해 이 디렉토리의 형식은 정확하게 앞에서 다룬 기본 형식과 동일합니다 Play에서 재생할 APK입니다

각 모듈에 대해 분할 세트를 생성합니다 기능 분리 및 구성으로 구성 해당 모듈을 분할합니다 Anthony는 앞에서 언급했듯이 APKS가 분리되어 소개되었습니다 Android Lollipop을 사용하여 3L 기기를 지원하고, 거절 할 모듈을 표시 할 수 있습니다 Bundletool은 지정된 APK를 생성합니다

모듈이 함께 병합되었습니다 이제 동적 기능의 작동 방식에 대해 살펴 보았습니다 내가 너를 이보에게 넘겨 주자 너는 너를 보여 줄 것이다 그것들을 만드는 법

IBRAHIM KARAHAN : 고마워, 피에르 동적 모듈을 만들려면 필요한 작업 만 수행하면됩니다 안드로이드 스튜디오 32 카나리아 다운로드 동적 기능 마법사를 사용하십시오 파일 메뉴의 새 모듈을 클릭하고, 동적 모듈을 선택하십시오

모듈 이름을 입력하면 Android Studio가 실행됩니다 새로운 동적 모듈을 만들 것입니다 수동으로 동일한 작업을 수행 할 수도 있습니다 manifest 및 buildgradle 파일을 편집하십시오

새 모듈의 매니페스트부터 시작할 것입니다 첫 번째 단계는이 모듈을 선언하는 것입니다 앱의 새로운 APK로 설정합니다 이렇게하려면 split 속성을 추가합니다 매니페스트 태그에 이름을 지정합니다

이 예제에서는 vrviewer입니다 다음 단계는 모듈 태그를 추가하는 것입니다 모듈을 선언하려고하면 모듈에 제목을 붙이십시오 이 태그는 Play 스토어에서 모듈을 식별하는 데 사용됩니다 귀하의 응용 프로그램의

그런 다음이 모듈을 주문형 모듈로 선언합니다 onDemand 특성을 추가합니다 즉,이 모듈은 사용자의 기기로 전달됩니다 앱이 Play 스토어에 앱을 요청하면 설치시 전달하는 대신 물론, 주문형 모듈은 L plus 장치에서 지원됩니다 따라서 3L 장치에서이 모듈을 제공하기로 결정한 경우, 융합 태그를 추가 할 것입니다

포함하도록 Play 스토어에 지시 이 모듈은 설치시 기본 모듈 옆에 있으며, 3L 기기 또는 범용 APK로 전송할 때 이제 buildgradle 파일을 살펴보십시오 동적 모듈부터 시작하겠습니다 첫 번째로 지금은 새로운 플러그인을 사용하고 있습니다 com

androiddynamic-feature 두 번째로 기본 모듈을 추가합니다 이 모듈에 대한 종속성으로 기본 모듈에 포함 된 기능에 액세스 할 수 있습니다 베이스의 build

gradle 파일에 필요한 유일한 변경 사항 모듈은 동적 피처 목록을 추가하는 것입니다 모든 동적 모듈 이름을이 목록에 넣으십시오 이것은 gradle이 리소스를 저장하도록 지시하는 것입니다 동적 모듈에서 사용할 수있는 기본 모듈 이제 Anthony는 어떻게 이러한 모듈을 사용할 수 있는지 보여줄 것입니다 새로운 Play Core 라이브러리로 ANTHONY MORRIS : 고마워, 아이보

그럼 어떻게 가는지 살펴 보겠습니다 온 디맨드 모듈의 설치 요청시기 당신은 그들이 설치되기를 원한다 따라서 Play 스토어와 상호 작용하려면 분할 설치 API를 도입했습니다 Play Core Library라는 새로운 라이브러리의 일부로 이제 Play Core 라이브러리는 Java 클라이언트 라이브러리입니다 장치에서 IPC를 사용하기 위해 Play와 통신합니다

그런 다음 Play 스토어에서 통신합니다 이 주문형 모듈을 Play의 서버에서 다운로드하여 당신은 그들을 요청합니다 약간의 코드를 살펴 보겠습니다 API는 동일한 작업 프레임 워크를 사용하여 구성됩니다 Google Play에서 익숙 할 것입니다

서비스 API 및 FireBase API 분할의 설치는 호출 된 클래스에 의해 조정됩니다 splitInstallManager 모든 모델로 요청을 구성합니다 다운로드하고 싶은 파일 재생을 시작하기 위해 startInstall을 호출합니다

요청한 모듈에 필요한 분할을 다운로드하십시오 API를 사용하면 수신 할 수도 있습니다 다운로드 및 설치 프로세스 전반에 걸쳐 업데이트합니다 진행 상황을 표시하고 다운로드 할 때 사용할 수 있습니다 설치 진행 상황을 사용자에게 알려주고, 온 디맨드 기능을 다운로드하기를 기다리고 있습니다

피에르 비디오에서 이걸 봤어 모듈의 주소를 다운로드 할 때 나타났습니다 대규모 모듈의 경우 사용자 확인을 받아야합니다 분할 설치 API로 다운로드하기 전에 앱이 요청할 때마다이 작업을 수행해야합니다 10 메가 바이트 이상의 온 디맨드 모듈 다운로드받을 수 있습니다

그러나 대체 옵션이 있습니다 이러한 모듈을 설치하는 데 필요하지 않은 경우 즉각적인 사용을 위해 즉각적으로 사용할 수 있으며 이것을 지연이라고합니다 설치 API 이 간단한 한 줄을 사용하여 지연된 설치를 요청하는 경우 모듈의 사용자가 편리한 시간에 다운로드 할 수 있습니다 일반적으로 사용자가 장치를 사용하고 Wi-Fi에서 충전하는 방법에 대해 설명합니다

이 때문에 우리는 더 큰 모듈을 설치할 수 있습니다 API에 의해, 사용자 확인을 요구하지 않고, 최대 100 메가 바이트 따라서 이것은 매우 사용자 친화적 인 방법입니다 앱의 대형 주문형 모듈을 다운로드 할 수 있습니다 분할 설치 API를 사용하여 귀하의 주문형 모듈

따라서 현재 어떤 모듈이 설치되어 있는지 확인할 수 있습니다 그리고 사용자가 더 이상 해당 모듈을 필요로하지 않는 경우, 모듈 제거를 요청할 수 있습니다 사용자에게 귀중한 디스크 공간 확보 기기에서 앱의 공간을 줄일 수 있습니다 이제 주문형 모듈을 설치하고 설치할 때 N Plus 기기에서는 앱을 다시 시작할 필요가 없습니다 따라서 코드는 즉시 사용할 수 있습니다

설치 완료 후 새로운 자원 및 자산 컨텍스트 개체를 새로 고치면 사용할 수 있습니다 그러나 Android L / M에서는 스플릿을 설치합니다 앱을 다시 시작해야합니다 올바르게 설치하려고합니다 하지만이를 피하기 위해 분할 컴팩트 라이브러리, 에뮬레이트하는 L / M에 스플릿 설치 앱이 백그라운드에 들어갈 때까지 우리는 올바르게 설치할 수 있습니다

그래서이 분할 컴팩트 라이브러리 앱을 다시 시작하지 않아도된다는 의미입니다 이 모듈 안에있는 거의 모든 것들 앱에서 즉시 사용할 수 있습니다 이 분할 컴팩트 라이브러리를 설정할 수 있습니다 어떻게하면 될지와 매우 유사한 방식으로 앱에서 Multidex 라이브러리를 설정하는 것에 익숙해야합니다 마지막으로 앱 업데이트를 릴리스하면 Play는 기본 모듈과 이미 설치된 모든 주문형 모듈을 포함합니다

따라서 장치에있는 모듈의 버전 항상 동기화됩니다 항상 같은 버전입니다 파트너는 이것이 실제로는 이 모델에 대해서 좋아, 그럼이 모든 걸 감싸 줘 오늘부터 모든 개발자가 Android App Bundles를 만들 수 있습니다

안드로이드 스튜디오 32 카나리아 그리고 모든 사용자에게 Play에서이를 게시 할 수 있습니다 그래서 나는 여러분 모두가 이것을 시도하고 보도록 권합니다 전환하여 앱이 얼마나 작아 질 수 있는지 안드로이드 애플 리케이션 번들로

이제 모듈화를 시작할 예정입니다 개발자들에게 앞으로 몇 개월 동안 오늘부터 모듈화 된 앱을 만들 수 있습니다 Studio Canary에 게시하고 게시 할 수 있습니다 Play 콘솔의 내부 트랙과 알파 트랙으로 이동합니다 하지만 우리는 출판과 제작을 시작할 것입니다

앞으로 몇 개월 동안 베타 버전으로 추적합니다 관심이 있으시면 관심사를 등록 할 수 있습니다 제공되는 링크에서 모듈화합니다 그리고 그걸로와 주셔서 감사합니다 질문이 있으시면 나중에 잡으실 수 있습니다

나는 우리가 지금 시간이 있다고 생각하지 않는다 또는 Sandbox에서 며칠 동안 우리를 붙잡을 수 있습니다 C, 무대 뒤 그리고 고마워 훌륭한 입출력을 가져라

[음악 재생]