Getting the Most from the New Multi-Camera API (Android Dev Summit ’18)

안녕하세요, 모두들 새로운 멀티 카메라 API 세션에 오신 것을 환영합니다

내 이름은 Vinit Modi이고 저는 제품 관리자입니다 카메라 플랫폼에 이 잠시 후, 샌드 박스 영역 바깥으로 나 오세요 더 궁금한 점이 있으시면 새로운 API에 대해 이야기하기 전에, 카메라의 상태를 빠르게 업데이트하겠습니다 역사적으로 대부분의 카메라 앱은 기본 카메라 앱에 초점을 맞 춥니 다

장치와 함께 제공됩니다 그러나 금액의 두 배가 넘는 것으로 나타났습니다 카메라 사용량은 사용자가 구축 한 앱에서 발생합니다 그리고 당신이 새로운 기능을 지원합니다 새로운 Android API에서 사용할 수 있습니다

우리가 많은 개발자들과 이야기 할 때 우리가 찾은 것 가장 큰 문제는 카메라 2 API의 상태입니다 그리고 우리는 앞으로 나아갈 것입니다 우리는 열심히 노력해 왔습니다 Android P부터 시작하여 찾을 수있는 항목 거의 모든 새 장치가 camera2 및 HALv3을 지원합니다 이것이 의미하는 바는 카메라의 특성을 볼 때, 기기가 자체 광고를하는 것을 알게 될 것입니다

어느 한 점과 비슷한 camera2 LIMITED 촬영하고 카메라 2를 FULL로 설정하면 프레임 단위 제어와 같은 고급 기능, YUV 재 처리 및 RAW를 가능하게하는 LEVEL_3이 있습니다 또한 여러 OEM 업체와 협력 해 왔으며, 또는 제조업체가 출시 될 때 새로운 API를 열 수 있습니다 올해 Google Pixel 3 및 화웨이 메이트 20 시리즈 지원 새로운 멀티 카메라 API 자, 왜 물러서서 이유를 말해 줄까? 이 새로운 API는 매우 중요합니다 Android P 이전에는 개발자로서 물리적 센서 중 하나에 액세스 할 수 있습니다 네이티브 카메라 앱이 전체 하드웨어에 액세스합니다

능력 하지만 P로 시작하면 동일한 액세스 권한을 얻게됩니다 네이티브 카메라 앱으로 여기에는 모든 물리적 센서가 포함됩니다 논리적 인 카메라 더하기

논리적 인 카메라는 추상화입니다 당신이 쉽게 잡을 수있는 모든 물리적 센서들 하드웨어의 이점 몇 가지 새로운 사용 사례와 가능성이 있습니다 새로운 멀티 카메라 API로 오늘날 오스카 (Oscar)는 광학 줌 (optical zoom) 에밀리가 보케를 덮을거야 고맙습니다

오스카가 다음입니다 [박수 갈채] OSCAR WAHLTINEZ : 안녕하세요, 제 이름은 오스카입니다 저는 개발자 관계 팀에서 일하고 있습니다 라이브 데모에서 시작하겠습니다 무엇이 잘못 될 수 있습니까? [웃음] 그래서 여기에 메이트 20 전화가 있습니다

멀티 카메라 줌을 구현 중입니다 여기에서 우리가하고있는 일은 UI 레이어를 바꾸는 것입니다 두 카메라 스트림 나는 어떤 종류의 세부 확대 또는 자르기를하고 있지 않다 나는 단순히 시내를 교환하고있다

보시다시피, 거의 순간적입니다 내가 쓰러 뜨리면 찢어지지 않아 카메라 세션 그것은 단지 하나의 세션이고, 저는 두 대의 카메라를 교체하고 있습니다 스트림

아이디어는, 내가 말했듯이, 단일 카메라 세션입니다 – 두 개의 스트림 그리고 우리는 시내 사이에서 교환 할 것입니다, 이것이 어떻게 구축되었는지 보여 드리겠습니다 하지만 핵심 구성 요소는 동일한 코드를 사용한다는 것입니다 두 장치에서 실행 중입니다 많은 카메라 개발자들이 알고 있듯이, 그것은 아주 위업입니다 같은 다른 장치에서 동일한 코드를 실행하려면 특히 하드웨어에 묶여있는 것 그것이 멀티 카메라이기 때문에

먼저, 다중 카메라를 사용하는 방법에 대해 이야기 해 봅시다 동시에 스트림 프레임 워크가 제공하는 기본 보증 멀티 카메라 API에서 최소한 두 개의 실제 카메라를 사용할 수 있습니다 동시에 스트림 보증 된 스트림 구성을 생각해 내십시오

단일 카메라 장치 용 하드웨어 수준, 대상을 기반으로하는 일련의 규칙입니다 유형 및 대상 크기 멀티 카메라 API를 올바르게 사용한다면, 우리는이 규칙에 대한 예외를 얻을 수 있습니다 이것을 예제로 설명해 보겠습니다 YouTube에는 최대 크기의 단일 YUV 스트림이 있습니다

이전 표와 같이 하드웨어가 제한적인 장치 레벨은 단일 스트림을 사용할 수 있습니다 그 구성으로 멀티 카메라 API를 사용하면 실제로 동일한 구성의 두 스트림을 사용할 수 있습니다 기본 물리적 카메라에서 우리가해야 할 일을 따라 가자

이전에 데모 한 앱을 구현할 수 있습니다 우리는 5 단계로 나누었습니다 준비 되었나요? 1 단계 – 실제 카메라를 찾으십시오 물리적 카메라 쌍을 식별하여 시작합니다 동시에 열 수 있습니다

피사체로 카메라 문자를 사용하여, 우리는 [? 요청 기능] 논리적 인 멀티 카메라가 그들 중 하나라면, 우리는이 장치가 논리적 인 카메라라는 것을 압니다 논리적 인 카메라를 발견 했으므로 저장합니다 우리는 나중에 ID를 필요로 할 것입니다 그리고 우리는 그것과 관련된 물리적 인 카메라를 얻습니다 그런 다음 다음 단계로 넘어갈 수 있습니다

여기에 방금 설명한 내용을 시각화했습니다 우리는 논리적 인 카메라 ID를 가지고, 우리는 실제 카메라 ID를 가져오고 이제는 연관된 실제 카메라 검색 논리 카메라 그룹과 다음 단계로 논리 카메라를 엽니 다 두 번째 단계는 새로운 것이 아닙니다 우리는 카메라를 엽니 다

이전에 저장 한 논리적 카메라 ID를 상기하십시오 이것이 우리가 카메라 관리자에게 전달하는 유일한 방법입니다 다시 말하면 논리적 인 카메라 만 엽니 다 장치가 준비되면 단계 콜백이 트리거됩니다 논리적 인 카메라를 열었습니다

다음 단계에서는 출력 구성을 만듭니다 업데이트 카메라 세션을 만드는 데 사용됩니다 원하는 출력 목표마다 이전에 찾은 목록의 실제 카메라 ID가있을 수 있습니다 특정 하드웨어에서 프레임을 검색하려는 경우 카메라

자세한 내용을 살펴 보겠습니다 우리는 다음을 사용하여 출력 설정 객체를 생성합니다 우리가 원하는 출력 목표 그리고 만약 우리가 그 결과를 특정 실제 카메라를 사용하면 설정된 실제 카메라 ID API에서 ID를 전달하십시오 논리적 인 카메라를 사용하고 싶다면, 이 단계를 건너 뛸 수 있습니다

우리는 둘 다 조합 할 수도 있습니다 하루가 끝나면 목록이 있습니다 출력 구성 중 일부는 물리적 카메라와 관련이있을 수 있습니다 그 중 일부는 – 논리적 인 카메라 목표는 모든 구성을 넣는 것입니다

단일 세션 구성으로 방금 설명한대로 각 출력 구성 관련 출력 목표 및 선택적으로, 실제 카메라 ID 이제 캡처 세션을 만듭니다 새 세션을 사용하여 캡처 세션을 만드는 방법 구성 개체? 우리는 출력 구성 목록으로 시작합니다 우리가 방금 만든거야 이를 통해 세션 구성을 인스턴스화하고, 여기에는 캡처 세션 콜백이 포함됩니다 콜백에서 인스턴스를 가져옵니다

카메라 세션 만들기 우리는 그 세션 설정 객체 우리가 2 번에서 얻은 카메라 장치 논리적 인 카메라를 열었을 때 요청이있는 프레임을 보냅니다 원하는 구성으로 새 세션을 만듭니다 세션 구성 객체에서 제공되는 콜백 지금 방아쇠를 당길 것이다

그리고 나서 우리는 우리 카메라 세션을 사용할 준비가 될 것입니다 마지막 단계 요청을 캡처합니다 그런 일이 발생하면 프레임을 가져올 수 있습니다 카메라의 예를 들어 두 프레임에서 프레임을 캡처하려면 실제 카메라를 동시에 사용하면 우리가 전에 만든 세션을 가져 가라

한 쌍의 출력 대상 이 특별한 경우, 각 타겟 특정 카메라 ID와 연결됩니다 우리는 일반적으로 캡처 요청을 생성합니다 이 경우 템플릿 미리보기를 사용하십시오 우리는 평상시와 마찬가지로 출력 목표를 그것에 첨부합니다 이제 캡처 요청을 전달합니다

여기 다른 것은 없습니다 이 경우를 제외하고, 출력면 각각에서 이미지 데이터를 수신합니다 관련 실제 카메라의 캡처 요청 콜백은 한 번만 트리거됩니다 다시 한번, 캡처 요청과 같습니다 가장 큰 차이점은 완료 콜백 대신에 두 개의 시작 노출 타임 스탬프를 돌려 줄 것입니다

일반 캡처 요청에서 단 하나의 값만 가져옵니다 요점을 되짚어 보겠습니다 우리의 광학 줌 데모 우리는 물리적 카메라를 발견했습니다 우리는 그 그룹의 일부인 논리적 인 카메라를 열었습니다

출력 구성을 만들었습니다 우리 [? 인쇄?] 목록 캡처 세션을 만듭니다 그런 다음 캡처 요청을 보내 게됩니다 내가 만지고 싶었던 또 하나의 주제는 렌즈 왜곡이다

렌즈 왜곡의 고전적인 예는 어안 렌즈입니다 이것은 실제 사례가 아닙니다 설명의 목적으로 만 여기에 있습니다 모든 렌즈에는 약간의 왜곡이 있습니다 논리 카메라의 경우, 왜곡이 있다고 가정 할 수 있습니다

최소가 될 것입니다 대부분의 경우 드라이버에 의해 수정됩니다 그러나 실제 카메라의 경우 왜곡 꽤 중요 할 수 있습니다 실제 렌즈 왜곡이 설명됩니다 방사형 및 접선 계수 집합 계수는 렌즈 왜곡을 사용하여 쿼리 할 수 ​​있습니다

카메라 특성 키 관심이 있으시면 문서에 더 많은 세부 정보가 있습니다 좋은 소식은 왜곡을 수정하는 방법이 있다는 것입니다 수학을하지 않고 간단히 왜곡 보정 모드를 설정할 수 있습니다

캡처 요청에 OFF는 왜곡이 가해지지 않았 음을 의미합니다 우리가 원한다면 이것을 사용해야 할 수도 있습니다 [INAUDIBLE] 동기화와 같은 작업을 수행 할 수 있습니다 Emilie는 나중에 그것에 대해서 이야기 할 것입니다

FAST는 최선의 교정이 가능하다는 것을 의미합니다 광고 된 프레임 속도를 충족시키면서 적용됩니다 FAST 보정이 불가능할 경우, 이것은 OFF와 같을 수 있습니다 고화질은 왜곡을 의미합니다 렌즈가 허용하는만큼 수정 될 것이며 잠재적으로 프레임 속도의 비용으로

수정 모드를 지정하지 않은 경우, 그것은 FAST 또는 HIGH QUALITY 중 하나입니다 구현 세부 사항에 달려 있습니다 기본값입니다 당신은 개발자로서, 귀하의 캡처에 어느 것이 적용되었는지 확인하려면 쿼리 할 수 ​​있습니다 의뢰

시연하는 코드 스 니펫을 보자 이 렌즈 왜곡이 어떻게 고품질로 설정되었는지 우리가 정지 이미지 캡처를 원할 것입니다 우리가 이미 카메라 세션을 시작했다고 가정하면, 캡처 요청 빌더를 인스턴스화합니다 원하는 템플릿을 사용합니다이 경우, 내가 말했듯이, 이미지 캡처

그런 다음 카메라 특성을 사용합니다 고 품질 왜곡 보정을 결정하는 방법 모드를 사용할 수 있습니다 이제 우리는 우리가 높은 품질을 가지고 있음을 알게되었습니다 왜곡에 대한 수정, 우리는 캡처 요청에 그것을 설정, 그리고 우리는 항상 우리가하는 일을합니다 – 포획 요청을 파견하십시오 샘플 코드 및 기술 세부 사항은, 우리의 블로그 게시물을보십시오

우리는 이것과 그 이상을 다뤘습니다 우리는 이번 주 초에 그것을 출판했습니다 그리고 지금, 나는 Emilie에게 그것을 넘겨 줄 것이다 [박수 갈채] 고마워, 오스카 제 이름은 Emilie Roberts입니다

저는 파트너 개발자 옹호자입니다 멋진 데모를 보여 드리겠습니다 이 다중 카메라 API 중 일부를 사용합니다 픽셀 3에 보케 효과를 적용합니다 그래서 우리는 실제로 3 개의 – 잘, 2 개의 데모를 가지고 있습니다

25 데모 첫 번째는 하나의 캠 데모입니다 멀티 카메라가 전혀 없습니다 그러나 나는 그 메커니즘을 보여주기를 원했다

보케 효과를 만들기위한 것입니다 그런 다음 듀얼 캠 데모에 들어가면 정확히 볼 수 있습니다 – 멀티 카메라 측면에 집중할 수 있습니다 보케 효과 자체에 대해 그렇게 걱정하지 않아도됩니다 그리고 곧 출판 될 예정입니다 오픈 소스

너무 많은 코드를 낙서하는 것에 대해 걱정하지 마십시오 그럼이 전화에 갈 수 있을까요? 데모 실례합니다 오키 그래서 우리는 – 나는 이것을 올바르게 설정하지 않았다

좋아, 싱글 캠 보케 효과를 보자 셀카를 여기로 데려가 그리고 당신이 화면에서 볼 수 있다고 생각합니다 그것은 내 얼굴을 찾는 것입니다 그것은 그것을 절단하고 있습니다

최종 결과를 높이 보자 그리고 그것은 거기에 인물 사진 모드를 붙이는 것 이것은 거친 인물 사진 모드의 일종입니다 그리고 이것에 대한 최적화가 있습니다 그게 어떻게되는지 보자

여기서 출력 단계를 보여 드리겠습니다 그래서 전경을 찾는 더 나은 일을하려고합니다 이봐, 그렇게 나쁘지 않았어 전경 이미지, 배경, 그것은 단색이고 조금 흐려져 있습니다 어서, 애플 리케이션

우리를 실망시키지 마라 최종 결과에 붙여 넣기 한 대의 캠에 비해 그렇게 나쁘지 않습니다 듀얼 캠 데모를 사용해 봅시다 그리고이 무대 조명으로 저는 확신하지 못합니다

어서 이봐, 나쁘지 않아 우린 잘하고있어 따라서 왼쪽 하단에 깊이 맵이 생성 된 것을 볼 수 있습니다 전경에서 나를 감지하고있는 코너 너희 모두의 나머지는 조금 쭈그러 들었다

가까운 사람들이 회색임을 알 수 있습니다 그리고 나서 검은 색이 바로 뒤로갑니다 또한 혼란을 야기하는 빛을 볼 수 있습니다 마지막 결과를 보여 드리겠습니다 분명히 일어날 수있는 몇 가지 최적화가 있습니다

하지만 꽤 잘 작동합니다 다시 한번, 이는 Pixel 2에서 두 개의 전면 카메라를 사용하고 있습니다 한 번에 두 개의 스트림을 볼 수 있습니다 죄송합니다 이 연결이 다시 연결됩니까? 아니

어쨌든, 한 번에 두 스트림 광각 렌즈 및 법선 렌즈 같은 시간에 슬라이드로 돌아갈 수 있을까요? 그럼 우리가 어떻게하는지 이야기 해 봅시다 오, 우리가있다 어쨌든, 그래서 우리는 정상적인 카메라를 가졌습니다

광각 렌즈는 동시에 작동합니다 다시 말하지만, 우리는 이것을 아마도 GitHub에 게시 할 것입니다 오픈 소스이므로 소스 코드를 파헤쳐 최적화 할 수 있습니다 더 나아지게하십시오 첫 번째 경우는 단일 캠입니다

빨리 살펴 봅시다 떠 다니는 머리 보케 효과 나는 그것을 부릅니다 우리는 얼굴 탐지 장치로 사진을 찍을 것입니다 우리는 두 장을 만들 것입니다 그래서 배경, 전경이 있습니다

환상적인 배경 효과를 내기 그 플로팅 헤드를 속한 곳에 붙여 넣으십시오 Face2는 Camera2 API에 내장되어 있습니다 코드를 구현하는 것은 매우 쉽습니다 우리가하고 싶은 일은 카메라를 점검하는 것입니다 카메라 장치가 지원하는지 확인하기위한 특성 FaceDetect

그럴 경우 원하는 모드를 찾으십시오 떨어져 있고, 그 다음 간단하고, 가득하다, 카메라 장치에 따라 다릅니다 그런 다음 카메라 캡처 요청을 할 때, 우리는 요청에 그 것을 포함시킵니다 우리가 결과를 얻을 때, 당신은 모드가 설정된 경우 얼굴을 찾았습니까? 이 예에서는 검색 만합니다 그것이 찾은 첫 번째 얼굴은 제가 사용했던 얼굴입니다

우리는 이것을 확장하여 여러면을 가질 수 있다고 상상할 수 있습니다 그냥 메모 – FaceDetect 정말 얼굴을 잡아 그래서 나는 그 경계들을 조금씩 부딪쳤다 그래서 머리가 잘려나 간다 그것은 나쁘게 들린다

배경에 붙여 넣기되는 머리 재미있는 배경 효과에 대해 이야기 해 봅시다 그래서 여기서 원하는 것을 할 수 있습니다 나는 몇 가지 일을했다 먼저 RenderScript를 사용하여 배경에 흐리게했다

멀티 카메라 이야기이기 때문에, 일부 카메라에는 수동 줌이 있습니다 다중 캠으로 작업한다면, 당신은 다른 카메라로 배경을 할 수 있습니다 초점을 벗어나는 방식으로 확대 / 축소 할 수 있습니다 따라서 실제로 광학 흐림을 할 수 있습니다 멋지다

그리고 또한 멋지다 소프트웨어 단계를 저장하십시오 이 데모에서는 사용자 정의 소프트웨어 세피아 효과도 수행했습니다 RenderScript를 사용합니다 하지만 멀티캠을 다시 사용한다면 많은 카메라가 필요합니다

단색이나 세피아 같은 효과를 내장하고있다 캡처 요청에 쿼리하고 포함 할 수 있습니다 게다가 이전에 RenderScript를 사용하지 않았다면, 이런 식으로 보입니다 흐림 효과 때문에 우리는 가장 신경을 쓴다

중간 선 3 개 정도 그리고 내장 스크립트, 본질적인 흐림입니다 그것은 꽤 편리합니다 기본적으로 상자에서 작동합니다 이 경우 상자 외부에서 흐려집니다

상자가 흐릿하지 않기 때문에 세피아 효과를위한 사용자 지정 RenderScript 스크립트입니다 처음 세 줄에서 볼 수 있습니다 기본적으로 우리는 입력 빨강, 녹색, 및 파란 채널, 색깔을 음소거하는 종류, 그들을 조금 노랗게 만들고, 그들을 보내는 출력 채널에 연결합니다 오키

그래서 우리는 배경을 가지고 있습니다 이 멋진 보케 효과가 있습니다 포 그라운드로 무엇을할까요? FaceDetect에서 우리는 얼굴을 잘라 냈습니다 그리고 우리는 PorterDuff를 선형 그래디언트로 적용합니다 가장자리를 약간 부드럽게 만드십시오

그래서 우리가 그것을 붙여 넣을 때, 그것은 그 거친 라인이 아닙니다 그리고 타다 붙여 넣기하면 상황이 꽤 좋아 보입니다 몇 가지 최적화가 있습니다 하나는 GrabCut 알고리즘을 사용하여 본 것입니다

이것은 OpenCV, Open Computer Vision 라이브러리에 내장되어 있습니다 우리는 깊이 맵 데모를 위해 나중에 사용하고 있습니다 기본적으로 나는 얼굴을 발견했다 그리고 조금 더 큰 사각형을 선택했습니다 시체가 어디 있는지 추측하려고합니다

그리고 나서 그랩 컷이 최선을 다합니다 좋아하는 사진 편집기의 Magic Wand 도구처럼 – 전경을 실제 전경으로 축소시키는 것 범위 앞에서 언급했듯이 여러 얼굴을 추가 할 수도 있습니다 이제, 당신이 모두 기다리고있는 순간 깊이지도가있는 듀얼 캠 보케에 대해 이야기 해 봅시다

우리는 카메라에 동시에 사용할 것입니다 그리고 우리는 깊이를 만들 것입니다 지도, 어려운 부분입니다 나는 그것을 굵게 강조했다 그런 다음 동일한 메커니즘을 사용합니다

우리는 이미 이야기했다 오키 이게 어떻게 작동합니까? 우선, 이중 캡처 그래서, 왼쪽에, 나는 애완 동물과 어울리고있다 집에서

왼쪽은 Pixel 3 전면 카메라의 일반 카메라입니다 그리고 오른쪽은 광각 촬영입니다 그것을하기 위해서, 오스카가 걸었던 것처럼, 여러 출력 구성을 설정했습니다 그래서 각 렌즈에 대해 우리는 여기, 우리는 이전의 표면뿐만 아니라 이미지를 가지고있다 정상 렌즈 용 판독기

우리는 정상적인 렌즈에 설정된 실제 카메라 ID를 사용합니다 그리고 우리는 광각 렌즈에 대해서도 똑같은 작업을합니다 따라서 우리는 4 가지 출력 설정으로 끝납니다 우리의 구성에 투입 그때부터 – 또는 거기에서, 그것은 단지 캡처를위한 출력 목표를 선택해야합니다

이 경우, 우리는 그 사진들을 원한다 그래서 우리는 그들을 조작 할 수 있습니다 그래서 우리는 정상적인 렌즈에서 이미지 리더를 원한다고 말합니다 및 광각 렌즈를 포함한다 좋아, 그래서 우리는 우리의 이미지를 가지고있다

이제 수학과 마법을 다해야합니다 그 bokeh 효과가 일어나게하십시오 나는 스테레오 비전에 대해 간략히 소개하고자한다 우리가 모든 코드에 들어가기 전에 하지만 나는이 슬라이드를 보면서, 이 슬라이드를 작업하면서 조금 지루해졌습니다

나는 기하학을 좋아하지만, 그것은 많은 편지입니다 P는 어쨌든 무엇을 의미합니까? 분명히, 그것은 초콜릿 더미입니다 P는 초콜릿 더미를 나타냅니다 그리고 이것이 우리가 집중하게 될 것입니다 이 데모의 나머지 부분에 관해서

그리고 카메라 하나는 조금 지루한 카메라입니다 여기 S는 상어로 바꿀 것입니다 내 친구, Pepper the Shark입니다 그리고 H는 하마입니다 그래서 이들은 우리의 도우미입니다

우리가 스테레오 비전에 관해 이야기하는 것을 도울 것입니다 왼쪽 카메라, 보통 렌즈는 상어 후추입니다 광각 렌즈는 소파 하마 인 Susie Loo입니다 그리고 그들은 그 두꺼운 초콜릿 뭉치에 두 가지 모두 들어가고 있습니다 그리고 이미, 그것은 훨씬 더 재미 있습니다

나는 당신이 동의하기를 바랍니다 그래서 그곳에는 왜곡 된 직사각형들이 있습니다 그것은 2D 표면입니다 그것은 카메라가 포착 할 이미지와 같습니다 즉, 2D 표현 우리가 가진 실제 살아있는 3D 물체의 어떻게 생겼는지 살펴 보겠습니다

상어의 시선이 바로 거기에 있습니다 아몬드, 바다 소금, 다크 초콜릿, 하마 캠은 라스베리 크런치에 집중합니다 그래서 그들은 같은 3D 객체를보고 있습니다 그러나 그들은이 2D 표현을 가지고 있습니다 우리가 정말로하고 싶은 것은 별도의 견해를 취하는 것입니다

그들을 결합 할 수 있으니 조금만 더 그 2D보기보다 더 많은 정보 훌륭한 깊이 맵을 만들 수 있어야합니다 그래서 우리는 다시 정상적인 시야, 넓은 시야각을 갖습니다 이 경우에는 둘 다 정상입니다 그러나 왼쪽, 오른쪽 오버레이 서로에게 당신은 그런 종류의 3D 눈금자 효과를 얻습니다 내가 희망하는 초등학교에서

당신은 어린 시절 즐겁게 지내야합니다 그리고 거기에서 우리는 깊이 맵을 만들 수 있습니다 당신이 굉장한 bokeh와 같은 정말로 시원한 물건을하는 것을 허락하는 효과뿐만 아니라 초콜릿이 얼마나 멀리 있는지 알 수 있습니다 그래서 분명히 손을 뻗어 잡을 수 있습니다 오키

그 두 대의 카메라, 두 장의 사진, 서로 다른 방향에있다 그리고 그들은 공간에서 분리되어 있습니다 그래서 우리는 서로를 꼭대기에 올려야합니다 이것이 우리가 카메라 외재라고 부르는 것입니다 두 카메라가 서로 어떻게 관련되어 있는지

그래서 우리는 각각의 이미지들을 회전시키고 번역 할 필요가 있습니다 그래서 그들은 서로의 위에 나타납니다 일반적으로 우리는 일반적으로 회전 및 평행 이동 매개 변수를 제공합니다 세계와 관련된 카메라 카메라 1 대 세계 대신, 우리는 상어와 세계와 하마가있다

그러나 우리가 스테레오 비전을 수행 할 때 우리가 실제로 Shark to Hippo는 걱정할 필요가 있습니다 그렇다면이 두 카메라는 어떻게 서로 관련이 있습니까? 좋은 엔지니어처럼, 내가 아는 전부는 나는 하마를 World to Hippo로 전환해야합니다 그리고 이제 저는 상어에서부터 세계에 이르기까지 하피에 이르는 통로가 있습니다 그게 수학에 대한 재미있는 소개 였으면 좋겠어 위키피디아에 대한 모든 것을 읽을 수 있습니다

이런 모습 회전 행렬을 얻으려면 카메라 2의 회전 행렬을 역으로 변환하려고합니다 카메라 1과 교차 곱합니다 그리고 번역을 위해, 그것은 이와 같은 것입니다 내부 제품을 가지고 빼십시오

Wikipedia 또는 다른 출처에서이 모든 것을 읽을 수 있습니다 그래서 내가 지적하고 싶은 것은 이 일을 직접하고 있다면 번역이 있습니다 일반 카메라의 픽셀 3에 대한 행렬 와이드 카메라 이것은 내가 꺼낸 것입니다 그것에 대해 무엇을 눈치 챘 을까요? 카메라들 사이의 9 밀리미터 간격 약 오른쪽에 보인다

전화를 보면, 좋은 점이 있다는 것을 알 수 있습니다 미국인은 뭐니? 좋은 어쨌든 좋은 9 밀리미터가 있습니다

그 카메라들 사이에 그건 완벽하게 이해가됩니다 하지만 내가 눈치 채지 못한 것은 약 1 주일의 시간을 들여야합니다 그것이 y 좌표에있는 것입니다 그래서 카메라는 서로 위에 있습니다

그래서 저는이 전화로 일하는 동안, 서로 옆에있는 두 대의 카메라를보고, 나는 그들이 분명히 그들이라고 생각했다 수평으로 옮겨졌다 중요한 점은, 깊이 맵 기능 내가 사용하고있는 것은 그들이 서로 옆에있을거야 수평 이동을 가정합니다 그래서 당신은 – 왜냐하면

오, 나는 중요한 부분을 말하지 않았어 카메라 센서는 종종 풍경, 그것은 의미가 있습니다 잘못했을 경우 깊이지도가 작동하지 않습니다

너는 머리카락을 꺼내 내가 한 것처럼 위대한 주를 보내 셨습니다 어쨌든, 만약 당신이 이것을 구현한다면 단지 메모 그래서 우리는 카메라 외재를 가지고 있습니다 우리가 서로의 위에 카메라로부터 그림을 얻는 방법, 서로 어떻게 관련되어 있는지

카메라 내장 함수는 카메라 자체의 속성입니다 그래서 우리는 일반 렌즈와 광각 렌즈를 가지고 있다는 것을 알고 있습니다 그리고 그들은 다른 속성을 가지고 있습니다 그래서 두 가지가 있습니다 하나는 카메라의 특성입니다

이것은 초점 길이, 주축, 그리고 그 축이 어떤 이유로 왜곡 된 경우 이것은 종종 3 행 3 행렬에 나타납니다 그리고 왜곡 – 광각 렌즈와 광각 렌즈 – 특히 가장자리 근처에서 약간의 왜곡이 생길 것입니다 우리가 매핑 할 때 고려해야 할 사항이 있습니다 두 이미지는 서로에게

또 다른 메모 – 그래서 우리는 내장 된 왜곡을 사용할 것입니다 이미지를 왜곡되지 않게하기위한 렌즈의 특성 그러나 오스카가 우리에게 말했듯이, 기본적으로, 카메라가 이미지를 왜곡시킵니다 그래서 우리는 그것을 찌그러 뜨릴 것입니다 reundistort, 그것은 우리가 실제로 그것을 왜곡 할 것이라는 것을 의미합니다, 그것은 나쁜 소식입니다

따라서 실제로 왜곡 보정을 해제해야합니다 당신이 깊이지도를 원한다면 카메라 요청으로 충분히 쉽습니다 왜곡 모드가 해제되어 있는지 확인합니다 오키

여기 네 가지가 있습니다 회전, 평행 이동, 카메라 특성 행렬, 및 렌즈 왜곡 이 속성들을 어떻게 얻습니까? 꽤 쉽습니다 너는 오후 내내, 바둑판 용지를 인쇄해라 이 방에서 전에 이걸 했니? 카메라 라

– 응? 재미 있겠지? 카메라 교정 두 카메라 모두에서 일련의 사진을 찍으십시오 당신은 많은 알고리즘을 실행합니다 이 네 가지 카메라 특성을 알아 냈습니다

그리고 그때부터 깊이지도를 만들기 시작할 수 있습니다 카메라에서 당신은 내 쾌활한 얼굴에서 말할 수 있습니다 실제로 그 재미가 아닙니다 하지 마

별로 좋지 않다 다행히 카메라 2 멀티 카메라 API에서, 우리는이 위대한 들판을 가지고 있습니다 회전, 평행 이동, 교정 및 왜곡 따라서 API를 바로 사용할 수 있습니다 네가 간다면 몇 마디 만 말해 줄께

자신을 구현합니다 그래서 카메라의 특성, 초점 거리, 액세스 정보는 다섯 개의 매개 변수로 제공됩니다 이것은 Android 설명서에 있습니다 그러나 3×3 행렬을 생성하려면, 당신은 단지 문서를 따라야 만합니다 번호를 플러그인하십시오

너를 버릴지도 모르는 또 다른 일 왜곡 계수는 다시 5 가지 값입니다 그러나 OpenCV 라이브러리는 다른 순서로 사용합니다 API에서 얻은 값보다 따라서 0, 1, 3, 4, 2가되는지 알아야합니다 희소식은 당신이 0, 1, 2, 3, 4 주문, 당신이 이미지를 왜곡하지 않을 때, 그들은 마치 소용돌이에 빠져있는 것처럼 보입니다

따라서 여러분은 이러한 계수에 잘못된 것이 있다는 것을 확신합니다 어쨌든, 일단 우리가 모든 매개 변수를 갖게되면, 우리는 우리 이미지를 준비하기 시작할 수 있습니다 깊이 맵 비교를 할 수 있습니다 이건 내 부엌에있는 나야 그리고 네가 거기에서 볼 수 있는지 모르겠다

하지만 천장을 보시면 거기에 어떤 종류의 커브가 있음을 주목하십시오 우리는 재미있는 집에 살지 않습니다 우리가 말하고있는 왜곡 효과입니다 왜곡 보정 기능이 해제 된 광각 렌즈를 사용하십시오 두 이미지를 비교할 때도 마찬가지입니다

직선들 – 우물과 곡선 선들 – 각 이미지에 줄을서야합니다 당신이 깊이지도를 만들 때 우리는 그것을 정류라고 부릅니다 그리고 우리는 카메라 특성을 사용합니다 그것은 구부러진 지붕을 보여주는 것입니다

이 모든 기능은 OpenCV 라이브러리에 있습니다 Open 컴퓨터 비전 라이브러리 첫 번째는 Stereo Rectify입니다 이것은 우리에게 일련의 매개 변수를 가져옵니다 이 계산을 수행하는 데 사용할 수 있습니다

그래서 우리는 – 죄송합니다 API에서 얻은 값, 카메라 매트릭스, 왜곡 계수, 회전 및 평행 이동 우리가 전에 계산 한 것 우리는 이러한 매개 변수를 제거하고, 우리는 변형되지 않은 수정 맵을 호출합니다 우리에게 말하는 방법을 알려주는지도를 만든다 이 두 개의 서로 다른 카메라에서 두 개의 이미지를 가져올 수 있습니다

그들을 서로에 매핑하십시오 그리고 Remap 기능은 바로 이것을합니다 그럼 그게 우리에게주는 것을 보자 여기 왼쪽에서 다시 정상적인 캠, 앞쪽 캠, Pixel 3의 광각 렌즈 및 Pixel 3의 광각 렌즈 당신은 그들이 꽤 잘 어울리는 것을 볼 수 있습니다

상어 줄이 줄 지어 있습니다 작물에 대한 권리입니다 넓은 각도에는 더 많은 수확 지역이 있습니다 그게 전부 줄 지어있다 지붕 라인, 도어 라인은 직선입니다

엉뚱한 왜곡이 없습니다 그리고 실제로, 나는 당신이 앉아있는 곳에서, 당신은 아마 밀접하게보아야 만합니다 왼쪽 그림이 조금 더 가깝다는 것을 알기 위해 프레임의 왼쪽에 그래서 그들은 실제로 조금씩 상쇄됩니다 두 대의 카메라가 있다면 무엇을 기대할 것인가 9 밀리미터 간격

그래서 우리는 이미지를 얻었다 우리는 왜곡되지 않았습니다 우리는 그들을 바로 잡았습니다 우리는 깊이 맵을 작성하는 데 아주 가깝습니다 깊이 맵 기능을 호출하면됩니다

우리는 stereoBM 또는 stereoSGBM을 사용합니다 하나는 다른 것보다 몇 가지 매개 변수가 있습니다 오픈 소스 데모로 게임을 할 때, 이 매개 변수가 어떻게 작동 하는지를 볼 수 있고, 최적화, 변경 사항 커밋, 그 앱을 더 잘 만드는 데 도움이됩니다 그리고 우리는 계산을 호출하고이 깊이 맵을 만듭니다 그리고 그렇게하면 놀라운 사진을 얻을 수 있습니다

이렇게 실제로, 때로는 그것보다 훨씬 나아 보입니다 하지만 어쨌든 이것은 우리가 함께 일하기를 원하는 것이 아닙니다 우리가 정말로하고 싶은 것은 필터입니다

이 경우, 가중치 최소 제곱 필터를 사용하여 그것을 부드럽게하고 조금 더 유용한 깊이를줍니다 지도 따라서 우리가 데모에서 본 어두운 픽셀은, 더 먼 사람들입니다 흰색 픽셀이 가까운 픽셀입니다 그리고 아마도 조금보기가 어려울 것입니다

상어의 주둥이와 하마의 주둥이를 볼 수 있습니다 조금 회색으로 변했다 그래서 실제로 어느 정도 거기에서 일하고 있습니다 필터를 호출하는 방법입니다 OpenCV 라이브러리에도 포함되어 있습니다

기여 모듈에서 그것은 모두 오픈 소스입니다 그리고 정말 멋집니다 완벽한 깊이 맵을 얻으면 기분이 좋아집니다 좋아, 여기서 우리는 깊이 맵을 가지고있다

우리는 무엇을 할 것인가? 따라서이 깊이 맵을 마스크로 적용 할 수 있습니다 그리고 검은 영역, 우리는 페이드 아웃하고 싶습니다 전경을 강조하고 싶습니다 PorterDuff을 사용하면 꽤 쉽습니다 결과는 이와 같습니다

실제로 전경이 더 많이 존재합니다 그런 다음 배경이 희미합니다 개인적으로 나는 높은 기준을 가지고있다 반투명 플로팅처럼 보입니다 내 어깨 너머에 상어

내 얼굴이 조금 희미 해지고 내 안구가 없어 졌어 그래서 저는 이것을 통해 큰 또 하나의 붉은 색 X를 넣고 말할 것입니다 충분하지 않습니다 좋은 시작입니다 그러나 우리가 정말로 원하는 것은 이것과 같은 깊이 맵입니다

그래서 우리는 깊이 맵에 어려운 문턱을 놓을 것입니다 전경, 배경을 결정합니다 다른 앱에서는 비슷한 것을하고 싶을 수 있습니다 그러나 어쩌면 그렇게 가혹한 차이는 아닙니다 더 부드러운 곡선이 될 수 있습니다

이를 위해 OpenCV 함수 인 임계 값을 사용할 수 있습니다 우리는 그만한 가치를 부여합니다 앱의 경우 255 개에서 80 ~ 140 개 정도입니다 그리고 그것은 무엇인가가 고려되는 바로 그 한계입니다 전경 또는 배경

너를 위해 이것의 구현 내가 너에게 보여준 것처럼 마스크를 적용했을 때, 당신은 실제로 그 검은 픽셀을 돌릴 필요가 있습니다 투명 픽셀로 따라서이 함수는 모든 검은 색을 투명하게 변환합니다 우리가 간다

거의 다 왔어 그래서 저는이 슬라이드에서 한 가지만 기억하고 싶었습니다 중간 그림 – 내 눈이 조금 어둡다는 것을 알 수 있습니다 3 개의 슬라이드 이상을 기억하십시오 그래서 우리는 초기 그림을 가지고 깊이지도를 얻었습니다

우리는 그것에 대한이 어려운 문턱을합니다 그리고 배경을 다시 만들 수 있습니다 첫 번째 데모에서했던 것처럼, 그것을 흐리게하고 단색으로 그 전경을 잘라냅니다 붙여 넣기에 필요한 모든 조각이 있습니다 그리고 이것은 우리의 놀라운, 마지막, 인물 사진입니다, 그것은 꽤 좋다

나는 그것을 자랑스럽게 생각합니다 그럼 최적화에 대해 이야기 해 봅시다 내가 말하고있는 안구를 기억해? 그래서 어떤 종류의 반짝 반짝 빛나는 이 현재 반복에서 엉망이 될 수있다 응용 프로그램의 또는 밝은 빛이 깊이 맵 생성을 버릴 수 있습니다 그래서 최적화를 한 번했습니다

FaceDetect 영역이 있어야합니다 나는 전경에서 얼굴을 원한다고 확신한다 그래서 나는 그것을 사용하고 그것을 단호하게 잘라 말했습니다 얼굴에있는 모든 것이 전경에있게 될 것입니다 그래서 내 이빨과 내 눈처럼 보호 받았다

그 마스킹 아웃 효과에서 네가 알아 차렸는지 모르겠다 내가 돌아갈 수 있을까? 내 퍼지 붉은 머리카락과 빨간 소파 – 거기 우리는 간다 그들은 종류가 섞여있다 그리 블 컷을 사용할 수 있다고 생각합니다

정확하게 알아내는 것의 조금 더 나은 일을하는 것 전경에 뭐가 있는지 고마워 우리는 이것이 당신에게 깊은 잠수함을 준 것을 정말로 희망합니다 카메라 2와 멀티 카메라 API를 사용하여, 당신에게 흥미 진진한 창의적인 아이디어를 제공합니다

우리는 당신의 아이디어를 정말로 듣고 싶습니다 우리는 앱에서 그들을보고 싶습니다 그리고 우리는 또한 당신이 찾고있는 기능을 알고 싶습니다 우리는 그들이 위대하다고 생각합니다 카메라 생태계를 계속 추진하고 정말 생태계가 점점 더 커지고 있습니다

다시 한번 고마워 그리고 샌드 박스, 카메라 샌드 박스, 질문이 있으시면 후속 조치를 원할 경우이 앱을 사용해보고 싶습니다 작동하는지 확인하십시오 그리고 곧 오픈 소스를 찾으십시오 고마워

[박수 갈채] [음악 재생]

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, 무대 뒤 그리고 고마워 훌륭한 입출력을 가져라

[음악 재생]

Android Studio 3.2, new APIs for ARCore, what’s new in Kubernetes 1.12, & more!

TIMOTHY JORDAN : 안녕하세요 저는 The Developer Show의 Timothy Jordan입니다

가장 멋진 개발자의 주간 업데이트입니다 Google의 뉴스 이제 Android Studio 32를 다운로드 할 수 있습니다 설명에 링크 된 게시물로 넘어가십시오

Android와 같은 주요 기능에 대한 최신 세부 정보는 아래를 참조하십시오 앱 번들, 에너지 프로파일 러 및 새로운 Android 에뮬레이터 스냅 샷 우리는 최근 ARCore 플랫폼 업데이트를 발표했습니다 증강 현실 체험을위한 Scene Form, 3D 렌더링도 업데이트했습니다 Android에서 AR 응용 프로그램을 작성하기위한 라이브러리 알고리즘 개선이 포함됩니다

그러면 앱에서 메모리와 CPU를 적게 소비 할 수 있습니다 더 긴 세션 동안의 사용뿐만 아니라 콘텐츠에 대한 유연성을 제공하는 새로운 기능 조치 코드 및 예제 스크린 샷이 게시물에 있습니다 클라우드 네이티브 커뮤니티 재단 지난 주 Kubernetes 112를 발표했다

이 게시물은 Kubernetes 오픈 소스에서 Google 클라우드가 주도하고 있습니다 프로젝트 (빠른 확장, 토폴로지 인식 스토리지 포함) 프로비저닝 및 고급 감사 기능을 제공합니다 최근에 Google은 Cloud Tasks를 발표했습니다 App Engine Flex의 작업 대기열 서비스입니다 2 세대 런타임 분산 작업의 모든 이점을 제공합니다

대기열 (작업 오프 로딩 포함) 서비스 간의 느슨한 결합 및 향상된 시스템 신뢰할 수 있음 시작하기위한 자세한 내용과 링크를 보려면, 게시물에 머리를 Google 글꼴 카탈로그에는 이제 일본어 웹 글꼴이 포함되어 있습니다 관련된 최적화에 대한 일부 세부 사항은, 게시물을 봐 Chrome을 출시한지 거의 10 년이 지났습니다

확장 시스템 및 거의 절반의 Chrome 데스크톱 사용자 확장 기능을 적극적으로 사용하여 맞춤 설정 Chrome과 웹에서의 경험 이러한 사용자는 신뢰할 수 있어야합니다 설치하는 확장 프로그램이 안전하고 개인 정보를 보호하며, 및 공연자 그래서 우리는 최근 몇 가지 변경 사항을 발표했습니다 호스트 권한에 대한 사용자 제어, 변경 사항 확장 검토 프로세스, 새로운 코드 가독성 요구 사항 설명에 링크 된 게시물을 클릭하십시오 모든 세부 사항은 아래를 참조하십시오

마음에 드시고 구독하고 공유하시는 것을 잊지 마십시오 저는 The Developer Show의 Timothy Jordan입니다 보고 주셔서 감사 드리며 다음 주에 다시 보겠습니다 안녕하세요 저는 The Developer Show의 Timothy Jordan입니다

한 번 더 – TIMOTHY JORDAN : [LAUGHING] 그래 좋아 지금? 그래 좋아

Android Developer Story: Camera360 achieves global success with Kotlin and new technologies

Camera360는 8 살입니다 그러나 새로운 기술로 더 나은 이미지 경험을 창조하려는 열정 첫날과 여전히 동일합니다

안녕하세요 여러분, 저는 Xu Wei입니다 Pinguo Technology의 설립자 겸 CEO 사진 촬영에 대한 사랑은 실제로 아버지에게서옵니다 그는 사진 작가입니다 나는 어렸을 때부터 사진에서 많은 깨달음과 교화를 나에게주었습니다 자란 후에 나는 또한 더 많은 사람들이 사진의 아름다움을 느낄 수 있기를 바랍니다

새로운 기술과 혁신을 사용하십시오 사람들에게보다 강력하고 유연한 촬영 환경을 제공하십시오 사용자의 손에있는 장비는 오늘날 더욱 다양 해지고 있습니다 수요 또한 점점 더 복잡해지고 있습니다 사용자를 항상 만족시키고 창의적인 욕구를 자극하기까지하십시오

보다 개방 된 플랫폼과 고급 기술로부터 불가분 안녕하세요 여러분, 저는 Li Tao Fruit Technology의 기술 이사입니다 우리는 오래 전에 코 틀린에 관심을 기울이기 시작했습니다 공식 Android 개발 언어가되었음을 알게 된 후 우리는 회사 내에서 Kotlin을 즉시 홍보하기로 결정했습니다 초기부터 StudyJams에 소규모 참여 학습 과정을 위해 일주일에 두 번 회사에 간다 우리의 엔지니어들은 대단히 열정적입니다

이것은 또한 Kotlin의보다 합리적인 학습 곡선 때문이기도합니다 그리고 효율적이고 편리한 문법 기능 많은 문법적 설탕 현대 문법 기능 기본적으로 지원되는 람다 식 Kotlin이 개발 효율성을 크게 높일 수있게하십시오 Kotlin으로 개발 된 새로운 기능 그것이 온라인 일 정도로 3 개월이 걸렸습니다 Kotlin으로 오래된 코드를 리팩터링하는 것도 많은 이점을 얻습니다 거의 200 줄의 Java 코드 리펙토링 후 평균 86 행만 필요합니다

안정성면에서 우리는 대부분 자바 언어를 사용하는 프로젝트를 사용합니다 Kotlin을 사용하는 다른 프로젝트와 비교 후자는 NullPointerException의 빈도가 상당히 낮습니다 나는 Gu Rui Pinguo Technology의 공동 설립자이자 COO 다 제품의 세부 사항을 지속적으로 연마하는 것이 중요합니다 Android vitals를 통해 이벤트를 압도합니다

451 %에서 001 % 충돌 률은 099 %에서 027 %로 떨어졌습니다

월별 점수는 4341에서 4471로 증가했습니다 혁신적인 동적 스티커 기능을 시작한 후 Camera360 일본 시장에서 인기 이는 새로운 기술로 사용자 환경을 개선하려는 우리의 결의를 강화합니다 우리는 ARCore와 같은 Google의 신기술에 계속 주목할 것입니다

더 나은 이미지 경험을 만들려면 처음으로 새로운 기술 사용 그리고 지속적인 독립적 인 연구 개발 Camera360이 해외 시장에서 오랫동안 중요한 위치를 차지하게하십시오 Google Play를 믿습니다 우리는 전 세계의 더 많은 사용자에게 다가 갈 것입니다 그리고 우리의 제품을 사용하여 더 밝은 미소를 지어주십시오

New APIs in M for Android for Work (100 Days of Google Dev)

JESSICA : 작년에 Android for Work, 안드로이드를 멋지게 만드는 새로운 방법 직원 및 비즈니스를위한 롤리팝에서는 설탕으로 덮인 노력을했습니다 Android 기기를 관리 대상으로 만들기 배포

이제 IT 관리자는 회사 소유 장치를 안전하게 배포 할 수 있습니다 그들은 또한 자신의 장치 또는 "BYOD"를 가져올 수 있습니다 나는 제시카 야 Android for Work를 어떻게 개선했는지 알려 드리겠습니다 M 릴리스에서는 장치 관리를위한 더 많은 API가 제공되므로, 더 나은, 더 세련된 BYOD 경험, 그리고 완전히 "COSU"라는 장치를 배포하는 새로운 방법 나중에 자세히 설명해 드리지만 앱을 제작하거나 배포하는 경우 비즈니스 용으로이 비디오를보고 싶을 것입니다

여기 당신을위한 간단한 요약 Android for Work에 대해 이미 모르는 사람들 수백만 명의 사람들이 자체 장치를 가져오고 있습니다 직장에 Android Lollipop에서는 안전한 업무용 프로필을 설정할 수 있습니다 IT 관리자가 관리합니다 업무용 프로필에는 별도로 관리합니다

사용자는 회사의 엔터프라이즈 모빌리티를 설치하기 만하면됩니다 관리 앱 및 로그인 만세 또 다른 두문자어 – "EMM" 우리는 위대한 EMM과 제휴했습니다 Android for Work 솔루션을 출시했습니다

우리는 또한 기업을위한 방법을 추가했습니다 기업 소유의 장치를 L 이 모델을 기기 소유자라고합니다 IT 부서가 요구할 때 완벽합니다 전체 장치를 제어 할 수 있습니다

이 모든 것은 직원에게 평소와 같이 꽤 사업 적입니다 일단 그들이 그들의 개인 장치를 등록하면, 워크 벤치 버전의 Play 스토어를 볼 수 있습니다 여기에서 기업용 앱을 다운로드 할 수 있습니다 고용주가 승인 한 개인용 및 업무용 앱을 사용할 수 있습니다 런처에서 나란히

업무용 앱과 알림은 일괄 처리되어 있으므로 즉시 알아볼 수있는 이제 M 릴리스의 새 API로 이동해 보겠습니다 IT 관리자는 모바일 데이터의 양을 관리해야합니다 직장 앱이 사용하고 있습니다 그래서 우리는 작업 프로필에 대한 새로운 네트워크 사용 API를 추가했습니다

IT는 응용 프로그램별로 데이터 사용량을 세분화 할 수도 있습니다 관리자는 엄청난 돈을 쓸 수 있습니다 기업 자원에 대한 액세스를 구성하는 시간 각 장치에 대해 새 API로이 문제를 해결했습니다 IT 승인 앱에서 인증서를 설치할 수 있습니다 이제 사용자는 기업 자격 증명을 한 번만 입력하면됩니다

및 작업 응용 프로그램에 필요한 인증서가 있습니다 리소스에 안전하게 액세스 할 수 있습니다 IT 부서의 업무를보다 쉽게하기 위해 그들은 지금 읽기 전용 Wi-Fi 구성을 추가 할 수 있어야합니다 기업 소유 기기에서 이렇게하면 장치를 확보 할 수 있습니다

번거 로움없이 기업 네트워크에 올라 타라 또는 우발적 인 삭제 또한 지원 요청 량이 줄어 듭니다 일을 결코 사용하지 말아야한다 당신이 알고 사랑하는 장치

그래서 우리는 약간의 개선 작업을했습니다 프로파일을 사용하여 M에서 BYOD 경험을 향상시킬 수 있습니다 첫째, 동일한 기기에 개인용 앱과 업무용 앱이 모두있는 경우, 사용자가 상태 표시 줄에 작업 아이콘을 볼 수 있습니다 그래서 그들은 그들이 일하는 앱에 언제 있는지 알고 있습니다 둘째, 가상 사설망을 설정하는 앱 소비자에게 인기가 높으며 비즈니스에 사용됩니다

IT 부서는 종종 업무용 프로필에 VPN 앱을 배포합니다 기업 서비스에 대한 보안 액세스를 제공합니다 이제 VPN 앱이 통합 설정 제어판에 나타납니다 Google은 사용자 경험을 개선했습니다 따라서 기업 VPN 애플리케이션은 분명합니다

개인적인 것들과 나란히 표시됩니다 마지막으로 연락처 공급자를 개선했습니다 이제 직장 연락처 이름을 시스템 앱에서 사용할 수있게되었습니다 그래서 당신의 상사로부터 신비가 더 이상 전화하지 않습니다 당신은 단지 숫자 대신 사장님의 이름을 보게 될 것입니다

지금까지 우리는 IT 관리자가보다 쉽게 ​​생활 할 수있는 방법을 모색했습니다 사용자에게 더 좋습니다 이제 Android 기기에 흥미로운 새로운 용도에 대해 이야기 해 보겠습니다 비행기에 탑승 해 체크인했는지, 차를 렌트했는지, 또는 주문 된 룸 서비스? 네가 할 수 있다면 좋지 않을까? 터미널에서 안전하게 관리되는 Android 기기에서이를 수행하고, 키오스크 또는 호텔 방에서? 이제 Android for Work를 통해 IT 부서에서 이러한 기기를 관리 할 수 ​​있습니다 우리는 이것을 COSU라고 부릅니다

기업 소유의 단일 사용 장치 NFC 범프와 같은 단일 프로비저닝 단계에서, 이제 IT 부서에서 새 기기를 설정하고 앱에 고정 할 수 있습니다 기기 소유자는 새로운 API를 사용하여 기기에서 앱을 관리 할 수 ​​있습니다 공공 장소에서 이것들을 좋아하십시오 Android 용 Work in M에서 업데이트 한 내용입니다

나는이 일과 관련된 좋은 것들이 당신을 흥분하게 만들길 바래요 우리는 그렇습니다 우리의 일은 당신의 직업을 조금 더 쉽게 만들어주는 것입니다 Android를 직장에서 더욱 맛있게 만들어줍니다 내 이름은 제시카 야

지켜봐 줘서 고마워 나는 그걸로 돌아가는 게 좋을거야 [음악 재생]

What’s New in Android Oreo for Developers

발표자 1 : Android Oreo는 여기에 있으며 소비자가 이용할 수 있습니다 희망을 갖고, 당신은 기회를 잡았습니다

긴 미리보기 과정에서 앱을 테스트하고 업데이트하는 방법 그 영향력있는 음성 초기 얼리 어댑터들은 좋은 경험 O가 가져 오는 것 – 초콜릿 샌드위치 쿠키 달콤한 새로운 기능으로 중요한 구조적 변화가있었습니다 가장 중요한 것들을 먼저 앱이 아직 구현되지 않은 경우에도 O를 대상으로 할 때, 몇 가지 점에서 O에서 다르게 동작합니다 앱이 배경에있을 때, 즉 적극적인 활동이나 전경 서비스없이, 위치 업데이트가 훨씬 적게 발생합니다

앱에 더 이상 활동이 없거나 서비스, 또는 다른 구성 요소가 잠김 상태에있는 잠김 잠금 장치 자동으로 해제됩니다 Google Play 서비스와 함께 제공되는 기기의 경우, Android ID에 보안 설정이 적용되지 않음 각 앱마다 다른 값을 반환합니다 로그인 키 및 사용자 프로필을 기반으로 광고의 경우에는 Google Play 서비스 사용자 재설정 가능 광고 ID를 사용합니다 여기에는 또 다른 개인 정보 보호 관련 변경 사항이 있습니다 O를 타겟팅하는 앱은 액세스 할 수 없습니다

계정 가져 오기 사용 권한을 사용하는 사용자 계정 대신 앱은 계정 사용자 활동에 의존해야합니다 계정 소유자는 이제 자신의 계정이 다른 앱 및 계정 사용자 활동에 표시 그에 따라 업데이트 될 것입니다 O를 타겟팅하는 경우 앱에 새로운 한도가 생깁니다 배경 처리 요약하면, 단지 적은 수의 방송 부팅 완료와 같이 앱을 시작하는 데 사용할 수 있습니다

또한 앱에서 더 이상 서비스를 시작할 수 없습니다 배경 때 명시적인 브로드 캐스트 리시버, 작업, Firebase Cloud Messaging 및 새로운 API 인 startForeground 전경 서비스를 시작합니다 Android Oreo는 다양한 영역 디스플레이를 지원하는 기능을 추가합니다 16 비트 PNG 및 ICC 프로파일, 새로운 유틸리티와 함께 ​​JPEG, PNG 및 WebP 색상 공간 및 색상 로그와 같은 Android O는 더 길고 좁은 화면을 지원하며, Android O를 더 이상 타겟팅하지 않는 앱 1

86의 기본 최대 가로 세로 비율을가집니다 활동이 최대 종횡비를 설정해야하는 경우, 시스템이 귀하의 앱을 레터 박스로 표시합니다 resizeable 활동을 false로 설정하면 최대 가로 세로 비율 속성을 사용하십시오 물론 앱을 전체 화면으로 작동시키는 것이 가장 좋습니다 다중 창을 사용하므로 최후의 수단으로 만 사용하십시오

그래픽 드라이버 문제를 쉽게 해결할 수 있도록, Android O 기기 제조업체는 Play 스토어에서이 드라이버를 업데이트하도록 선택합니다 시스템 업데이트를 수행 할 필요가 없습니다 물론 Android O는 Project Treble에 내장되어 있으므로 O와 함께 제공되는 장치는 더 쉬울 것입니다 앞으로 Android의 새 버전으로 업데이트하십시오 Android Oreo는 사용자에게 세부적인 제어 기능 제공 알림 채널을 추가하여 알림을 초과합니다

앱은 사용자에게 카테고리로 표시되는 채널을 선언 할 수 있습니다 사용자는 카테고리를 차단하고 행동 제어를 변경할 수 있습니다 진동, 조명 및 화면 개인 정보 보호 Apps는 Android O 채널을 사용해야합니다 알림을 사용하는 경우 알림 관리자에게 전화하여 알림 채널을 만듭니다

그런 다음 알림 채널 ID를 설정합니다 컴팩트 한 알림 빌더에서 Android O는 알림 배지와 점을 지원합니다 채널에서 기본적으로 set show badge를 false로 설정하여이 기능을 끌 수 있습니다

Android Oreo는 이제 앱이 AppWidget을 추가하도록 요청할 수 있습니다 런처에 AppWidget 고정 요구가 있는지 쉽게 확인할 수 있습니다 기본 시작 프로그램에서 지원됨 앱에서 사용자 인터페이스에 요청하도록 할 수 있습니다 그리고 우리는 단축키 작업을 추가하는 방법을 변경했습니다

Android 71에서 사용되는 방송을 제거합니다 AppWidgets과 유사하게, 바로 가기 고정 요청이 지원되는지 확인하려면 앱이 요청하도록하십시오 Picture in Picture는 이제 모든 장치에서 사용할 수 있습니다 Android TV

활동이 PiP 모드를 사용할 수 있는지 여부를 지정하려면, 안드로이드 설정 [INAUDIBLE]은 Picture in Picture를 지원합니다 매니 페스트에서 사실로 모든 앱이 Picture in Picture를 시작해야합니다 Picture in Picture 모드로 전화를 거는 중입니다 재개 또는 일시 중지 상태

앱에서 활동을 시작할 수 있습니다 활동 옵션을 사용하는 2 차 디스플레이에서 더 간단하게 프리젠 테이션 API보다 쉽습니다 또한 다중 창을 지원하는 활동 보조 디스플레이에서 사용자가 시작할 수 있습니다 이러한 디스플레이는 디스플레이 기반의 구성을가집니다 및 자원 관리

이것은 구성의 일부분, 스크린 폭 DP, 스크린 상 높이 DP, 레이아웃 및 밀도 DP 활동이 현재 표시되는 디스플레이에 따라 설정됩니다 상주합니다 폰트는 이제 Android O에서 완전히 지원되는 리소스 유형입니다 또한 API 14로 다시 이식되었습니다 지원 라이브러리에 있습니다

get font 메서드를 사용하여 ID로 글꼴 가져 오기 텍스트보기에서이 글꼴을 직접 사용하십시오 XML로 전체 폰트 패밀리를 정의 할 수도 있고, 글꼴 스타일 및 가중치를 선언하고, 글꼴 자원과 함께 다운로드 가능한 글꼴은 O에서도 지원됩니다 지원 라이브러리에서 구현됩니다 이러한 글꼴은 응용 프로그램간에 공유되며, 스토리지를보다 효율적으로 사용합니다

800 개 이상의 Google 글꼴을 이제 사용할 수 있습니다 Android Studio 내에서 ABK에 임베드 될 수 있습니다 주문형으로 다운로드하도록 설정할 수 있습니다 내가 좋아하는 Android Oreo 및 지원 라이브러리 기능 중 하나 TextView AutoSizing입니다 미리 설정된 텍스트 크기의 배열을 만들 수 있습니다 단계 입도로 최소 및 최대 크기를 설정할 수 있습니다

텍스트가 커지고 축소됩니다 사용 가능한 텍스트보기 공간 이제 EditText를 자동 완성 할 수 있습니다 대부분이 자동으로 실행됩니다 자동 완성 서비스 제공 업체가 더 나은 서비스를 제공 할 수 있도록 도와 줄 수 있습니다

그것에게 힌트를주는 일 자동 완성이 무시해야하는 입력란을 표시 할 수도 있습니다 Oreo의 적응 형 아이콘 지원을 통해 앱 개발자는 아이콘이 나타나는 방식을 제어하는 ​​방법 다른 아이콘을 사용하는 실행기 및 장치 포함 모양을 추가 레이어로 애니메이션 효과에 사용됩니다 Android Studio에는 새로운 마법사가 포함되어 있습니다 적응 형 아이콘을 생성합니다

그리고 O는 분수 삽입 값에 대한 지원을 추가했습니다 레거시 리소스를 사용하여 이러한 아이콘을 쉽게 만들 수 있습니다 안드로이드는 새로운 네이티브 오디오 API를 가지고 있으며, 낮은 대기 시간의 작업을 위해 설계된 AAudio는, 이펙트 프로세싱 및 실시간 합성과 같은 사용하기 쉽고 새로운 직접 모드를 추가합니다 OEM에서 구현할 경우 대기 시간을 줄일 수 있습니다 Android O에서 발견 할 수있는 부분이 많습니다

재생 및 녹음에 대한 업데이트, 애니메이터 세트 찾기 및 반전, 다중 프로세스 웹보기는 안전 브라우징, StrictMode 향상, 검색 가능한 파일 설명자 미디어 파일 액세스, 더 많은 언어 지원 등을 제공합니다 Android Oreo에 대한 자세한 내용은 링크를 확인하십시오 개발자가 핵심 기능을 활용할 수 있도록 돕는 방법 지원 라이브러리를 사용하는 기능 Android를 어떻게 개선하고 있는지 알아보십시오 [INAUDIBLE] 지원의 출시로 개발, 아키텍처 구성 요소 및 Android Studio 3

0이 포함되어 있습니다