Migrate your existing app to target Android Oreo and above (Google I/O '18)

[음악 재생] 알았어 "Android 앱 마이그레이션"에 오신 것을 환영합니다

Android O 및 그 너머에 " FRED CHUNG : 안녕하세요 나는 개발자 옹호자 프레드 정입니다 Dan GALPIN : 안녕하세요, 저는 개발자 Galphin입니다 ERIC KUXHAUSEN : 안녕하세요, 저는 개발자 대변자가 아닌 에릭입니다

저는 마이그레이션을 담당하는 리드 소프트웨어 엔지니어입니다 API 26을 타겟팅 할 Google Play 스토어 앱 단 갈린 : 오후에 우리와 함께 해줘서 고마워 마지막 날의 가장 기대되는 세션을 예약하는 곳입니다 우리가 기록하지 않는 재미있는 즉흥적 인 것을 제외하고 죄송합니다

집 시청자입니다 그래서 네가 진짜 여기있는거야 구글 I / O의 대단원 FRED CHUNG : 음, 대단원이 시작됩니다 그렇다면 왜 마이그레이션해야합니까? 많은 이유가 있지만, 무엇보다도 마음에, 특히 Google Play에서 배포하는 경우, 올해 말까지 2018 년 8 월에 새로운 앱이 출시 될 예정입니다 최소한 API 레벨 26 또는 Android 8

0을 타겟팅해야합니다 마찬가지로 앱 업데이트의 경우에도 앱 업데이트가 필요합니다 2018 년 11 월까지 최소 API 수준 26을 타겟팅해야합니다 다시 말해서 앞으로 앱 업데이트 DAN GALPIN : 이제 모든 새로운 Android 버전 중요한 보안을 가져 오는 변경 사항을 소개합니다

성능 향상 및 경험 향상 전체적으로 Android 이러한 변경 사항 중 일부는 명시 적으로 선언 한 앱에만 적용됩니다 타겟 SDK 버전 매니페스트 속성을 통한 지원, 타겟 API 레벨이라고도합니다 실제로 타겟을 사용하여 APK를 업로드하려고하면 SDK가 26 미만이면 친숙한 알림을 볼 수 있습니다 이런 식으로 ERIC KUXHAUSEN : 저는 우리가 여기 있기 때문에 여기 있습니다

Google Play에서 Play 스토어 앱을 계속 업데이트하고 싶었습니다 11 월 마감 이후 프레드 (FRED CHUNG) : 그래서 몇 가지 기본 사항을 빠르게 살펴 보겠습니다 각자 모두 최소 SDK는 가장 낮은 플랫폼 버전입니다

앱이 기꺼이 지원할 것입니다 종종 시장 침투와 관련된 결정입니다 다양한 Android 출시 DAN GALPIN : 컴파일 SDK는 말 그대로입니다 프로젝트가 링크하는 SDK 헤더 및 스텁 라이브러리 ERIC KUXHAUSEN : 중요한 것은 물론, 내가 말하는거야 targetSdkVersion은 플랫폼의 방식입니다

하위 호환성을 보장합니다 즉, 특정 행동 만 취할 수 있습니다 변경 사항은 특정 특정 대상 SDK 버전으로 적용됩니다 FRED CHUNG : 기술적으로 이것은 사실 일 필요가 있습니다 그리고 이것은 전형적이고 권장되는 사례입니다

당신이 아마 걱정하기 때문에, 대략 95 %의 사용자 최신 버전을 대상으로하지는 않습니다 Androids의 버전은 아직 그것을 개선하기 위해 노력하고 있습니다 DAN GALPIN : 목표를 변경하지 않으면 SDK가 버전 26 이상인 경우 런타임 권한과 같은 것을 처리해야하며, AlarmManager가 변경되어 다양한 방법으로 작동합니다 BroadcastReceiver 동작을 처리하려면, 배경 서비스를 피할 수 있습니다 ERIC KUXHAUSEN :하지만 좋은 기회가 있습니다

앱이 네트워크 및 배터리를 낭비 할 것이라는 점, 장치의 경험을 덜 빠르고 유동적으로 만듭니다 프레드 (FRED CHUNG) : 프리 -M 버전에서 마이 그 레이션하는 경우, 더 큰 변화 중 하나는 아마도 지원 일 것입니다 런타임 권한 런타임 권한은 실제로 사용자 개인 정보 보호 및 신뢰에 관한 것입니다 하지만 앱이 민감한 권한을 요청할 수도 있습니다

문맥 그리고 그것은 애플 리케이션을위한 좋은 일이다 누군가 당신의 앱을 설치하지 않기를 원하기 때문에 당신이 허락을 구하고 있기 때문에 하나의 특정 흐름에있는 민감한 정보 앱 내에서 따라서 우선, 모든 권한이 아닙니다 런타임 것들이 간단하고, 이것을 기억하기 쉽습니다 FRED CHUNG : 개발자는 걱정하지 않습니다

사용 권한을 생각할 수 있습니다 사용자는 이러한 광범위한 범주의 측면에서 볼 수 있습니다 그리고 당신이 가지고 있어야 할 첫 번째 질문 앱이 정말로 조항을 필요로하는지 여부입니다 결국 허가를 제거하는 것은 쉽습니다 자, 에릭, Play 스토어 앱에서 어떻게 처리 했습니까? ERIC KUXHAUSEN : 간단합니다

당신이해야 할 일은 앱이 시스템 이미지에 대한 권한을 미리 부여했습니다 FRED CHUNG : 그건별로 도움이 안돼, Eric ERIC KUXHAUSEN : 말하자면, 우리도 시도하고 사용합니다 가능한 한 이들 중 적은 수만큼 DAN GALPIN : 물론, 앱이 아직 준비되지 않았기 때문에 M을 타겟팅한다고해서 사용자가 가서 원하지 않는 권한을 비활성화하십시오

FRED CHUNG : 특별 권한이 있습니다 얻기 위해 사용자를 설정으로 리디렉션해야합니다 예를 들어, 오버레이 창 그리기, 또는 일부 행렬 권한이 될 수 있습니다 같은 화면 캡처 단 갈린 (DAN GALPIN) : 이제 UI의 작업으로, 런타임 권한은 실제로 활동이나 프래그먼트가 필요합니다

onRequestPermissionResult를 재정의 한 방법 자, 이것은 당신의 뷰 레이어, 활동과 파편과 같은 실제로 필요한 모든 사용 권한을 예상한다 다른 층에 의해 자, 대단한 변화가 있습니다 알람에 대해 이야기 해 봅시다

Android의 알람은 두 가지 기본 형식을 취합니다 앱이 스스로 깨어나도록 허용하는 리터럴 알람입니다 실시간 이벤트에 대한 알림을 전달하기 위해 당신을 깨우는 것과 같은 약속 또는 곧 예정된 약속 또는 그들은 일을 스케쥴링하는 방법입니다 앱이 종료 된 후 얼마 후에 발생합니다 Android 초기에는 단일 API였습니다

하지만 KitKat을 통해 AlarmManager가 정확하지 않게되었습니다 명시 적으로 요청되지 않은 한, 향후 작업 일정을 수립 할 때 더 좋습니다 이제 앱이 정확한 시간에 사용자에게 알릴 필요가 있다면, setExact 메소드를 추가했습니다 여기에 우리가 구현 한 곳이 있습니다 KitKat 이상에서이를 호출하는 지원 라이브러리의 메소드

ERIC KUXHAUSEN : Play 스토어에서 정확한 알람을 사용하지 않습니다 앱 우리가 사용하는 알람은 정확하지 않습니다 시스템이이를 더 잘 배치 할 수있게 해준다 배터리 및 시스템 상태

DAN GALPIN : 이제 Android Marshmallow Android를 유휴 상태로 만들 때 경보는 일반적으로 발화합니다 그래서 우리는 명백한 메소드 인 setExactAndAllowWhileIdle을 추가했습니다 알람을 울리면 장치를 깨울 수 있습니다 그리고 우리는 그 지원 라이브러리에 메소드를 구현했습니다 게다가

그리고 실제로 이전 지원 라이브러리를 호출합니다 이전 플랫폼 버전의 setExact 메소드 FRED CHUNG : 그래서 그 박람회가 끝나면, 테이크 어웨이는 꽤 간단합니다 맞습니까? WorkManager를 통해 향후 작업을 GCM 작업으로 옮기는 것을 고려하십시오 WorkManager는 새로운 작업 스케줄링 작업입니다 우리가 시작했다

DAN GALPIN : 이제 WorkManager는 Jetpack의 일부입니다 그리고 당신의 임무를 수행하는 가장 좋은 방법을 선택합니다 API 버전 및 앱 상태와 같은 항목을 기반으로합니다 안정적으로되면 권장 API가됩니다 우리가 무언가를 생각해 내지 않으면 그전에는 더 좋았어

ERIC KUXHAUSEN : Play 스토어에서 우리의 배경을 볼 수있었습니다 작업은 정기적으로 KitKat에서 2 % 더 많은 사용자에게 도달합니다 우리가 Firebase JobDispatcher를 채택했을 때, 단지 알람을 사용합니다 이렇게하면 시스템 상태 및 배터리 사용이 향상됩니다 알람을 사용해야 할 경우 가장 정확한 알람을 사용하십시오 너는 할 수있어

FRED CHUNG : 이제, 가장 정확한 경보, [INAUDIBLE]처럼 15 분마다 사용해야합니다 따라서 당신은 현명하게 그것들을 사용해야 만합니다 DAN GALPIN : 오, 예, WorkManager입니다 그럼 BroadcastReceiver에 대해 다시 이야기합시다 FRED CHUNG : 우리는 BroadcastReceiver에 대해 이야기해야합니까? DAN GALPIN : 우리는 그들에 대해 이야기해야합니다

FRED CHUNG : 그렇게하자 DAN GALPIN : 네 FRED CHUNG : 그래서 BroadcastReceiver, 저는 많은 사람들이 아마 그걸 알 것 같아, 그렇지? 플랫폼에서 알림을 보내고 실행하는 데 사용됩니다 시스템 전반의 이벤트에 대한 응답으로 Android에서 강력한 API를 제공하는 이유 중 하나입니다 서비스

DAN GALPIN : 이제 커다란 힘이 엄청난 책임입니다 그리고 이러한 엔드 포인트의 방식에 대한 응답으로 사용 된 경우 대부분이 더 이상 앱을 시작할 수 없으며, O를 목표로 한 번 이상 FRED CHUNG : 물론, 예외가 있습니다 안드로이드 맞지? 이들 중 상당수는 매우 드물게 발생하지만, 로케일 변경 등 또는 어떤 경우에는 아직 대안이 없습니다

그 (것)들을 필요로하는 apps를위한 방송에, 예를 들면, 그 USB 액세서리 것들처럼 브로드 캐스트 사용을 피하는 방법에 대한 예를 확인해 봅시다 따라서 직장에서는 적절한 실행을 설정하여 그렇게 할 수 있습니다 기준, 네트워크 서비스 요구, 그런 다음 우리는 기능을 가질 수 있습니다 이는 네트워크 상태 변경 수신 대기와 유사합니다

방송 그리고 매니페스트에 이와 같은 코드가 있다면 이전 버전의 Android에서는 연결 변경에 대한 리스너를 비활성화 할 수 있습니다 그냥 사용 안함으로 두십시오 그리고 나서, 당신은 무엇을 할 것입니까? 그런 다음 수신기를 설정하여 PackageManager의 ComponentEnableSetting입니다 ERIC KUXHAUSEN : 또 다른 예외 팩을 마친 후에 많은 작업을 수행해야하는 경우입니다

예를 들어 알람을 다시 예약하거나 업데이트 귀하의 데이터베이스 수신기를 등록 할 수 있습니다 action_my_package_replaced에 대한 매니페스트에서, 그것은 계속 작동합니다 앱을 겨냥한 명시적인 브로드 캐스트 중 하나 DAN GALPIN : 자, 정말로 필요하다면 모든 패키지 업데이트에서 어떤 작업을 수행하려면, 당신은 아마 당신이하지 않기 때문에 action_package_replace_events에서 더 이상 시작할 수 없습니다

그러나 우리는 getChangedPackages라는 API를 가지고 있습니다 앱에서 무엇을 볼 수있게 해주는 패키지는 이전 저장된 일련 번호 이후로 변경되었습니다 지금 인생에서 달리기는 대개 건강합니다 나는 아마 더 많이해야한다 하지만 Android 앱은 가능한 한 작게 운영되기를 원합니다

그리고 게으른 앱은 사실 더 나은 앱입니다 그리고 나는 선언문이나 뭔가를 만들어야한다 프레드, 우리가 실제로해야 할 일이 뭐라고 생각하니? FRED CHUNG : 나에게 좋은 소리 우선, 무엇에 대해 이야기 해 봅시다 그것은 전경에 있다는 것을 의미합니다

완전히 명백하지 않기 때문에 그렇습니까? 다음과 같은 몇 가지 일반적인 경우가 있습니다 앱이 사용자에게 표시되거나 사용자가 볼 때 전경 서비스를 사용하거나 앱이 전경 앱에 묶여있다 그래서 앱도 전경에 있습니다 이 예외적 인 경우에 앱이 보이지 않을 때 배경에 있습니다

표준 서비스를 실행하는 경우, 작업 서비스 또는 BroadcastReceiver 그리고 당신이 O +에있을 때 백그라운드에서 실행할 때 서비스 시작 IllegalStateException이라는 예외를 throw합니다 그것은 좋지 않다 DAN GALPIN : 이제 서비스를 시작할 수 있습니다

앱이 포 그라운드에 있습니다 그리고 그들은 약 1 분 동안 계속 달릴 것입니다 귀하의 앱이 배경으로 된 후에 그리고 이것은 특히 중요합니다 왜냐하면 O에서 시스템은 앱이 보유하고있는 모든 웨이크 잠금 장치 활동과 같은 활동적인 구성 요소가없는 경우 또는 서비스

O를 타겟팅하는 앱뿐만 아니라 모든 앱에 적용됩니다 FRED CHUNG : 앱이 여전히 작동하는 몇 가지 경우가 있습니다 포 그라운드라면 실행할 수 있음 예를 들어 알림에 대한 응답으로 서비스를 시작합니다 액션, 우선 순위가 높은 Firebase Cloud 메시지, 또는 MMS 또는 SMS 배달에 대한 응답으로 이제 몇 가지 솔루션을 살펴 보겠습니다

백그라운드 서비스없이 백그라운드에서 실행됩니다 DAN GALPIN : 우선, GCM 소방 작업을 사용하십시오 – 아! – 백그라운드 작업을위한 WorkManager 이제는 이것에 대한 많은 이유가 있습니다 여러 Android에서 일관된 API 서비스를 만듭니다 예를 들어, 버전

ERIC KUXHAUSEN : 또는 당신이 가진 것에 대해별로 신경 쓰지 않는다면 앱은 플랫폼간에 일관되게 작동하며, 또는 최소한의 작업량으로 O로 이동하려는 경우, JobIntentService를 사용할 수도 있습니다 DAN GALPIN :하지만 진지하게 WorkManager 사용을 고려하십시오 제약 조건을 활용하고 삶을 편하게 만듭니다 ERIC KUXHAUSEN : Google Play 스토어 앱 WorkManager를 사치스럽게 사용하지는 않았지만, 왜냐하면 그것은 아직 존재하지 않았기 때문입니다 그건 우리가 JobScheduler와 Firebase를 사용해야한다는 것을 의미했습니다

JobDispatcher 자, 우리가 처음 배운 것은 Android L에서 JobScheduler를 사용하려면, 당신이 정말로 어떻게 이해하지 못한다면 다음과 같은 경우 알람이 울리며 작동합니다 예상대로 작동하지 않습니다 또한, 대안을 사용하십시오 예를 들어, L과 M의 첫 번째 릴리스에서, JobScheduler는 실제로 당신의 업무를 수행하지 않을 것입니다

동일한 제약 조건이 충족 된 두 개의 작업이없는 한 두 가지 작업을 예약하여이 문제를 해결할 수 있습니다 일치하는 제약 조건 DAN GALPIN :하지만 WorkManager처럼 진지하게 FRED CHUNG : WorkManager ERIC KUXHAUSEN : JobScheduler의 상황이 훨씬 나아졌습니다

M, MR1 이상 그러나, 또 다른 특질은 당신이 최소 대기 시간을 0으로 설정하는 것을 피해야합니다 이것은 오버라이드를 방해 할 수 있습니다 일부 릴리즈의 마감일 재정의 기한은 당신의 일은 일정 기간 동안 계속됩니다

제약 조건이 충족되지 않더라도 DAN GALPIN : 아니면 그냥 사용할 수 있습니다 실제로 작동하지 않는 WorkManager 재정의 기한이있다 하지만 당신이해야 할 일은 두 번째 직업을 예약하는 것입니다 비슷한 기능을 수행하는 워치 독으로 ERIC KUXHAUSEN : 여기에 몇 가지가 있습니다 JobScheduler 또는 WorkManager를 사용할 때 고려해야합니다

Android는 캡 티브 포털과 [INAUDIBLE]을 감지하려고 시도하지 않습니다 조건, 그러나 불완전한 예술이다 또한 Android는 간혹 네트워크 전에 앱을 깨우십시오 앱에서 사용할 수 있습니다 이것이 의미하는 바는 적절한 오류 처리가 필요하다는 것입니다 일자리를 재조정하는 일

Play 스토어에서 지수 백 오프를 추가하면 우리의 일에, 우리는 19 % 더 성공적인 배경 작업을 보았습니다 여기에서 핵심은 시스템이 작동하도록 허용합니다 동일한 작업으로 일정을 다시 잡는 실수를 저지르기 쉽습니다 ID, 시스템 백 오프도 사용합니다 이는 백 오프 속도를 방해하거나 재설정 할 수 있습니다

DAN GALPIN : 또는 WorkManager에서 – 사실, 그래, 그러지 마라 같은 결과가 있기 때문에 프레드 (FRED CHUNG) : PendingIntents를 사용하면 PendingIntent를 변경할 수 있습니다 서비스 대상에서 BroadcastReceiver 대상 이제 작업이 30 초 이내에 실행되면, goAsync를 호출하고 작업을 바로 실행할 수 있습니다

BroadcastReceiver에서, 그건 그렇고, 뭔가를 끝내는 초경량 방법입니다 네트워크 또는 wakelocks가 보장되지는 않습니다 그래서 아직도해야 할 일이 많이 있습니다 DAN GALPIN : BroadcastReceiver에서 일정 잡기 WorkManager를 사용하여 프레드 (FRED CHUNG) : 그렇다면 외부에 즉각적인 사용자가 필요한 시간에 민감한 이벤트를 유발했습니다

관심, Firebase Cloud 사용 고려 앱에 알림 메시지 FCM은 높음 및 보통 우선 순위 메시징을 지원합니다 우선 순위가 높은 메시지의 경우 장치가 졸음에서 깨어 나면 많은 것을 의미합니다 시스템 건강에 좋지는 않을 것입니다 작업이 10 초 이내에 실행될 수 있다면, 바로 실행할 수 있습니다

또는 다음을 사용하여 작업을 예약하십시오 DAN GALPIN : WorkManager 실제로 전경 서비스 요구되거나 요구된다 이상적으로는 사용자가 시작한 작업입니다 오랜 시간 동안 뛰고 싶다

사용자에게 일종의 지속적인 업데이트를 제공합니다 예는지도, 탐색 피트니스 추적, 주악 ERIC KUXHAUSEN : Play 스토어에서 우리는 앱을 복원 할 때 전경 서비스 사용 장치를 설치 한 후 응답 시간이 길기 때문에 OK입니다 사용자 상호 작용 DAN GALPIN :하지만 음악을 듣는 것만 큼 재미있는 것은 아닙니다 FRED CHUNG : 좋은 소식은이 다른 것들이 이미 귀하의 애플 리케이션에 영향을 미칩니다

그러나 아마도 당신은 아직 눈치 채지 못했을 것입니다 그 따라서 Android N에서 새로운 사진 방송 더 이상 발생하지 않지만 TriggerContentUris로 대체 할 수 있습니다 일자리를 구하는 것은 일을 의미합니다 새로운 WorkManager API를 사용하면 다음과 같습니다

DAN GALPIN : 이제 앱이 백그라운드에서 실행중인 경우 Android O + 기기에서 위치 시스템 서비스 앱의 새 위치를 자주 계산하지 않으며, 앱이 더 자주 업데이트를 요청하더라도 백그라운드 앱에 대해서만 전체 Wi-Fi 스캔도 수행됩니다 매시간 몇 번 따라서 더 자주 전화를받는 경우 Wi-Fi 관리자 [INAUDIBLE] 실제로는 캐시 결과 만 제공하면됩니다 이제 사용자 도달 시간을 알아야하는 경우 특정 위치, 지오 펜싱 사용 자, 활성화 될 수있는 지오 펜스는 단지 100 개뿐입니다

그래서 당신이 그것보다 더 많은 사이트를 필요로한다면, 실제로 지역 지오 펜스를 사용할 수 있습니다 필요에 따라 다양한 지오 펜스 세트를 교환 할 수 있습니다 이제, 그것은 말하고 있습니다 – 비컨은 굉장합니다 주변 알림을 사용할 수 있습니다 API

특히 중요합니다 네가 특정 다작의 커피 공급업자라면 ERIC KUXHAUSEN : 배치 버전을 사용할 수도 있습니다 FusedLocationProvider의 최대 위치 업데이트 지정 귀하의 유스 케이스에 수용 가능한 대기 시간

그리고 시스템은 배치 업데이트를 시도 할 것이고, 앱의 빈도가 줄어 들었습니다 이렇게하면 배터리 사용이 최적화됩니다 수동 위치를 사용할 수도 있습니다 이를 통해 앱을 기회주의 적으로 피기 백 가능하게합니다 다른 앱의 위치 업데이트에서 가장 빠른 속도로 업데이트 지정된 간격

하지만 앱의 위치 업데이트가 네트워크와 같은 값 비싼 작업에 묶여 있어야합니다 전화를 걸면, 당신도 그들을 억제해야합니다 FRED CHUNG : 따라서 일괄 배치와 수동적 위치를 통해, 우리는 힘으로 위치 업데이트로 작업 할 수 있습니다 효율적인 방식 다음으로 몇 가지 관련 개선 사항을 살펴 보겠습니다

플랫폼에서 그래서 안드로이드의 과거 여러 버전에서, 우리는 일련의 배터리 최적화 기능을 도입했습니다 백그라운드 작업을 연기하고 제한하는 것을 기반으로합니다 따라서 이미 이들 중 일부에 익숙 할 것입니다 예를 들어, 장치가 도즈 (doze) 장치가 연결되지 않은 경우 및 장치가 연결되지 않은 경우 꽤 오랫동안 사용되었습니다

졸작에서 앱은 보류중인 모든 것을 끝내야합니다 정기적 인 유지 관리 기간의 일부 작업 DAN GALPIN : N +에서 이동 중에 doze가 연장됩니다 장치가 사용자의 주머니에 앉아있을 때와 같은 경우 자, app standby는 M에서 소개되었습니다

세금 제한을 부과하는 곳 앱 사용시 ERIC KUXHAUSEN : 브랜드에 대한 새로운 정보를 알려 드리겠습니다 Android P에서 사용 기반 제한 보다 세분화 된 방식으로 적용됩니다 이전 I / O에서 이미이 사실을 알았을 수도 있습니다 "앱이 사용자의 배터리를 소모시키지 않도록하십시오

" 앱이 앱의 대기 버킷 중 하나에 추가됩니다 사용량에 따라 시스템이 점차적으로 더 많은 제한을 앱에 적용합니다 활성에서 희귀 한 양동이로 이동함에 따라 또한 배터리 절약 기능이 향상되었습니다 사용자가 확장 할 수 있습니다 다른 모든 것보다 배터리 우선 순위를 지정하여 배터리 수명을 늘립니다

이로 인해 기능이 다소 저하되며, 사용할 수없는 위치 요청과 같은 화면이 꺼져있을 때 그러나이 모드는 정말 유용합니다 당신의 장치가 조금 더 오래 지속될 필요가있을 때 FRED CHUNG : 방금 이야기 한 기능 앱의 알람에 부가적인 영향을 주며, 작업, 동기화, 네트워크 액세스 및 FCM 메시지를 표시합니다 그래서 우리는 모든 사람들에게 이러한 시나리오를 철저히 테스트 귀하의 응용 프로그램 내에서

DAN GALPIN : 좋은 소식은이를위한 도구가 있다는 것입니다 예를 들어,이 ADB 명령 장치를 유휴 상태로 만들면서 모든 응용 프로그램을 잠잠하게 만듭니다 ERIC KUXHAUSEN : 애플리케이션 대기를 테스트하려면, 먼저 장치의 연결을 시뮬레이트합니다 그런 다음 get 및 set inactive 명령을 사용할 수 있습니다 앱 대기 상태에서 기기를 가져오고 나가기

FRED CHUNG : 앱 대기 버킷의 경우, 당신은 주어진 꾸러미에 대한 버켓을 가져 와서 설정할 수 있습니다 비슷한 광고 명령 하지만 플러그를 뽑는 것을 기억하십시오 테스트하기 전에 장치 또한이를 수행 할 수있는 프레임 워크 API가 있습니다

마지막으로 배터리 세이버를 테스트하는 명령입니다 한 가지 유의점은 앱의 UI에 어두운 테마가있는 경우, 어두운 테마 사용을 고려해 볼 수 있습니다 배터리 세이버가 전원을 절약하기 위해 추가로 켜지면 OLED 장치 PowerManager를 통해 API로 확인할 수 있습니다 그리고 방송을 듣고 그렇게해라

DAN GALPIN : 그래서, 많은 방법들이 있습니다 백그라운드에서 멋진 앱을 만들기 위해 전경 서비스를 사용하지 않고 WorkManager의 새로운 기능을 활용하십시오 효율적인 위치 전략 사용, 새로운 API 사용, 우리에게 무엇이 아닌지 알려주십시오 피드백을 제출하여 귀하의 요구를 충족 시키십시오

이슈 트래커를 통해 프레드 (FRED CHUNG) : 그래서, 아마 목표를 업데이트하는 중이다 SDKs, 모두 좋다 당신이 그것에있는 동안, 우리는 Android에서 선택한 최신 기능을 확인해보십시오 사용 사례와 관련이 있습니다 예를 들어 알림 채널을 추가해야합니다

귀하의 앱에 O 그렇지 않으면, 음, 알림 그냥하지 않습니다 쇼, 좋지 않을 것입니다 채널을 신중하게 계획하여 사용자가 선택적으로 할 수 있도록하십시오 원치 않는 알림을 끄십시오 DAL GALPIN : 한장 뒤로 젖히십시오

ERIC KUXHAUSEN : Play 스토어가 구현 된 기기에서 알림 채널 지원, 우리는 더 적은 비율의 사용자를 사용할 수 없게됩니다 우리의 모든 통지 DAN GALPIN : 앱에서 반투명 상태 표시 줄을 사용하는 경우, 삽입 된 API를 사용하여 코드에서 상태 표시 줄이 고정되어 있다고 가정하지 않습니다 크기 이제 탐색 서랍을 사용하는 경우, 이것은 실제로 실제로 일반적입니다

이제 P를 타겟팅하면 그 컷 아웃 영역에서 흥미로운 것을하십시오 이제 공익 광고 발표, 당신은 당신의 시스템을 넣을 필요가 없습니다 당신의 유일한 장치에 이미지 한동안 에뮬레이터를 사용하지 않았다면, 그것은 꽤 굉장합니다 최근에는 초고속 로딩에 대한 지원을 추가했습니다

P 개발자가있는 모든 장치에서 AR 지원과 함께 시스템 이미지 미리보기, DisplayCutout 시뮬레이션 가능 개발자 옵션을 통해 이것으로 공익 광고가 종료됩니다 FRED CHUNG : 좋아 그래서, 종횡비 화면 따라서 OEM이 출하하는 추세가되었습니다 16보다 긴 화면이있는 이러한 기기 화면 비율 9

앱이 몰입도 높은 경험을 제공하는지 확인하세요 이러한 화면 기능을 최대한 활용할 수 있습니다 그것은 꽤 굉장하다 따라서 최후의 수단으로 시스템은 여전히 ​​사용자를 제공합니다 지원되는 최대 종횡비를 선언하는 방법

하지만 응용 프로그램 주위에 레터 박스가 표시됩니다 ERIC KUXHAUSEN : 진지하게, 정말로 편지함을 원하십니까? DAN GALPIN : 더 큰 화면에서 책임감이 커집니다 자, 그림 활용을 고려해보십시오 화상 채팅, 영화 재생, 체력 추적 또는 Pokemon Go로 이동합니다 다중 디스플레이 지원은 또한 사용자가 애플리케이션에 대한 활동을 시작하는 방법 두 번째 디스플레이에

그리고 여기서 정말로 고려해야 할 유일한 것 그것이 두 번째 구성을 가지고 있는가? 가장 가능성이 큰 1 년 앱과 다를 것입니다 따라서 애플리케이션 전반에 걸친 가정을하지 않도록주의하십시오 근면 한 구성에 대해 결론적으로 Android 개발 최신 도구 및 API를 사용하여 더 나은 배터리 수명, 더 매끄러운 멀티 태스킹, 최신 하드웨어 및 플랫폼 기능 지원, Jetpack을 활용하여 구축 현대적이고 검증 가능한 아키텍처 고맙습니다

괜찮아 사실, 안돼, 안돼, 안돼 실제로 한 가지 더 있습니다 Android가 실제로 사용을 제한하고 있습니다 개발자 미리보기 1의 일부 비 SDK 인터페이스 그리고 당신은 이것을 보았습니다

우리가 실제로 토스트와 로그 엔트리로 너에게 경고했다 이 방법이 사용 된 경우 그러나 DP2에 대해 테스트한다면, 이 방법 중 일부는 작동을 멈추고, 앱이 다운 될 수 있습니다 따라서 문제가 있으면 테스트하고 파일을 보내주십시오 앱이 할 수있는 어떤 방법도 있다고 생각하지 마라

이러한 방법 이외의 작업 그리고, 당신을 미래에 돕기 위해, 우리는 실제로 StrictMode에 대한 새로운 VM 정책을 추가했습니다 SDK API가 아닌 모든 API를 켜고 감지하는 데 사용할 수있는 사용법은 정말로 중요합니다 이 비 SDK 사용은 실제로 당신의 도서관에서 일어나고 있습니다 그래서 실제로 확인하는 것은 정말 좋은 방법입니다

귀하의 앱은 앞으로도 호환 될 것입니다 우리는 비 SDK의 호환성을 보장하지 않기 때문에 API 그래서 이제 그게 사실입니다 지난 30 일에 관심을 기울이지 않았다면 분, 내 농담이 분명히 필요하기 때문에 괜찮습니다 ERIC KUXHAUSEN : 엔지니어라면 희망이 있습니다

오늘 공유 한 정보 중 귀하의 리뷰가있었습니다 그리고 유용한 정보를 찾길 바랍니다 프레드 (FRED CHUNG) : 그렇다면 PM입니다 26을 목표로 삼아, 계획을 세우는 것은 너무 늦지 않았습니다 팀과 협력하여 필요한 작업량을 파악합니다

그리고 실제로, 우리는 가이드를 준비했습니다 Android 개발자 사이트에서 사람들이 이해하고, 현재 릴리스, 필요한 작업량, 우리는 집합 적으로 생태계를 발전시킬 수 있습니다 고맙습니다 [음악 재생]

Level Up with Data Binding (Android Dev Summit '18)

[음악 재생] DAN GALPIN : 데이터 바인딩으로 레벨 업 2015 년에 데이터 바인딩이 도입되었을 때 – 그리고 나는 아무것도 읽을 수 없으므로 여기서부터 할 것입니다 – 내 반응이 꽤 컸어

우리가 뭘 했니? XML 값 내부의 표현과 마찬가지로 이것은 일종의 견해입니다 그러나, 결과적으로 데이터 바인딩은 매우 멋지다 그리고 나는 단지 내 이해를 높이기 만하면되었다 그리고 내가 데이터 바인딩에 대해 좋아하는 한가지 실제로 얼마나 많이 사용하고 싶은지 선택할 수 있습니다 따라서 초급 단계에서 즉각적인 이점을 얻을 수 있습니다

FindViewById를 피하는 것과 같습니다 그러나 그것은 시작입니다 중간 수준에서, 당신은 실제로 사용자 지정 바인딩 어댑터 같은 것을 얻으십시오 그리고 관측 가능성, 전문가 수준에서, 실제로 양방향 데이터 바인딩이 있습니다 또한이 방법을 사용하면 관찰 가능성을 적용 할 수 있습니다

데이터에서 UI까지뿐만 아니라 UI에서 데이터까지 먼저, FindViewById를 없애자 [건배] 정확하게 먼저 데이터 바인딩을 활성화해야합니다 이제이 작업을 수행하기 만하면됩니다

설정 데이터 바인딩 활성화는 귀하의 Gradle 파일에서 true와 동일합니다 그리고 나서이 작은 레이아웃을 넣어야합니다 파일 주위의 래퍼 Android Studio에서 실제로 그렇게 할 수 있습니다 작은 전구에서 당겨서 자동으로 지금 당장 아이콘을 클릭하고 데이터 바인딩 레이아웃으로 변환합니다

꽤 멋지다 이제 바인딩은 실제로이 객체입니다 당신은 데이터 바인딩 유틸리티를 사용하여 레이아웃을 부 풀리게됩니다 그리고 속성과 청취자를 설정하기 만하면됩니다 이거 꽤 멋지네

하지만 솔직히 말해서 당신이 실제로이기 때문에 이것을 사용하십시오 실제 데이터 바인딩을 사용하려고합니다 이제 표현식을 바인딩하는 것에 대해 이야기 해 봅시다 그리고이를 위해 우리는 실제로 레이아웃에 데이터를 사용할 수 있도록해야한다 레이아웃의이 데이터 섹션에서 변수를 선언합니다

그리고 레이아웃 XML 속성에서 표현식을 사용할 수 있습니다 실제로 해당 데이터를 뷰에 연결합니다 이제 표현식은 실제로 중괄호로 묶입니다 @ 접두어가 붙습니다 다음은 데이터 바인딩 표현식의 몇 가지 예입니다

다시 말하지만,이 첫 번째 텍스트 속성을 할당합니다 뷰 모델 속성에 추가합니다 두 번째 예제에서는 맞춤 속성 (높이 0)을 사용하고 있습니다 그리고 세 번째 것에서 우리는 실제로 텍스트보기를 지나가는 람다 사용하기 같은 전화 그리고이 네 번째 것에서 우리는 실제로 텍스트 속성과 같이 호출하는 람다 사용 우리의 레이아웃에 다른 관점의

따라서 실제로 다른 뷰를 참조 할 수 있습니다 그것들을 통과 시켜라 그것은 꽤 근사하다 이제 ViewModel 엔진에 대한 데이터 바인딩 액세스를 제공하기 위해, 우리는 이처럼 바인딩 객체를 설정합니다 레이아웃을 부 풀린 후

매우 간단합니다 그리고 이제 뷰 모델을 해당 레이아웃에서 사용할 수 있습니다 그러나 진정한 질문은 이것이 모두 어떻게 작동할까요? 그리고 대답은 물론입니다 데이터 바인딩에는 마술이 없습니다 그러나 마술처럼 보입니다

우리가 내장 된 바인딩 어댑터가 있기 때문입니다 거의 모든 것을 다뤄 라 따라서 프레임 워크에 대한 모든 호출을 데이터 바인딩으로 바인딩 어댑터에서 실제로 만들어집니다 마법은 없습니다 실제로 코딩을 볼 수 있습니다

디버거를 사용하십시오 그것을 탐색 할 수 있습니다 메서드의 첫 번째 줄은 필요한 경우 변경 사항을 확인하여 UI 만 업데이트합니다 마지막 줄은 실제로 우리가 찾고있는 텍스트입니다 그리고 데이터 바인딩으로 제공되는 많은 어댑터가 있습니다

또한 지능적이고 일관되게 작동합니다 이러한 모든 관점에서 이제 이러한 소스 파일을 살펴보십시오 나만의 풍습을 짓는 데 도움이 될 것입니다 바인딩 어댑터 일이 흥미 로워지기 시작합니다 이제 어댑터 바인딩 101에 대해 살펴 보겠습니다

@BindingAdapter로 주석 된 어댑터 하나 이상의 속성 이름을 취합니다 어댑터 메소드는 뷰를 첫 번째 매개 변수로 사용합니다 뷰의 하위 클래스를 사용하여 제한합니다 특정보기 유형으로 추가 매개 변수는 다음과 같습니다 바인딩 표현식의 데이터면과 일치합니다

어댑터는 데이터 유형별로 다를 수 있습니다 어댑터를 사용하여 동작을 재정의 할 수도 있습니다 내장 속성의 경우 이제 모든 이미지 사용로드 소스 매개 변수가 설정된 활공을 사용합니다 하지만 이걸 조심해야 해 이것이 모듈 글로벌이기 때문입니다 그래서 정말 멋진 부작용이있을 수 있습니다

이것에 대해 당신은 기대하지 않을 것입니다 우리는 또한 많은 것들을 할 수 있습니다 고급 바인딩 어댑터 때로는 그 오래된 가치가 정말로 중요합니다 색상 변경 리스너와 같이

따라서 동일한 매개 변수 유형을 사용하는 경우 행의 두 매개 변수에 대해 바인딩 컴파일러는 실제로 이전 값을 첫 번째 값으로 전달했습니다 업데이트 된 것이 뒤 따른다 또한 여러 속성을 사용할 수도 있습니다 이 이미지보기 에서처럼 멋지다 따라서 실제로 여러 속성을 정의 할 수 있습니다

바인딩 어댑터를 선언 할 때 그리고 나서 그것들은 모두 여러분의 코드에서 사용할 수 있습니다 실제로, 당신이 그것을보고있는 것처럼 이제 관측 가능성도 꽤 좋습니다 실제로 LiveData를 사용하여 자동으로 수행 할 수 있습니다

관측 그래서 이것은 꽤 멋지다 우리는 사실 여기에 불변 클래스를 노출하고 있습니다 이것의 예와 함께 그리고 뒷받침 필드는 변경 가능하거나 조정자가 될 수 있습니다

LiveData 그런 다음 LiveData를 노출합니다 Kotlin getters 공격을 사용합니다 그런 다음 한 가지 추가 변경 작업을 수행해야합니다 실제로 라이프 사이클 소유자를 설정해야합니다

따라서 뷰 모델에서 LiveData를 관찰 할 수 있습니다 정확한 범위로 괜찮아 마지막으로, 양방향 데이터 바인딩 솔직히 이건 정말 사소한 일입니다 실제로 LiveData를 사용할 때

이제 단방향 데이터 바인딩을 두 가지 방법으로 사용할 수 있습니다 이 확인란의 예와 같습니다 하지만 실제로 양방향 데이터 바인딩으로이를 호출 할 수 있습니다 @ =를 사용하여 그리고 가장 중요한 부분은 LiveData를 실제로 관찰 할 수 있다는 것입니다

따라서이 경우에는 불변의 LiveData를 노출하는 것이 좋습니다 그것은 우리의 견해에 의해 수정 될 것이기 때문입니다 그런 다음 라이프 사이클 소유자를 설정하고 @ = 확인란의 표기법 이것이 양방향 데이터 바인딩입니다 어쨌든 그렇게 전문적이지는 않습니다

자세한 내용을 보려면 데이터를 확인하십시오 바인딩 코드 랩 및 설명서 on AndroidAndroidcom [음악 재생]

Device provisioning and authentication with Android Things (Google I/O '18)

[음악 재생] DARREN KRAHN : 우리 이야기에 오신 것을 환영합니다 오늘 장치 프로비저닝 및 인증에 대해 Android 관련 콘텐츠

내 이름은 대런이야 저는 소프트웨어 엔지니어입니다 그리고 안드로이드에 대한 보안 작업도합니다 WAYNE PIEKARSKI : 멋지다 그래서 저는 Wayne Piekarski입니다

저는 Android Things와 IoT에 대한 개발자 옹호자입니다 그리고 오늘 우리의 대화에와 주셔서 감사합니다 그리고 오늘, 우리는 당신에게 전략에 대해 이야기 할 것입니다 귀하의 IoT 장치를 인터넷에 연결하는 방법, 클라우드 및 기타 모든 것 그래서 우리는 모든 과정을 끝까지 마칠 것입니다

그리고 우리는 Google 소프트웨어가 어떻게 Android Things, Firebase 및 Cloud IoT와 같은 플랫폼 핵심,이 작업을 훨씬 쉽게 할 수 있습니다 그래서 많은 사람들이 알고있을 것입니다 그리고 그게 바로 당신이 오늘 여기 온 이유입니다 그리고 그것은 우리가 이전에 본 것보다 더 커질 것입니다 그래서 우리가 전화를 본 것과 똑같은 방식으로 PC보다 더 큰, 나는 우리가 가고 있다고 생각한다

IoT 디바이스가 그보다 훨씬 큰 수주를보고 있습니다 우리는 IoT 장치들로 둘러싸여있을 것입니다 온갖 일을하는 매일 매일 우리를위한 다양한 업무가 있습니다 그리고 단지 하나의 장치가 될 수는 없습니다 당신은 수십 또는 수백 가지를 가지려고합니다

모든 종류의 흥미로운 일을하고 있습니다 오늘은 아이디어에 대한 몇 가지 힌트를 드리겠습니다 이러한 종류의 IoT 디바이스를 가장 효과적으로 구축하는 방법에 대해 연결 방법, 보안 방법 등을 설명합니다 먼저 Android Things의 기본 사항을 살펴 보겠습니다 바라건대, 대부분의 사람들이 소개 토크를 보았습니다

그렇지 않다면, 우리는 많은 회담을 갖고 있습니다 여기 안드로이드가 무엇인지 커버하는 IO에서 하지만 안드로이드 것들의 핵심 개념 모듈에있는 시스템을 기반으로한다는 것입니다 그 위에 이미지에 표시됩니다 작은 작은 보드입니다

SOM에는 CPU, Wi-Fi, 메모리가 포함되어 있습니다 보드 지원 패키지라고 부르는 것에 의해 지원됩니다 그리고 이것은 드라이버, 커널, 라이브러리, 그리고 모든 것 또한 Google의 업데이트 및 보안 기능도 제공합니다 Android Thing SOM을 사용하여 개발자가 IoT 장치를 쉽게 만들 수 있습니다

보안을 유지하는 데 도움이됩니다 최신 상태로 유지되는 이유는 소비자가 지금 필요로하는 것들이다 그들의 장치와 Android Things를 고유하게 만드는 또 하나의 기능 정말 강력한 유형을 지원한다는 것입니다 장치에서 처리 중입니다

따라서 클라우드에서 일할 필요가 없습니다 하지만 당신은 비디오 및 오디오 처리를 할 수 있습니다, 당신은 기계 학습을 할 수 있고, 모든 것을 할 수 있습니다 전화 수준의 CPU 성능을 갖추고 있기 때문에 이 Android Things SOMs 다른 하나는 Android를 기반으로한다는 것입니다 따라서 모든 친숙한 개발자 도구를 사용할 수 있습니다

당신이 익숙한 Android Studio 및 모든 Android 개발자 인 경우 보유하고있는 기존 코드입니다 Android를 사용하면 집에서 바로 즐길 수 있습니다 이전에 Android 개발을 완료했다면 IO에서 다른 많은 대화가 있습니다 그것에 대해 자세히 알기 위해 갈 수 있습니다 하지만 오늘 우리가 집중해야 할 것은 우리가이 모든 것을 어떻게 활용할 수 있느냐입니다

Android 기기와 함께 제공되는 IoT 기기를 더 쉽게 만들 수 있습니다 그리고 당신을 위해 더 잘 그래서이를 염두에두고 예제를 살펴 보겠습니다 이 강연을 통해 우리가 사용할 내용 우리가 무슨 말을하고 있는지 설명해 주려고 그래서 우리는 IoT 세척을 할 것입니다

왜 안되니? 그리고 모두가 기계 학습을 사용하게되어 기쁩니다 및 TensorFlow 그래서 세탁기를 사용해야합니다 기계 학습을 온보드합니다 빨래를 보는 카메라가 있어야합니다

그리고 옷을 빨고있는 동안, 기계 학습 알고리즘을 수행합니다 그것이 얼마나 깨끗한 지 분석합니다 그리고 세탁물이 어떻게 보이는지 볼 수 있습니다 일할 때 씻겨서 이런 일이 일어나는 것을 보는 데 관심이 있습니다 그래서 우리는 우리의 신제품 "TensorWash"를 부를 수 있다고 생각합니다

그래서 우리가이 "TensorWash"세탁기를 만들 때, 대부분의 세탁기에는 전면에 제어판이 있습니다 여전히 수동으로 제어하기를 원하기 때문입니다 이제 Android Things가 지원하기 때문에 정말 강력한 기기라면 앞면에 스크린이있다 OpenGL을 실행할 수 있습니다 비디오와 오디오를 재생할 수 있습니다

그게 당신이 만들 수있는 하나의 선택입니다 기계의 호화로운 모델입니다 그러나 비용을 줄이려면 저렴한 IoT 세탁기를 만들기 위해, 그러면 디스플레이를 없애기를 원할 것입니다 그래서 우리는이 예제를 위해 이것을 남겨 둘 것입니다 그래서 머신은 IoT가 가능해질 것입니다

정면에 몇 개의 버튼이 있습니다 하지만 거의 모든 일이 진행되고 있습니다 우리는 전화를 통해 통제 할 수 있습니다 얘기 좀하려고합니다 그래서이 기계의 진정한 마법 그것이 인터넷에 연결되었을 때입니다

따라서 원격으로 장비를 모니터링 할 수 있습니다 카메라가 보는 것을 볼 수 있습니다 다음과 같은 경우 세탁주기를 시작할 수 있습니다 집에서 운전할 때, 직장에있을 때 그래서 사용자는 집에 없으며 그들은 잠재적으로 세계 어느 곳에 나있을 수 있습니다

그래서 우리는 그것을 단지 존재로 제한하고 싶지 않습니다 집안에있는 것이 가까운 곳에서 통제됩니다 따라서 우리는 인터넷 클라우드 기반 연결이 정말로 필요합니다 그 뒤에 어떤 종류의 클라우드 솔루션이 있습니다 그리고 모든 종류의 재미있는 기능을 추가 할 수 있습니다

클라우드를 지원함으로써 그래서 우리는 점수를받을 수 있습니다 옷을 씻지 않거나 물을 너무 많이 낭비하지 않기 때문입니다 서비스 부서에 결함을보고 할 수 있습니다 그리고이 모든 것을 지원하기 위해서, 기계는 Wi-Fi를 필요로합니다 그리고 우리는 단지 막힘으로 속일 것입니다

그것으로 이더넷 케이블에 그래서 우리는이 세탁기를 가지고 있습니다 우리는 클라우드에 연결할 필요가 있습니다 그리고 우리는 클라우드와 상태를 공유해야합니다 전화가 장치를 제어 할 수 있도록 따라서 가능한 많은 클라우드 서비스가 있습니다

우리는 오늘 그들 중 몇 사람에 대해 이야기 할 것입니다 그러나 첫째로, 이런 종류의 일을하기 위해서, 먼저 네트워크에 장치를 가져와야합니다 요즘 많은 기기들이 Wi-Fi를 기반으로하고 있습니다 장치에는 SSID와 암호가 필요합니다 네트워크에 가입하십시오

많은 장치에는 키보드 또는 디스플레이가 없습니다 우리 세탁기의 경우처럼, 그래서 모든 것이 전화로 처리되어야합니다 그리고 우리가 전화를 사용한다면, 그 장치는 Wi-Fi 액세스 포인트를 자체적으로 구동해야합니다 전화가 연결됩니다 모든 로그인 [INAUDIBLE]을 보냅니다

그런 다음 장치가 네트워크에 다시 연결됩니다 그 정보를 사용합니다 어떤 이유로 든 잘못 될 경우, 전화는 무슨 일이 일어 났는지 알 수있는 방법이 없습니다 그래서 매우 섬세한 과정입니다 따라서 일부 전화기 또는 Wi-Fi 네트워크에서는 문제가 될 수 있습니다

그리고 많은 개발자들이이 도전이 올바른 것으로 생각합니다 그래서 우리는 몇 가지 힌트를 통해 이걸 더 좋게 만들려고 다음으로, 장치는 장치 소유자는 누구인가? 그래서 당신은 장치가 보이는지 확인하고 싶습니다 장치 소유자와 다른 사람 만 제어 할 수 있습니다 그들이 신뢰하는 것

그래서 우리는 어떤 종류의 인증 토큰이 필요합니다 서버에서 발급 받아야하는 그런 다음 사용자가이 토큰을 제어하는 ​​데 사용합니다 우리는 그것을 장치에 두었습니다 그런 다음 기기가 연락하기 위해 사용하는 것입니다 인터넷과 구름

사용자 팩토리가 장치를 재설정하면, 우리는이 토큰과 그 밖의 모든 것을 잊을 필요가 있습니다 그런 다음 기기가 자체적으로 재설정되어야합니다 다른 사용자가 기계를 사용할 수 있도록 이전의 역사는 보존되어 있지 않습니다 이제는 우리의 "TensorWash"가 모두 연결되어 갈 준비가되었습니다 따라서 전화, 장치 및 클라우드가 모두 통신 할 때, HTTPS와 같은 TLS 연결을 통해이를 수행합니다

그렇게 안전하다는 것은 매우 중요합니다 우리는 도청을 중앙에두고 싶지 않습니다 일반적으로 Google 서비스에는 요즘 HTTPS가 필요합니다 그리고 우리는 실제로 이것을 기본적으로 시행하기 시작했습니다 그래서 우리는 당신을 위해 더 힘들게 만들고 있습니다

모든 보안 때문에 암호화되지 않은 연결을 사용하는 방법 의미 그리고 이런 장치를 만들 때, 모든 사람들이 적절하게 보안을 유지합니다 작은 IoT 회사들조차도 정말 간단한 장난감이나 뭐든간에, 왜냐하면 모두가 항상 자신의 장치가 문제가되지 않을 것이라고 생각합니다 작은 문제조차도 예상치 못한 영향을 미칠 수 있습니다 너는 나중에 꿈도 꾸지 않았다고 기기가 전 세계에 출시되면 그게 전부입니다

그것은 당신이 무엇을 할 수 있는지에 대한 핵심 개념입니다 우리가 만들고있는 세탁기를 가져올 필요가있다 클라우드에 연결하도록하십시오 Wi-Fi를 설정해야합니다 자격 증명을 전송해야합니다

그런 다음 암호화와 연결해야합니다 그러나 실제로는 훨씬 더 많습니다 그래서 내가 할 일은 내가 갈거야 대런에게 주요 개념의 일부에 대해 깊은 잠수를 할 수 있도록 여기에 약간의 설명이 있습니다 무슨 일이 일어나고 있는지

DARREN KRAHN : 멋지다 그래서 한 걸음 뒤로 물러나서 몇 가지 이야기하고 싶습니다 우리가 사용하는 핵심 개념들 장치 들간의 안전한 관계를 수립하고, 근본적으로 우리가하는 일입니다 우리가 장치를 제공 할 때 이러한 개념은 뚜렷하지만 매우 얽혀 있습니다

실제로 볼 수 있듯이 나는 인증, 권한 부여, 및 증명 첫째, 인증 뭔가를 인증하는 것은 간단합니다 정품인지 유효한지 증명하기 위해 정통합니다

우리는 예술 작품, 공식 문서, 필기체 서명 우리는 또한 대부분 얼굴 인식을 사용하여 서로를 인증합니다 이것은 우리에게 매우 자연스러운 일입니다 매우 직관적입니다 컴퓨터는 종종 암호를 사용하여 우리를 인증합니다

자동차는 종종 열쇠를 사용하여 우리를 인증합니다 그래서 우리는 일상 생활에서 항상 인증을 사용합니다 그것에 대해 생각조차하지 않고 그러나 하나의 컴퓨팅 장치가 다른 컴퓨팅 장치를 인증해야합니까? 이것은 우리가 생각하기에 덜 직관적입니다 흔히 비밀 데이터입니다 따라서 본격적인 컴퓨터는 비밀 데이터에 액세스 할 수 있습니다

다른 모든 컴퓨터는 그렇지 않습니다 이 비밀 데이터가 가질 수있는 두 가지 형식이 있습니다 나는 그 얘기를 듣고 싶다 하나는 암호 키입니다 다른 하나는 무기명 토큰입니다

인증하는 다른 방법이 있습니다 그러나 이것들은 매우 일반적이며 직접적으로 관련이 있습니다 우리의 "TensorWash"예제 나는 그들 각각을 조금씩 파헤쳐 보겠다 따라서 암호화 키와 인증서 웹에서 매우 일반적입니다

이것은 웹 브라우저가 웹을 인증하는 방법입니다 섬기는 사람– 예를 들어 HTTPS를 사용합니다 인증에는 인증서 확인이 포함되며, 상기 인증서 내의 상기 정보를 검증하는 단계; 이미 신뢰하고있는 것에 대해 확인 또는 당신이 기대하는 것, 그 증명서는 당신이 신뢰하는 어떤 것입니다 우리는 또한 열쇠 소유 증명을 검증해야합니다 키 자체는 전송되지 않습니다 네트워크를 통해 또는 적어도 열쇠의 비공개 부분

그러나 우리는 다른 컴퓨터에 소유권이 있는지 확인해야합니다 그것의 증거가됩니다 따라서 실제로이 작업을 수행하는 것은 정말 어려울 수 있습니다 이러한 프로토콜을 작성하는 것은 정말 어려울 수 있습니다 나는 너 자신을 직접 만들지 말 것을 강력히 권한다

그것을하는 좋은 도서관을 찾으십시오 Android Things를 사용하는 경우 HTTPS 및 TLS를 지원합니다 내장되어 있으므로 구현할 필요가 없습니다 그래서 나는 이런 종류의 인증을 비교하기를 좋아한다 공항 여권 수표로

네가 상상한다면 여권을 가져 가라 수표까지 와서 요원 특정 정보의 유효성을 검사 할 것입니다 여권에 그들은 그것이 권위에서 왔음을 입증 할 것입니다 그들이 신뢰하는 것

그리고 나서 그들은 소유 체크의 증거를 할 것입니다 여권의 경우, 사람의 얼굴과 그림이 일치한다 그들 앞에 서서 나는 또한 무기 토큰에 대해 이야기하고 싶다 이것들은 약간 다르게 작동합니다

그들은 순서대로 한 컴퓨터에서 다른 컴퓨터로 전달됩니다 확인하십시오 컴퓨터에서 종종 불투명합니다 그것을 보냅니다, 그러나 의미심장 한, 물론, 그것을 확인하는 컴퓨터에 토큰의 송신자 또는 베어러 인증 토큰의 인증에 의해 암시됩니다

검증자는 토큰을보고 확실한 토큰인지 아닌지에 대한 결정 나는 이것을 영화 표의 예와 비교하고 싶다 너는 티켓 대에 가서 영화 티켓을 산다 그 티켓이 당신의 무기명 토큰이됩니다 너는 극장에 들어가, 너는 선물한다

그 토큰, 당신은 들어갈 수 있습니다 그 티켓을 친구에게 넘깁니다 당신의 친구는 이제 그 토큰을 소지 한 사람입니다 그리고 그들은 영화에 들어갈 수 있습니다 종종 이러한 종류의 토큰은 보다 철저한 인증을 나타내는 데 사용됩니다

과거에 일어난 일입니다 또 다른 좋은 예가 있습니다 웹에서 로그인이 필요한 웹 사이트를 가지고있을 때, 사용자 이름과 암호로 로그인하십시오 그리고 암호를 다시 입력해야한다고 상상해보십시오 해당 사이트 내의 모든 페이지에 대해 새 페이지로 이동하고 암호를 다시 입력하십시오

그것은 쓸모 없을 것이다 그리고 너무 자주, 두포에서 무슨 일이 일어나는가? 웹 서버가 브라우저에 베어러 토큰을 발급 할 것입니다 그리고 그것은 일정 시간 동안 살 것이다 그리고 귀하의 계정에 액세스 할 수 있습니다 그 웹 사이트에서 의미합니다

따라서 비밀번호를 계속 입력하지 않아도됩니다 시간 IoT 장치에서도 동일한 방식으로 작동합니다 한 번 철저히 조사 할 수 있습니다 토큰을 발행하면 훨씬 가벼운 인증을받을 수 있습니다

그 시점부터의 메커니즘 인증에 대해 생각해 봅시다 IoT의 맥락에서 외침을받을 가치가있는 몇 가지 측면이 있습니다 하나는 인증이 양방향으로 진행되어야한다는 것입니다 장치 주변의 서비스 및 기타 장치 해당 장치를 인증해야합니다

그리고 그 장치는 인증을 필요로합니다 다른 서비스, 주변의 다른 장치 예를 들어, 장치는 웹 서비스를 인증하고, 브라우저가 웹을 인증하는 것과 같은 방식으로 HTTPS 또는 TLS를 사용하는 서비스 또한, 인증은 반드시 신원 확인을 의미합니다 종종, 우리는 그런 식으로 생각하지만, 반드시 그런 것은 아닙니다

그렇게해야합니다 제한된 웹 서비스의 예를 들어보십시오 [INAUDIBLE] 웹 서비스를 가정 해 보겠습니다 하지만 제품 인스턴스가 다시 연결할 수 있도록 설계되었습니다 그 웹 서비스에

그리고 모든 고객이 실제로 있는지 확인하고 싶습니다 해당 웹 서비스의 인스턴스 당신이하고 싶은 것은 인증입니다 그것은 당신의 장치 중 하나이지만 실제로는 어느 쪽인지 신경 써라 이 경우 실제로 익명 인증을 수행 할 수 있습니다

또한 인증을 바인드해야합니다 의미있는 기대에 이르기까지 우리가 인증하는지 확인하고 싶습니다 우리가 생각하는 것, 우리가 인증을 기대하고있는 것 몇 가지 예를 들어 보겠습니다

만약 당신 앞에 장치가 있다면, 당신은 그 장치를 인증하기를 원합니다 그것을 물리적 인 무언가에 묶는다 기기에서 실제적인 것을 찾아보십시오 기기에 화면이 있고 휴대 전화와 화면에 모두 코드를 표시 할 수 있습니다 예를 들어, 그것은 그 인증의 물리적 바인딩입니다

블루투스 페어링을 할 때 일반적인 경험입니다 또는 그런 것 그러나 장치 나 바코드에 스티커를 사용할 수도 있습니다 그리고 우리는 그것에 대해 조금 더 이야기 할 것입니다 암호화 된 채널도 마찬가지입니다

암호화 된 채널을 설정 한 경우 그런 다음 해당 채널을 인증해야합니다 해당 채널에 인증을 바인드하십시오 따라서 TLS 나 HTTPS와 같은 표준 프로토콜을 사용하는 경우, 이것은 이미 당신을 위해 이루어졌습니다 그것에 대해 걱정할 필요가 없습니다 그러나 두 장치간에 작업을 수행하는 경우, 예를 들어, 그들은 지원하지 않습니다

그런 종류의 프로토콜, 그럼 당신은 이것에 대해 생각할 필요가 있습니다 이제 "TensorWash"예제로 돌아가 보겠습니다 모든 인증을 살펴보십시오 그럴 필요가 있습니다 그래서 우리는 완전하게 프로 비전되지 않은 상태에서 시작할 것입니다

그래서 우리는 우리의 "TensorWash"기계를 상자에서 꺼냈습니다 이제 스마트 폰이 이미 설치되었다고 가정 해 봅시다 스마트 폰은 웹 서비스를 인증 할 수 있습니다 HTTPS, TLS를 사용합니다 그리고 우리의 경우에는 Google에 전화로 로그인 한 Google 계정이 있습니다

그래서 그 웹 서비스는 전화를 인증 할 수 있습니다 그래서 양방향 인증 관계가 있습니다 그곳에 우리가해야 할 첫 번째 일은 이 새로운 장치를 인증해야합니다 우리가 원하는 것은 자격 증명을 보내고 싶다는 것입니다

그 자격 증명은 가치가있을 수 있습니다 – Wi-Fi 암호, 클라우드 서비스에 대한 액세스 그리고 우리가 올바른 장치로 보내고 있는지 확인하고 싶습니다 우리가 그것을 보내기 전에 일단 우리가 그것을 제공하면, 우리는 그 상태로 끝나기를 원합니다 양방향 인증 관계가있는 곳 "TensorWash"시스템과 클라우드 서비스 사이 그래서 여기에 두 개의 예를 들었습니다

Firebase Cloud IoT Core를 "TensorWash"와 함께 사용할 예정입니다 그리고이 두 가지면에서 우리는 양방향 관계를 원합니다 다시 말하지만, 웹 서비스 인증, 우리는 표준 TLS HTTPS를 사용할 것입니다 그리고 우리는 다른 형태를 사용할 것입니다 우리는 조금 더 자세하게 이야기 할 것입니다

나중에 장치를 인증 할 수 있습니다 하지만 그 자격은 될거야 이 과정에서 전화로 제공됩니다 그래서 당신은 거기에 주목했을 것입니다 하지 않은 하나의 인증입니다

내보기에서 두 가지 방향으로 나아가십시오 이건 어때, 여기 노란색 이니? "TensorWash"에서 전화로 "TensorWash"장치를 상자에서 꺼내도 괜찮습니까? 설정하려고하는 전화를 인증하지 않습니까? 그래서 우리는이 방법을 사용했습니다 일반 소비자 장치 용 그들은 상자에서 나오면 깨끗한 상태에 있습니다

소유자가 누구인지에 대한 개념이 없습니다 또는 그들이 신뢰하는 사람 그들은 설치가 가능합니다 그래서 우리는이 경우를 만들고 싶었습니다 그리고 대부분은 괜찮습니다

자격 증명으로 상자에서 나오지 않습니다 그것을 내줄 예정입니다 그것은 자격 증명을 받고, 그래서 덜 중요하다, 예를 들어, 인증이 필요한 전화 "TensorWash"장치 그러나 예를 들어, 엔터프라이즈 제로 터치, 대량 출시 시나리오, 그 장치를 상자에서 꺼내기 원하는 곳 자신을 설정하십시오 상자에서 나올거야

이미 그것이 누구를 신뢰하는지에 대한 개념을 가지고있다 그리고 이것은 HTTPS URL을 취하는 것만 큼 간단 할 수 있습니다 그것을 장치에 임베드하여 깨어날 때, 그것은 그것이 갈 수있는 곳을 안다 그리고 그것을 기입 할 수있는 등록 서버가 될 수 있습니다 나머지 신임장이나 정보와 함께 구성이 필요합니다

그러나 우리는 우리의 대화를 위해 그 비트를 남겨 둘 것입니다 그리고 우리는 소비자가 있다고 가정 할 것입니다 장치, "TensorWash"가 깨끗한 상태로 상자 밖으로 나옵니다 그래서 우리는 인증에 대해 이야기했습니다 어떤 것이 진짜인지 확인하고있는 중입니다

그리고 지금 저는 허가에 대해 이야기하고 싶습니다 승인은 무언가가 허용되는지 여부를 확인하는 것입니다 그것이하려고하는 것을 할 수 있습니다 공항 여권 수표를 다시 생각해보십시오 유효한 여권을 가지고 공항에 도착합니다

수표를 통과 할 것이라는 의미는 아닙니다 예를 들어, 그들은 검사 할 것입니다 당신이 그 날 비행을 계획했는지 여부 여권이 본격적인 여권이기 때문에 당신이 통과한다는 것을 의미하지는 않습니다 여전히 추가 승인이 있습니다

유사하게, 영화 티켓 시나리오에서, 작년 영화 티켓을 가지고 극장에 가면, 당신은 당신의 영화를 보지 못할 수도 있습니다 그것은 다른 시간, 다른 날짜, 다른 보여주는 그리고 거기에 영화 티켓이 완벽하게 정통하더라도 따라서 OAuth 20의 예를 사용하고 싶습니다 매우 일반적으로 사용되는 인증입니다

웹용 프레임 워크 그것은 웹용으로 제작되었습니다 주어진 IoT 사용 사례에 따라 작동하지 않을 수도 있습니다 하지만 좋은 예입니다 중요한 몇 가지 개념을 풀어 나가야합니다

OAuth 20을 사용하지 않더라도, 당신은 이러한 개념들에 대해 생각할 필요가 있습니다 두 가지 큰 것들은 토큰 범위와 토큰 수명입니다 토큰 범위는 어떤 권한을 설명합니다 토큰과 연관되어 있습니다

그럼,이 토큰의 소지자는 무엇에 접근 할 수 있습니까? 토큰 수명은 토큰이 만기되는시기를 설명합니다 그리고 새로 고침 토큰의 개념이 있습니다 대 액세스 토큰 액세스 토큰이 사용됩니다 도착하려는 실제 리소스에 액세스하려면 보호 된 자원

이 토큰은 보통 수명이 짧고 범위가 좁습니다 그리고 그것은 자급 자족 할 수 있습니다 따라서 리소스 서버에 대한 결정 최적화되고 신속해질 수 있습니다 또한 백엔드 조회를 수행 할 필요가 없습니다 수신 한 토큰을 살펴 본다

그 정보로 결정을 내릴 수 있습니다 반대로 토큰을 새로 고침하면 이전 액세스가있을 때 새 액세스 토큰을 얻는 데 사용됩니다 토큰이 만료됩니다 이 토큰은 종종 수명이 길다 그들은 더 광범위하게 범위가 지정되어 있으므로 가서 다양성에 대한 액세스 토큰을 얻고 싶을 수도 있습니다

다른 범위의 그리고 그들은 특별히 자체적으로 포함되지 않습니다 이것이 가능하면 허가가 가능합니다 그 여부에 대한 결정을 내리는 서버 새로 고침 토큰을 기반으로 새 액세스 토큰을 제공해야합니다 해지가 있었는지 여부를 결정할 수 있습니다

그 허가 그리고 그것은 당신이 IoT와 함께 갖고 싶어하는 것입니다 그 수동적 만료를 원한다 따라서 해지되면 현재 액세스 토큰 집합 만료되면 더 이상 액세스 할 수 없습니다 다른 액세스 토큰을 가져올 방법이 없습니다

너는 상황에 있고 싶지 않아 사용하지 않는 IoT 장치를 벽장에서 꺼내야 만하는 곳, 여전히 부팅되고 공장 초기화가 이루어지기를 바랍니다 그것을 인증 해제하기 위해 당신은 그 일을 수동적으로 할 수 있기를 원합니다 그래서 이것은 OAuth spec rfc6749의 스 니펫입니다 새로 고침 토큰 흐름을 묘사합니다

중간에있는 액세스 토큰을 볼 수 있습니다 보호 된 리소스 및 리소스 서버에 액세스하는 데 사용됩니다 E와 F 단계에서 액세스 토큰이 만료 된 곳입니다 그러면 오류가 다시 발생합니다 그리고 바닥의 아래쪽, G와 H, 새로 고침 토큰이 사용 된 것을 볼 수 있습니다

권한 서버에서 다른 액세스 토큰을 가져올 수 있습니다 다행히도 시각화에 도움이됩니다 조금 더 좋아 그럼 인증에 대해 생각해 봅시다 IoT 또는 IoT 장치의 맥락에서 우리는 인증에 대해 이야기했습니다

두 가지 방법이 필요합니다 권한 부여는 두 가지 방법으로 갈 필요가 있습니다 아니면 적어도 양 방향으로 생각할 필요가 있습니다 우리는 누가 장치에 액세스 할 수 있는지, 누가 데이터를 읽을 수있는 장치에 명령을 보낼 수 있습니다 장치 등으로부터 우리는 또한 장치가 무엇에 접근 할 수 있는지 생각할 필요가 있습니다

웹 서비스에 연결할 때 어떤 권리가 있는지, 예를 들면? 우리는 최소한의 권한 원칙을 사용하기를 원합니다 우리는 필요한 것보다 더 많은 특권을주고 싶지 않습니다 이것은 IoT의 정말로 공통적 인 문제입니다 그저 그렇게주는 것이 너무 쉽기 때문이라고 생각합니다 서비스에 대한 기기 총 승인 에 연결하면 더 이상 문제가 발생하지 않기 때문입니다

인증 오류가 발생하지 않으며, 모든 것이 제대로 작동합니다 문제는 장치가 해당 승인의 10 % 사용, 기기가 해킹 당하면 이제 공격자는 모든 것을 액세스 할 수 있습니다 비록 당신이 그것을 사용하지 않았더라도 또한 만료가 필요합니다 나는 수동적 만료에 대해서 이야기했다

또한 토큰을 전달할 때 조심해야합니다 토큰은 물론 만들어집니다 특정 목적으로 통과, 예를 들어 검증 하지만 너는 네가 토큰을 보내기 전에 수신자를 인증했습니다 검증을 위해 웹 서비스로 보내고 있다면, HTTPS를 초과하는지 확인하십시오

새 기기를 구입하는 경우, 우리의 "TensorWash"케이스처럼, 그 새로운 장치를 인증하십시오 토큰을 보내기 전에 잠시 후에 알 수 있듯이 Firebase와 같은 Google 서비스 Android의 경우 Firebase SDK가 토큰을 관리합니다 이 토큰 관리에 대해 걱정할 필요가 없습니다 중대하다 그럼 돌아가서 승인을 살펴 봅시다

특히 "TensorWash"시나리오에서 우리는 전화가 이미 있다고 가정하는이 상태에서 시작합니다 이러한 클라우드 서비스로 새 장치를 설정할 수있는 권한이 부여되었습니다 전화가 암묵적으로 승인되었습니다 "TensorWash"장치를 설정해야합니다 그것에 관한 정책이 있으십시오

우리가 제공 한 후에 우리가 원하는 곳은 Firebase와 양방향 인증을 원합니다 그래서 우리는 Firebase Realtime Database를 사용할 것입니다 또한 장치와 동기화 할 수 있습니다 또한 장치에서 클라우드까지 데이터를 동기화 할 수 있습니다 그리고 장치와 동기화 될 때, 우리는 실제로 그것을 사용하여 장치에 명령을 내릴 수 있습니다

Firebase가 승인 된 권한이 있습니다 장치에 명령을 내리고 장치 데이터를 Firebase로 밀어 넣을 권한이 있습니다 Cloud IoT Core의 경우 화살표를 한 방향으로 만 넣으면됩니다 우리가 사용하려고하는 것은 통계입니다 기기가 작동하면서 메타 데이터를 Cloud IoT Core 프로젝트로 밀어 넣는다

푸시 할 권한이 있어야합니다 그 특정 프로젝트에 이제 어떻게 설정했는지에 대한 세부 정보를 보여 드리겠습니다 모두 위로 첫째, 저는 하나 더 핵심 개념에 대해 이야기하고 싶습니다 그것은 증명입니다

증명은 실제로 컴퓨팅의 무결성을 입증합니다 상태를 가진 장치, 현재 운영중인 장치 포함 장치의 상태 그래서 이것은 정말로 특별한 종류의 인증입니다 이것을 가능하게하기 위해서, 기기에 이미 자격증 명이 있어야합니다 그것은 그 자체를 증명하는 데 사용할 수 있습니다

종종 공장을 제공합니다 그래서 장치가 상자에서 나오면, 이미 진짜 인스턴스임을 증명할 수 있습니다 그 특정한 제품의 또한 증명이 종종 바운드됨을 언급 할 가치가 있습니다 암호 키로

따라서 장치의 증명 주장 대신에, 말하자면, 저는 안전한 모드에서 작동하는 진정한 장치입니다 그것은 조금 더 비슷합니다이 특별한 암호 키 정품 장치로 안전하게 보관 보안 모드에서 실행 중입니다 그리고 이것은 유용합니다 증명을 다른 것에 묶는 우리 열쇠를 사용합니다

다른 종류의 인증, 예를 들면 그리고 나중에 예제에서 보게 될 것입니다 Cloud IoT Core에 연결하기 위해 이와 같은 키를 사용합니다 그래서 안드로이드는 특히, 당신은 다양한 속성을 증명할 수 있습니다 당신은 그것이 진정한 안드로이드 것들임을 증명할 수 있습니다 장치

인스턴스인지 확인할 수 있습니다 특정 제품에 대한 장치 ID를 확인해야합니다 장치 상태를 확인할 수도 있습니다 내가 말했던 것처럼 그리고 우리가 끌어 낸 것들 중 하나는 검증 된 부팅 상태입니다

이 장치가 실제로 실행 중일 때, 그들은 그 장치를위한 소프트웨어를 증명합니다 암호화 키의 속성을 검증 할 수도 있습니다 그리고 나는 오늘 그 일에 들어 가지 않을 것입니다 이것이 인증서 체인이 보이는 것입니다 5 단계 깊이

맨 위에는 Android Things CA, Root CA, 및 중간 CA 이들은 Google에서 관리합니다 이것들은 모든 안드로이드 것들 증명에 대한 권한입니다 인증서 중간 3 단계에는 제품 별 CA가 있습니다 또한 Google에서 관리합니다

하지만 Android Things 개발자의 맥락에서 볼 수 있습니다 콘솔 특정 제품과 관련이 있습니다 그 콘솔에 콘솔에 제품을 만들 때마다, 중간 수준의 CA가있을 것입니다

해당 제품에 할당 된 따라서 다음 단계에서는 장치 별 CA가 있습니다 그리고 이것은 공장의 각 장치에 제공됩니다 이것은 장치마다 고유합니다 해당 장치의 ID가 포함되어 있습니다 그리고 장치가 상자에서 나오면, 이것이 가지고있는 것입니다

마지막 단계는 응용 프로그램 키입니다 및 인증서 그래서 이것은 장치에서 생성되었습니다 그것은 귀하의 응용 프로그램에 의해 생성되었습니다 그리고 인증서도 생성됩니다

장치 별 CA에 의해 신뢰할 수있는 실행에 의해 보호된다 환경 그래서 우리의 "TensorWash"예제에서, 증명은 화살표로 여기에서 일어난다 "TensorWash"장치에서 전화까지 따라서 우리가 그 검증을 할 때, 전화가 확인하려고하면 장치를 인증하려고합니다

그것이 우리가 증명을 사용하는 곳입니다 그래서 빠른 검토 우리는 인증, 점검 무언가가 진실하거나 유효하다는 것; 허가, 그것이 허용되는지 확인 그것이하려고하는 일을하는 것; 및 증명, 이는 특히 컴퓨팅 장치의 무결성을 검사하는 것입니다 그리고 지금, 웨인은 우리에게 보여줄 것입니다 Android Things로이 모든 작업을 수행하는 방법

쿨, 고마워 이제 주요 개념에 대해 살펴 보았습니다 이제 우리가 무언가를 만드는 방법에 대해 이야기합시다 이것을 사용하여 Android 및 기타 서비스에서 사용할 수 있습니다 Google이 제공하는 첫 번째 단계는 무언가를 사용할 수 있다는 것입니다

Nearby Connections (인접 연결) 그리고 인근 연결은 훌륭합니다 이는 추상화 계층을 제공하기 때문입니다 근처의 기기를 찾는 데 도움이되며 암호화 된 통신 채널을 설정합니다 두건 아래서는 블루투스, BLE, Wi-Fi 핫스팟을 사용합니다

그 시간에 사용할 수있는 것은 무엇이든 사용합니다 그것에 관한 또 다른 좋은 점은, 연결이 설정되면, 그것은 양측에 사람이 읽을 수있는 짧은 코드를 제공합니까? 화면에 표시 할 수 있습니다 이제는 많은 사람들이 기기를 사용했습니다 여기에 화면에 약간의 코드가 표시됩니다 그리고 그것은 대부분의 경우에 훌륭합니다

그러나 앞서 언급 한 세탁기 화면이 없습니다 따라서 우리에게는 필요한 보안이 충분하지 않습니다 그리고 우리는 어떻게 그 문제를 1 분 안에 처리 할 수 ​​있습니다 하지만 Nearby Connections는 첫 번째 빌딩 블록입니다 우리가 사용할거야

따라서 코드 스 니펫을 살펴보면, 이것은 단순한 일종의 약식 버전입니다 주변 연결 샘플의 여기서 우리는 인근 연결을 만드는 것을 볼 수 있습니다 클라이언트 상단에 그런 다음 몇 가지 검색 옵션을 지정합니다

방금 기본값 인 P2P 클러스터를 사용했습니다 우리가 여기서 사용하는 것은 그렇게 중요하지 않습니다 일단 발견 과정을 시작하면, 우리는 서비스 ID가 필요합니다 그래서이 경우에 그것은 텐센트 워시의 예입니다 제품 ID와 같습니다

Android에서의 앱 이름이 아닙니다 그들은 그것을 서비스 ID라고 부릅니다 그러나 그것은 당신의 장치의 이름이 무엇인지, 또는 당신이 그것을 부르고 싶은 무엇이든지 그런 다음 엔드 포인트 발견 콜백도 있습니다 Nearby Connections에서 언제든지 코드를 호출합니다

새로운 장치가 발견되었습니다 그리고 당신이 할 일은리스트 뷰를 유지하는 것입니다 그리고 UI를 업데이트하고, 발견 된 모든 장치를 보여줍니다 명확하게 말하면, 우리는 한 번에 하나 이상의 장치를 사용할 수 있습니다 그리고 나서 사용자가 원하는 것을 선택하면, 그들은 그것을 선택할 수 있습니다

그리고 우리는 연결을 설정할 수 있습니다 기기 측에서 Nearby 지원 startAdvertising 메소드입니다 기본적으로 사람이 읽을 수있는 장치 이름을 제공하십시오 그런 다음 동일한 서비스 ID를 입력합니다 그리고 콜백을 설정합니다

연결이 설정 될 때마다 호출됩니다 따라서 사용자가 장치를 선택하면, 그래서 그들은 스크린에서 그것을 골랐습니다 이제 요청 연결 방법을 사용해야합니다 연결 설정을 처리합니다 전달 된 원격 엔드 포인트 ID로 이동하십시오

다시 한 번 콜백이 있습니다 그리고 onConnectionInitiated는 다음과 같습니다 해당 장치로 연결이 시작될 때 사용됩니다 그리고 그것은 인증 토큰을 채운다 그것은 우리가 언급 한 짧은 코드입니다

인근 연결을 사용하면 사람이 읽을 수있는 짧은 값을 얻을 수 있습니다 다시 한번, 우리는 디스플레이가 없다 그래서 우리는 잠시 후에 그 문제를 어떻게 다룰 지 이야기 할 것입니다 하지만 여기서 볼 수 있습니다 코드는 정말 간단합니다

Nearby Connections와 함께 작업 할 수 있습니다 그리고 그것은 우리를 아주 빨리 가게합니다 그 다음 일은 대런이 증인에 대해 말한 것입니다 및 장치를 확인하는 것 따라서 우리 앞에있는 장치가 우리가 실제로 연결하고있는 것입니다

전화로 우리가하는 일은 실제로 임의의 도전 과제를 만듭니다 그래서 난수는 유일합니다 이 연결을 위해 그런 다음 기기로 전송합니다 그리고 우리는 이것을 사용하여 재연 공격을 막습니다

그리고 장치는 임의의 도전을합니다 인증 코드와 결합 주변 지역의 연결에서 가져 와서 그런 다음 이것을 사용하여 생성합니다 Android Keystore의 새로운 키 증명 인증서 체인과 함께 이 인증서 체인은 전화로 다시 전송됩니다 그러면 휴대 전화에서이를 확인할 수 있습니다 잠시 후에 얘기하겠습니다

그리고 우리가 임의의 도전을 사용하고 있지만, Nearby의 인증 코드가 중요합니다 암호화 채널에 바인딩하는 데 도움이되기 때문에 우리가 지금 사용하고있는 것 그리고 다른 것은 속도를 결정하는 것이 중요하다는 것입니다 실패한 연결을 제한합니다 그래서 네가 원하지 않는 것은 누군가를위한거야

기기를 끊임없이 연결할 수 있어야합니다 임의의 코드를 시도해보고 일부 키를 생성하도록하십시오 속도를 줄이는 것이 더 낫습니다 귀하의 장치를 공격하는 사람들 여기에 몇 가지 코드가 있습니다

너무 많이 걱정하지 마십시오 너에게 몇 가지 비트를 보여주고 싶었어 그리고 거기있는 것의 조각 하지만 장치에는 인증 토큰이 있습니다 근처에서

우리는 이전에 얻은 무작위적인 도전에 참여합니다 우리는 그것을 함께 결합합니다 이 코드를 사용하여 여기에 서명 키를 생성합니다 그리고 당신이 무언가를 생성 할 때 흥미로운 부분이 있습니다 Android Keystore에서 신뢰할 수있는 상태로 완료되었습니다

실행 환경 따라서 우리는 앱에 키를 실제로 보관하지 않습니다 우리는 실제로 신뢰할 수있는 실행 환경에 보관합니다 이것이 의미하는 바는 훌륭합니다 누군가가 우리 앱을 해킹하더라도, 그들은 개인 키를 꺼낼 능력이 없습니다

따라서 우리가하는 일에 추가적인 보안이 추가됩니다 어쨌든, 우리는이 모든 것들을 넣었습니다 모든 보라색 값은 모두 표준 상수입니다 당신이 사용하는 따라서 정확하게 캡처하는 것에 대해 걱정하지 마십시오

나중에 샘플을 출시 할 예정입니다 그 속에이 모든 것을 가지고 있습니다 그러나 나는 그저 약간의 걸음을 걷고 싶었습니다 하지만 결국 인증서 체인을 추출합니다 그리고 그게 당신이 그걸로 전화로 돌려 보내는거야

그것을 확인하고 무엇이든지 할 것입니다 그래서 Darren은 이전에 인증서 체인의 개념에 대해 언급했습니다 공장 출고시 증명 키 이 잎의 인증서 체인도 함께 제공됩니다 Android Things 루트 인증서로 돌아갑니다 이제 우리는 방금 생성 한 키에 대한 전체 체인을 갖게됩니다

그래서 바닥에, 우리가 방금 만든 것입니다 그리고 그것은 안드로이드 Things 루트에 다시 연결됩니다 이제 "TensorWash"가 생성되었습니다 그것은 사용자 지정 인증 키와 인증서 체인입니다 우리는 체인을 전화로 보냈습니다

전화로 이걸 확인해야 해 개조되지 않은 합법적 인 장치입니다 그리고 그것은 또한 우리 앞에있는 것입니다 사실 꽤 지루한 과정입니다 여러 단계가 있습니다

아마도 우리가해야 할 일입니다 장래에 도서관에두기 하지만 네가해야 할 일의 요지 인증서를 확인해야합니까 체인이 올바르게 연결되었습니다 루트가 신뢰할 수 있는지 확인해야합니다 Android Things의 루트

제품 ID인지 확인해야합니다 장치의 128 비트 UUID를 확인할 수 있습니다 이것은 공장에서, 당신은 실제로 코드를 가지고 박스에 찍어 인쇄 할 수 있습니다 사용자가 실제로 일치하는지 확인할 수 있습니다 그들 앞에서 한 사람과 부팅 상태를 확인할 수 있습니다

키가 서명되면 전송됩니다 부팅 여부를 나타내는 플래그와 함께 로더가 조작되었습니다 증명 질문을 확인합니다 우리는 조금 이야기 할 것입니다 그러면 공개 키로 저장할 수 있습니다

그리고 우리가 인증을 원할 때 유용 할 것입니다 나중에 클라우드 IoT를 사용합니다 전화 측에서 우리는 입증이 필요한지 확인해야합니다 도전은 정확합니다 그래서 우리는 그 인증서에서 증명을 추출합니다

그런 다음 인증 토큰의 해시를 만듭니다 근처에서부터 우리가 이전에 생성 한 무작위적인 도전 그리고 우리는 그것들을 결합하고 해시를 생성합니다 인증서에서 나온 것과 일치하는지 확인합니다 장치에서 체인

그리고 이런 종류의 것은 전체 루프가 완전하고 안전합니다 중요한 것은 실제로 장치에 직접 인증을 보냈습니다 주변에서 수행되었습니다 그래서 모든 것이 올바르게 수행되었는지 확인합니다 중간 공격에 사람이 없다는 것을 도중에

이제 우리는 그 장치가 우리의 것이라는 것을 압니다 그리고 이러한 모든 문제를 해결하는 데 도움이됩니다 우리가 확인한 이제 전화가 "TensorWash"를 신뢰할 수 있음을 확인했습니다 이제 Wi-Fi 네트워크에서 장치를 인증해야합니다 가장 빠른 방법은 팝업으로 휴대 전화의 활동을 말하자

Wi-Fi SSID 및 패스 프레이즈? 그러나 물론 사용자들은 그렇게하고 싶지 않습니다 사용자 친화적이지 않습니다 그리고 사용자는 자신의 암호를 입력해야합니다 앱이 암호를 읽는 동안 앱이 암호를 보게됩니다 장치로 전송됩니다

그리고 다음으로 할 일은 장치 측에서, Wi-Fi 관리자를 사용해야합니다 SSID와 암호를 설정합니다 그래서이 코드는 작은 코드 조각입니다 그러나 Wi-Fi 관리자는 좀 더 복잡합니다 따라서 실제 샘플을 보면, 이것은 작성해야하는 코드입니다

Wi-Fi Manager와 대화 할 수 있습니다 그래서 이것은 우리가 작업하고있는 것입니다 우리가 사용할 수있는 작은 코드 라이브러리를 만들고 싶습니다 당신이 가지지 못하게하기 위해이 모든 것을 건너 뜁니다 그 종류의 코드를 작성하십시오

그리고 우리는 더 좋은 소식을 가지고 있습니다 Nearby 설치라는 API가 있습니다 Google Play 서비스로 이동합니다 곧 제공 될 Nearby Setup에 대한 가장 좋은 점은, Wi-Fi 자격증을 취득 할 수있는 능력이 있다는 것입니다 휴대 전화에 저장되어 다른 기기 인 Google에 전달됩니다

서비스를 재생하십시오 Android Thing은 Google Play 서비스를 지원합니다 자격 증명을 복사 할 수 있습니다 너 자신을 다룰 필요가 없다 사용자는 입력 할 필요가 없습니다

따라서 사용자 편의를 위해 매우 유용합니다 그래서 곧 나옵니다 세부 사항은 developersgooglecom/nearby에서 확인할 수 있습니다

나중에 준비가되면 우리 장치에서 인터넷에 접속할 수 있고 열쇠가 있습니다 자, 이제 어떻게하면 우리는 이야기하고 얻는 것에 대해 갈 것입니다 클라우드 서비스가이 장치에서 활성화되었습니다 그래서 Firebase와 Cloud IoT에 대해 이야기 할 것입니다

그래서 우리가해야 할 첫 번째 일은 전화 측에서, Firebase를 설치해야합니다 Firebase는 Android, iOS 및 웹에서 작동하기 때문에 훌륭합니다 따라서 휴대 전화 앱은 여러 종류의 기기에있을 수 있습니다 Firebase 프로젝트 ID를 생성합니다 그리고 우리는 전화와 장치 모두에서이를 사용할 것입니다

그런 다음 전화 사용자에게 인증을 요청합니다 그들의 사용자 이름과 비밀 번호로, 대화 상자를 팝업, 그러면 우리가 토큰을 얻을거야 이전에 생성 한 암호화 된 파이프를 전달하십시오 여기에 약간의 코드 스 니펫이 있습니다 맨 위에 로그인 요청을하는 중입니다

흥미 롭습니다 우리는 단지 요청하고 있기 때문입니다 이메일 ID의 범위 Google은 완전한 Google 액세스를 원하지 않습니다 파일이나 이메일 또는 그와 비슷한 것에 액세스 할 수 있습니다

우리는 신분증 명을 요구하고 있습니다 범위를 제한하려고하기 때문에 Darren이 이전에 이야기했던 것과 같습니다 우리는 결국 JSON 웹 토큰을 얻습니다 그러면 Firebase로 로그인 할 수 있습니다 그러면 우리 장치는 Firebase와 상호 작용할 수 있습니다

하지만 우리는 그 토큰을 발송합니다 이전 토큰을 기기로 보냈습니다 그래서 Firebase에 로그인하여 그걸로 할 수 있습니다 그래서 다른면에서 Google 토큰을 가져옵니다 그것을 Firebase에 전달하고 그걸로 인증하십시오

이제 장치는 Firebase Realtime Database에 액세스 할 수 있습니다 코드 스 니펫도 장치에서 매우 유사하게 보입니다 Android Things 기기는 일반 Android이므로, 우리는 전화에서하는 것처럼 동일한 코드를 사용합니다 자격증 명을 받아서 Firebase 인증에 대한 자격 증명으로 로그인하려면, 이제 끝났어 이제 우리는 양방향 인증을 받았습니다

그리고 우리의 "TensorWash"는 이제 완전히 Firebase Realtime Database에 참여하십시오 그럼 기어를 바꿔서 끝내자 Cloud IoT Core와도 이야기 할 수 있습니다 그래서 당신이 수천 명의 사람들과 함께 세탁실을 운영하고 있다고 상상해보십시오 기계와 수천 개의 위치, 예측 분석을 수행하려고합니다

따라서 우리는 이러한 장치에서 데이터를 푸시하고자합니다 분석을위한 구름 IoT 그래서 Cloud IoT에서 우리는 장치를 등록합니다 휴대 전화에 앱에 대한 자격 정보가 있어야합니다 그리고 당신은 그 공인 인증서 우리가 이전에 만들었던 것, 그리고 당신은 그것을 줄 것입니다

클라우드 IoT로 장치를 알 수 있도록 그리고 그것을 믿을 수 있습니다 그런 다음 MQTT를 사용하여 요청을 보냅니다 기기 ID로 Cloud IoT에 연결하고 Google 키로 서명했습니다 클라우드 IoT가이 메시지를 확인할 수 있습니다 이 키를 확인하여 합법적입니다

이전에 받았던 내용으로 확인하십시오 그런 다음 TLS를 사용하여 MQT 요청을 보냅니다 그리고 우리는 우리의 장치가 알고 있도록 TLS를 사용합니다 누가 데이터를 보내고 있는지를 기억할 수 있기 때문에 신뢰할 수 있습니다 양측은 상대방을 확인해야합니다

여기에 아주 간단한 작은 조각이 있습니다 프로젝트 ID와 사물의 일부를 입력하는 방법을 보여줍니다 그렇게 그리고 샘플도 공개 할 예정입니다 곧 Android에서 Cloud IoT Core를 수행하는 방법을 보여줍니다

그리고 좋은 점은 publishDeviceState입니다 아래쪽에는 기본적으로 원하는 이진 BLOB가 필요합니다 그것을 클라우드 IoT로 보냅니다 그리고 생성에 대해 걱정할 필요가 없습니다 어떤 메시지 든

그래서 우리는 Cloud IoT와 Firebase에 대해 매우 빨리 이야기했습니다 당신이 할 수있는 일의 다른 옵션은 무엇입니까? 음, 우리는 또한 스마트 홈이 있습니다 Google에서 기기를 제어하는 ​​새로운 방법입니다 조수 당신이 전구를 가지고 있다면, 당신은 할 수 있습니다

조명을 조금 어둡게 말할 수 있습니다 또는 세탁기의 경우, 스마트 홈을 구현하면 내 세탁기 시작하고, Google Assistant에서 세탁물을 차게됩니다 따라서 Firebase를 구현하면 스마트 홈에 연결되는 작은 웹 고리를 작성하십시오 그런 다음 기기를 사용하도록 설정할 수 있습니다 Google Assistant로 그리고 마침내, 당신은 실제로 Google Assistant SDK를 장치에 내장하십시오

세탁기와 실제로 대화 할 수 있음을 의미합니다 직접 기계에 명령을 내리십시오 그것은 시원한 종류 다 그럼 다음은 뭐니? 조만간 공장에서 핵심 프로비저닝 스토어를 제공 할 예정입니다 기본적으로 하드웨어 장치가 있습니다

Android Things 기기에 키를 추가 할 수있게됩니다 이것은 당신이 할 수있는 일입니다 또는 그들이 생산 될 때 그리고 이것이이 열쇠가 장치에 어떻게 도달 할 것인가입니다 개발자 키트가있는 경우 키 서명을 올바르게 테스트 할 수 없으며, Android의 공식 키가 없으므로 소지품

그러나 우리는 도구를 공개 할 것입니다 곧이 일을 할 수 있습니다 Nearby Setup API도 곧 출시 될 예정입니다 그리고 그것은 프로비저닝을하는 것이 정말 좋을 것입니다 이거 정말 쉽습니다

따라서 요약하면 Google 사이트를 방문하십시오 androidthingswithgooglecom, 훌륭한 커뮤니티입니다 많은 정보가 담긴 사이트

우리는 G + community, gco/iotdev, 더 많은 정보를 얻을 수있는 곳, 그리고 오는 사이트를 추적 할 수있는 Nearby 사이트 곧 또한 소셜 미디어에서도 우리를 팔로우하십시오 기회가 없다면 IMX7 중 하나를 사용해보십시오 Google I / O에서 제공하는 개발자 키트 그래서 당신이 그 중 하나를 얻을 수 있는지 확인하십시오

너 자신 안드로이드 것들을 시도 할 수 있습니다, 정말 재미있는 개발 경험이기 때문입니다 프로토 타입 제작에 적합합니다 그러나 생산 장치 제작에도 좋습니다 그것이 우리를위한 것입니다와 주셔서 대단히 감사합니다

그리고 우리는 회의에서 당신을 만날 겁니다 고맙습니다 [음악 재생]

Build great Material Design products across platforms (Google I/O '18)

[음악 재생] JOHNATHAN CHUNG : 안녕하세요 우리 이야기에 오신 것을 환영합니다

제 이름은 Jonathan Chung입니다 그리고 저는 Material Design 팀의 UX 리드입니다 NIC BUTCHER :여보세요 내 이름은 닉 부처 야 그리고 저는 Design Relations 팀의 디자이너이자 엔지니어입니다

LARCHE : 나는 윌이야 저는 Material Design의 엔지니어입니다 JOHNATHAN CHUNG : 자리에 앉으세요 오늘 우리는 정말 어떻게 이야기하는지에 대해 기쁘게 생각합니다

플랫폼 전반에 걸친 훌륭한 소재 디자인 제품을 제작할 수 있습니다 그래서, Material Design이란 무엇입니까? 우리가 막 만든 모든 새로운 발표? 이전에 우리가 알고 있던 것에서 어떻게 진화 했습니까? 머티리얼 디자인은 이제 적응 형 디자인 시스템입니다 오픈 소스 코드로 뒷받침되는 팀은 고품질의 디지털 경험을 제공합니다 즉, Material은 당신을 돕습니다 정말 빠르고 아름답고 유익한 제품을 만들 수 있습니다

우리가 처음 출시 한 2014 년에는 제로 고객이 생겼습니다 이제 Material Design을 사용하는 150 만 개 이상의 앱이 있습니다 믿을 수 없어 그리고이 거대한 고객 수를 기반으로, 우리는 정말로 듣고 계속했습니다 우리의 시스템을 개선합니다

오늘 우리는 End-to-end 제품인 Material Theming을 출시했습니다 재료 디자인을 쉽게 만들 수있는 기능 자, 여러분 중 일부는 더 많이 배우기를 간절히 원합니다 하지만 아마도 당신 중 일부는 여전히 궁금해하고 있습니다 머티리얼 디자인이 당신에게 적합한 지 여부 귀하의 회사를 위해

그래서 나는 새롭게 걷는 것으로 시작할 것입니다 디자인 된 Materialio 사이트 그런 다음 Nick은 재료 도구 제품군을 시연합니다 공동 작업 및 맞춤 설정을 위해 제작 한 정말 쉽고 편리합니다

그러면 Will은 Material Components에 대해 이야기 할 것입니다 오픈 소스 코드 라이브러리 모든 플랫폼에서 사용할 수 있습니다 그래서 내가 왜해야하는지 세 가지 이유를 설명해 드리겠습니다 Material Design 사용을 고려하십시오 첫째, Materials Design은 개발자를위한 것입니다

우리에게 많은 피드백을 주셨습니다 앱을 적용하고 구축하는 것이 쉽지 않은 점 머티리얼 디자인을 사용합니다 이제 Material Theming 및 모든 도구를 사용하여 우리는이 새로운 기능을 지원하기 위해 구축했습니다 우리는 이제 창조하고자하는 열망을 갖게됩니다 개발할 코드에 눈을 돌려야합니다

머티리얼 디자인은 진정한 크로스 플랫폼 프레임 워크입니다 일관된 사용자를 만드는 것이 얼마나 중요한지 이해합니다 플랫폼 전반에서 작동하는 경험 따라서 머티리얼 디자인을 사용하면 사용자에게 도움이됩니다 여러 장치를 사용합니다

우리는 또한 고품질의 제품을 만드는 것이 오랜 시간이 걸린다 따라서 우리는 플랫폼 간 일관성을 장려하고 있으며, 또한 코드를 제공하고 있습니다 Android, iOS, 웹 및 Flutter에서 개발을 시작하십시오 이제, 우리는 그것을 시험에 적용 할 것입니다 이렇게 스크린을 만들 것을 상상해보십시오

그리고 아마도 여러분 모두는 전문가이자 전문가 일 것입니다 하지만 내 경험에 의하면, 화면을 구축 이것을 좋아하고 올바르게하려면 시간이 걸릴 것입니다 재료 디자인의 힘으로, 우리는 이제 그 어느 때보다도 쉽게 만들고 있습니다 여러 플랫폼에서 이와 같은 화면을 설계하고 구축 할 수 있습니다 그리고이 모든 마법은이 재 설계 된 사이트에서 바로 시작됩니다

새로운 사이트는 이제 디자인, 개발 및 도구로 나뉩니다 각 섹션에서 모든 위대한 자원을 찾을 수 있습니다 우리 팀이 당신을 위해 창조 한 디자인 지침, 도구, 리서치 통찰력, 오픈 소스 코드, 당신이 이름을 짓는다 우리는 시간을 좀 보냅니다 이 사이트는 현재 더 자세하게 설명되어 있습니다

디자인 섹션에는 여전히 모든 것이 있습니다 Material Design에 대해 좋아했습니다 모든 것이 있습니다 아무것도 사라지지 않았다 또한 가장 많이 읽은 기사 몇 가지를 소개합니다

페이지 상단의 콘텐츠를 빨리 찾을 수 있습니다 우리는 여전히 당신을 돕는 데 집중하고 있습니다 아름다운 디자인 제품, 배경없이 디자인 여기에서 기사를 볼 수 있습니다 우리가 당신을 위해 제공 한 것, 그리고 시스템 아이콘, 자신 만의 맞춤 색상 팔레트 생성, 당신의 브랜드에 맞는 서체를 고르십시오

UI에서 모양의 힘을 실제로 활용할 수 있습니다 마지막 섹션에서는 재료 연구에 대해 이야기합니다 우리는 Material Design의 모든 유연성을 보여 주며, 당신이 소매 용 건물이라면, 의사 소통을 위해, 또는 무엇인가 여행 앱만큼이나 복잡합니다 모든 것이 있습니다 그리고 우리는 그것을 테스트했습니다

그리고 체크 아웃 할 수있는 모든 것이 있습니다 머티리얼 디자인 가이드도 확장 및 향상되었습니다 재료 시스템, 재료 기초 및 재료로 변환 지침 머티리얼 시스템 섹션부터 시작하여, 우리는 Material Metaphors에 대한 일반적인 개요를 제공합니다 그런 다음 재단 섹션 다이빙 기본 관행으로 그래서 구조적인 것들을 언급 할 것이고, 타이포 그라피, 도해 법, 모양, 레이아웃 등

이제 지침 섹션에서는 전술 지침을 제공합니다 재료 제품을 만드는 방법에 대해 알아보십시오 이것에 관한 가장 좋은 점은 이러한 위대한 디자인 지침은 엔지니어링과 밀접하게 관련되어 있습니다 이제 다른 기능 중 일부를 살펴 보겠습니다 너를 위해 도움이 될 사이트에 제품을 만들 때

우리는 어떻게 상세한 사양을 가지고 있는지 압니다 엔지니어링 프로세스를 10 배 더 빠르게 만듭니다 그래서 우리는이 뷰를 제공하고 있습니다 Spec 뷰어 이 스펙 뷰어에서 우리는 이제 이 이미지에 대한 유용한 정보

오른쪽의 메뉴를 클릭하면, 다양한 유형의 모든 레이어에 액세스 할 수 있습니다 이 이미지에 대해, 당신은 단지 이미지 만 볼 수 있습니다, 측정, 텍스트, 색상, 모양 및 표고를보고, 이 UI에서 사용되는 여러 구성 요소를 확인하십시오 또는 우리가 추가했을지도 모르는 추가 노트 이 텍스트 주석을 살펴 보겠습니다 따라서이 주석에서, 여러분은 글꼴 이름, 크기 및 색상을보고, Google 팀이 구축 한 Google 글꼴 사이트로 연결됩니다

우리는 이러한 유용한 자원을 표면화하기를 정말로 원했습니다 워크 플로우의 맥락에서 당신에게, 그래서 당신이 필요로하는 모든 것이 바로 거기에 있습니다 이제 Google 글꼴 사이트로 이동하면 너는 다운로드하고 사용할 수있을 것이다 우리의 mock에서 사용되는 글꼴 우리는 또한 가장 효과적인 방법에 대한 연구를 수행했습니다

지침을 전달합니다 그리고 우리는 인터랙티브 한 콘텐츠 독자들에 대한 이해의 수준을 높였습니다 그래서 우리는 콘텐츠를 소개하기 시작했습니다 우리 기사에서 상호 작용한다 다음은 재료 팔레트 생성기의 예입니다

그것은 컬러 기사에 줄 지어 배치됩니다 이 도구와 상호 작용함으로써, 개선 된 색상 시스템에 대해 배울 수 있습니다 그래서 그것들은 우리가 가지고있는 새로운 특징 중 일부입니다 디자인 섹션에 추가 그러나 어떻게이 모든 것을 구축합니까? 그게 니가 여기있는 이유야

맞지? Develop 섹션은 이제 기능과 액세스 권한이 있습니다 Android, iOS, 웹 및 Flutter 용 오픈 소스에 모두 제공됩니다 플랫폼 협약을 존중하면서, 구성 요소가 제대로 작동하는지 확인하려고했습니다 Android뿐 아니라 다양한 플랫폼에서 사용할 수 있습니다 그리고 이들 구성 요소로 게임을 즐길 수 있습니다

우리 카탈로그에 아래로 스크롤하면 섹션이 표시됩니다 개발자 리소스 디자인 섹션과 비슷하게, 우리는 당신에게 필요한 자원을 제공하기를 원했습니다 귀하의 제품을 구축하는 데 사용할 수 있습니다

그리고 이것에 익숙하지 않다고 가정 해 봅시다 아래쪽으로 더 스크롤하면 이 작업을 시작하려면 자습서를 찾으십시오 기어를 도구 섹션으로 전환합니다 도구 섹션에는 모든 훌륭한 리소스에 대한 링크가 있습니다 갤러리를 시작으로 우리가 당신을 위해 만들었습니다

내가 사랑하고 디자인을 공유하기 위해 사용해온 부분이다 내 팀과 나는이 제품을 좋아한다 갱도 갤러리는 공동 작업을 매우 쉽고 매끄럽게 만듭니다

Nick이 갤러리에 대한 자세한 내용을 1 분 안에 알려줍니다 오른쪽에는 액세스 권한이 있습니다 양식화 된 아이콘의 다섯 가지 전체 세트 형식, 크기 및 밀도 범위에서 사용할 수 있습니다 하단에는 Material Theme가 표시됩니다 스케치 편집자

Theme Editor 란 무엇입니까? 이미 다른 회담 소식을 듣지 않았다면, Theme Editor는 플러그인입니다 브랜드를 체계적으로 표현할 수 있습니다 색상, 도해 법, 인쇄술, 그리고 모양 그리고 Theme Editor를 통해, 당신은 우리가 당신을 위해 제공 한 주제를 취할 수있을 것입니다 그것을 사용자 정의하여 사용자 정의하십시오

이러한 구성 요소 집합은 디자인에 사용할 수 있습니다 곧 또한 Theme Editor에 대한 유용한 정보 가이드 라인에 언급 된 모든 가이드 라인입니다 도구에 직접 통합됩니다 나중에 뭔가를 바꾸고 싶다면 어떨까요? 문제 없어

다음은 내부 색상에서 색상을 선택하는 예입니다 팔레트를 구성 요소의 전체 라이브러리에 적용합니다 나는 이것이 매우 유용하다고 생각한다 그리고 이것은 내 일을 그렇게 쉽게 만듭니다 이제, 나는 그것을 동료에게 넘겨 주겠다

닉, Theme Editor 사용법에 대해 더 자세히 이야기 해주십시오 고맙습니다 고마워, 조니 고마워, 조니 그래서 우리는 Material System, Foundation, 가이드 라인을 통해 고유 브랜드를보다 쉽게 ​​가져올 수 있습니다

귀하의 앱에 나는 당신에게 어떻게하면 좋을지의 예를 들려 줄거야 당신은 정말로 얼마나 쉬운 지 보여주기 위해 이것을합니다 해야 할 일이며, 특히 새로운 자료가 어떻게 나타나는지 보여줍니다 툴링은 설계 과정에서이 프로세스를 만듭니다 훨씬 더 빨리 개발할 수 있습니다

그래서 저는 올해 멋진 팀의 일원이었습니다 Google I / O 앱을 디자인하고 제작 한 사람 어쩌면 당신 중 일부는 그것을 사용했을 수도 있습니다 우리는 새로운 컴포넌트 리를 배치했음을 눈치 챘을 것입니다 여기에 하단 앱 바를 사용하는 것처럼 인셋 팹과

그러나 우리는 새로운 Material Theming을 모두 사용하고 싶지 않았습니다 우리가 원하지 않았기 때문에 오늘 큰 출시를위한 쇼를 망쳐 놓을 수 있습니다 오늘 우리가하는 일은 너를 걷는거야 Material Theming이 어떻게 할 수 있었는지 몇 가지 가능성을 통해 Google I / O의 상표를 훨씬 더 깊게 가져 오기 위해 적용됩니다 이 응용 프로그램에

그래서 Google I / O, 개발자 회의입니다 우리는 그것을 개발자 페스티벌로 거의 생각하고 싶어합니다 이 브랜드에는 장난기가 가득합니다 나는 특히 장난을 좋아한다 모션 스타일의 종류

또한 색상 표를 통해 표현됩니다 당신 주위에있는 모든 곳에서 볼 수 있습니다 또한 소프트웨어의 은유를 사용합니다 엔지니어링 세계, 레이어 및 스택과 같은 것들 그리고 우리는 일러스트 스타일에 영감을주기 위해 그것을 사용합니다

브랜드의 일종으로 그렇다면 이러한 요소를 앱 디자인에 어떻게 적용 할 수 있을까요? 그래서 나는 스케치에있다 이 파일은 테마 편집기에서 생성 한 디자인 파일입니다 조니가 방금 당신을 보여 줬어 Theme Editor가 많은 것들을 생성했다는 것을 알 수 있습니다 우리를 위해

그것은 구성 요소의 무리, 인쇄술, 스케일, 컬러 팔레트, 입면도 설정 및 아이콘, 등등 여기에서 Components View로 전환하면, 기본적으로 볼 수 있습니다 자료의 모든 구성 요소에서 일대일로 이 스티커 시트에서 나를 위해 생성 된 지침 여기, 내 디자인에서 사용할 준비가되었습니다 앱 바에서 모든 것이 있습니다 팹에서 카드로의 백 드롭

이름은 여기에 있습니다 이 구성 요소들에 대한 더 좋은 점은 그들이 Material Theming 시스템을 알고 있다는 것입니다 내가 의미하는 바를 보여 드리죠 테마로 다시 전환하여 여는 경우 스케치 플러그인 메뉴의 테마 편집기, 우리는이 테마가 현재 I / O, 일종의 인디고 프라이 머리, 그리고 청록색 악센트 색깔의 종류 색상 설정으로 들어가서 여기에서 Primary Color 섹션을 클릭하면, 그리고 나는이 원색을 바꾸어야했다

16 진수 코드를 직접 드래그하거나 16 진수 코드를 입력함으로써, 그것은 많은 효과를 가질 것입니다 내가 너를 그들을 따라 가게 해줘 우선, 이런 종류의 색조 팔레트를 보게됩니다 이 10 가지 색상의 색상이 생성되었습니다 내가 선택한 그 한 색깔에서

이것은 꽤 멋지다 나는이 작은 것에 괴짜 할 것이다 여기에 순진하지 않고 있습니다 선택한 색조 만 사용하는 것이 아닙니다 밝기를 변경하고 그런 식으로 팔레트의 종류,이 알고리즘 뒤에 디자이너가 색상을 선택하는 방법을 모방하려고 노력하고 있습니다

그리고 그것을 사용하여 멋진 색상 표를 고를 수 있습니다 잘하면 응용 프로그램 전체에서 훌륭하게 작동합니다 그래서 그것을 선택하면 테마의 전체 색상 팔레트 업데이트 중입니다 그리고 제가 다시 구성 요소로 전환하면,이 스티커 시트, 당신은이 모든 요소들이 테마 색의 변화를 알고 있습니다 그리고 그 변화는 모든 요소들로 흘러 넘칩니다

따라서 앱 바가 기본 색상을 선택하고 더 어두운 색상을 선택할 수 있습니다 상태 표시 줄의 음색 등, 그것은 꽤 강력합니다 그렇다면 우리가 생성 한이 라이브러리를 어떻게 사용합니까? 따라서 내 앱 디자인 파일로 전환하면, 이것은 I / O 앱의 일부 화면입니다 라이브러리의 구성 요소를 사용하여 디자인했습니다 저를 위해 Theme Editor가 생성되었습니다

Sketch의 라이브러리 기능을 사용하지 않은 경우, 꽤 멋지다 기본적으로 구성 요소를 공유하는 방법입니다 서로 다른 디자인 파일간에 또는 팀간에 공유 할 수 있습니다 그것은 매우 강력합니다 따라서 표준 스케치 삽입물을 사용하여 라이브러리에 액세스합니다

메뉴 그리고 제가 생성 한이 라이브러리로 스크롤합니다 그리고 바로 여기서 볼 수 있습니다 스티커 시트에서 우리가 방금 보았던 이러한 종류의 나무 구조로 배열됩니다 그래서 우리는 우리가 구성 요소의 다양한 변형, 구성 요소가있을 수있는 다른 상태로 내려갑니다

따라서 설계에 팹을 추가하려면, 메뉴에서 하나 잡을 수있어 내 디자인에 떨어 뜨려 라 그리고 오른쪽 경위 창에서, 재정의를 제공하는 것을 볼 수 있습니다 당신은 아이콘과 같은 것들을 바꿀 것입니다 따라서 Theme Editor를 통해 생성하면, 사용할 수있는 많은 구성 요소가 있습니다

그래서 우리는 그것이 생성 된 라이브러리를 이해합니다 그리고 그것을 당신의 디자인에 사용하는 방법 이러한 매개 변수 중 일부를 사용자 정의하기 시작하십시오 그래서 나는 나의 도서관으로 돌아가 Theme Editor를 열었다 그리고 내가 생각하는 첫 번째 매개 변수 중 하나 I / O 브랜드가 재미있을 수도 있습니다

I / O 로고에서 영감을 얻고 싶습니다 그 사이에 이런 종류의 탁월한 슬래시가 있습니다 나는 우리가 흥미로운 종류의 표면을 할 수 있다고 생각한다 모양 치료 그래서 기본적으로, 기준선에서, 우리는 이런 종류의 둥근 모서리 표면 모양

각도 설정으로 전환하겠습니다 대신에이 세 모서리의 선택을 취소하십시오 왼쪽 상단 모퉁이 반지름을 크랭크 업하십시오 여기 I / O 로고에서 영감을 얻으 려합니다 내 제품의 구성 요소에 깊이 삽입 할 수 있습니다

라이브러리에서 저장을 누르고 전환하면 내 디자인 파일에 스케치가이 작은 보라색 막대를 띄웁니다 모퉁이에서 기본 라이브러리에 업데이트되었습니다 이것을 클릭하면 diff가 거의 나옵니다 이것들은 모두 이러한 변화의 영향을받을 것입니다 그래서 그것들을 선택할지 말지를 선택할 수 있습니다

나는이 모든 변화를 가져갈 것입니다 이제는 형상 시스템을 알고있는 모든 구성 요소 업데이트 될 예정입니다 예를 들어이 하단 시트를 확대하면 당신은 그것이 커트 코너에서 픽업되는 것을 볼 수 있습니다 그리고 마찬가지로, 여기에있는이 제기 버튼에, 그것은 모양을 인식합니다 시스템의 일부 구성 요소는 다른 기능을 제공합니다

매개 변수를 선택할 수 있거나 가질 수없는 변형 체계 예를 들어, 여기에 표준 원형 프리젠 테이션을 사용하고 있습니다 그러나 Symbol 설정으로 들어가면 내가 선택한 곳으로 갈 수있어 다른 대안을 선택하십시오 만약 내가 매개 변수를 알고 싶거나 원하지 않는다면

예를 들어, 다이아몬드 또는 스퀘어 타입으로 픽업 할 수 있습니다 모양, 다른 모양 매개 변수에 데리러 것입니다 또는 원하면 원형으로 유지하도록 선택할 수 있습니다 그래서 그것들은 그들의 매개 변수를 고르지 않을 것입니다 유사 콘텐츠에 대해 말하면서 새로운 분산을 도입했습니다

텍스트 필드 중 우리는 곧 다시 돌아올 것입니다 내 디자인에서 바로 들어가서 선택할 수 있습니다 기본 텍스트 필드의 표준 종류는 무엇입니까? 다른 변형으로 전환 할 수 있습니다 내 스티커 시트에서 사용할 수있는 것들 그래서 거기에 우리가 간다

텍스트 필드의 다른 변형이 있습니다 바로이 윤곽선을 사용하면 더욱 분명합니다 살펴보고 싶은 다음 매개 변수는 활판 인쇄입니다 현재 I / O 앱은 Google Sans를 사용하고 있습니다 Google 브랜드의 서체 인 페어링 된 Roboto와 함께 나는 우리가 어떤 영감을 얻을 수 있다고 생각한다

그것은 개발자 이벤트입니다 그래서 저는 개발에서 영감을 얻으려고합니다 환경을 보호하고 모노 스페이스 글꼴을 사용해보십시오 이것이 Google 브랜드와 어떻게 작동하는지 확인하십시오 Theme Editor의 타이포 그라피 설정으로 들어가면, 테마 편집기에있는 여기에이 스케일이 있음을 알 수 있습니다 나를 위해 생성, 이런 종류의 의미 스타일을 제공 내 디자인 전반에 걸쳐 적용 할 수 있습니다

여기에있는 Google Sans를 선택하고 검색하면 모노 스페이스 (monospace)의 경우, 여기서 Roboto Mono를 사용할 것입니다 내 즐겨 찾기 중 하나, 그것은 어디서나 교환 할 것입니다 그 다른 폰트가 사용되었다는 것 내가 사는 곳마다 다른 곳이야 Google Sans의 다른 변형을 사용하면 수동으로 변경할 수 있습니다

그리고 그것은 흥미로운 것을 할 것입니다 여기를 보시면 Google Sans로 설정되어있는 동안 볼 수 있습니다 특정 글꼴 크기와 추적 및 무게를 가졌습니다 그리고 다른 글꼴, Roboto Mono로 전환했을 때, 해당 스타일에 대해 변경된 글꼴 크기, 추적 및 체중 그래서 여기에있는 것은 Theme Editor입니다

글꼴에 대해 꽤 영리합니다 글꼴의 특성을 살펴 봅니다 순서대로 광학적으로 수정하십시오 조화로운 스케일을 만들 수 있습니다 그래서 당신이 선택한 글꼴이 무엇인지 알 수 있습니다

x 높이 또는 획 두께가 다릅니다 또는 이와 비슷한 것을 보면, 사용하는 크기를 조정합니다 규모의 다양한 유형에 대한 이 조화로운 유형을 생산하기 위해서 모두 단지 글꼴을 선택함으로써, 그것은 저를위한 스케일을 생성합니다 그것은 꽤 훌륭하다

그래서 그것을 저장하고 내 앱 디자인으로 다시 전환합니다 다시 말하면, 도서관이 업데이트되었음을 ​​알려줍니다 나는 모든 변화를 가져갈 수있다 디자인 전반에 걸쳐 나는 다른 폰트를 마침내 사용하고 있었다 당신은 내 새로운 서체로 업데이트 된 것을 볼 수 있습니다

[박수 갈채] 테마 편집기로 이동하십시오 그래서 이러한 변화는 나에게 꽤 좋아 보인다 나머지 팀원들과 공유하고 싶습니다 머티리얼 플러그인을 사용하면 Theme Editor와의 긴밀한 통합을 얻으십시오 하지만 갤러리와도 정말 잘 통합됩니다

공동 작업을위한 도구 플러그인에서 바로 갤러리에 업로드하도록 선택할 수 있습니다 프로젝트 또는 하위 수집을 설정할 수 있습니다 그것을 넣고 곧바로 업로드 할 수 있습니다 한 번 업로드하면 준비가 완료됩니다

팀과 공유했습니다 그래서 나는 우리 팀과 공유 할 수있는 고유 한 URL을 얻습니다 그래서 갤러리에서 디자인 작품에 대한 개요를 얻을 수 있습니다 새로운 반복을 업데이트 할 수 있으므로 내 디자인이 어떻게 발전했는지 나는 논평 할 수있다

그래서 이것을 사람들과 공유 할 수 있습니다 다양한 디자인 기능에 대한 토론이 있습니다 그러나 나는 당신에게 내가 절대적으로 좋아하는 기능 중 하나를 보여 주겠다 이는 검사 모드입니다 이제 Inspect Mode를 사용하면 디자이너가 쉽게 작업 할 수 있습니다

개발자와 개발자를위한 핸드 오프 디자인에서 필요한 모든 정보를 얻을 수 있습니다 따라서 Inspect Mode를 활성화하면이 Inspector를 얻습니다 오른쪽으로 그리고 나서, 내가 가리 키거나 디자인의 항목을 선택할 때, 그것은 나에게 spec 일을 줄 것이다 근본적으로 나에게 자동으로 빨간 선을 그어 줄거야

그래서 그것은 나에게 크기, 위치 정보를 준다 그것은 선택과 모든 것의 몸과 사본을 나에게 준다 서체 정보 그것도 당신이 그들에서 사용하는 모든 아이콘을 데리러거야 소재 테마 그래서 어떤 Material Icons가 당신을 연결시킬 것입니다 Material Icon 사이트로 이동합니다

필요한 자산을 확보 할 수 있습니다 그리고 바로 거기에서 무엇보다도 갤러리는 구성 요소를 이해합니다 테마 편집기가 생성합니다 따라서이 팹을 여기에서 선택하면, 단지 말하지 않을 것입니다

이봐, 이건 파란색 동그라미 야 그것은 말할 것입니다, 이봐 요, 나는 그것이 팹이라는 것을 알고 있습니다 따라서 그것이 팹이라는 것을 알 수 있습니다 무엇보다도 플랫폼 링크 당 제공됩니다 문서를 참조하기 때문에 개발자 구현해야하는 구성 요소로 직접 이동할 수 있습니다

그리고 그들은 어떤 매개 변수도 주어질 것입니다 변경 사항은 구성 요소에서도 변경되었습니다 나는 이것을 충분히 강조 할 수 없다 더 이상 그림이 그림을 넘겨주는 것이 아니라, 이봐, 이걸 구현할 수 있기를 정말로 바란다 구성 요소 간의 밀 결합 Theme Editor와 Material Design 구성 요소간에 제공됩니다

그들은 동일한 구성 요소라는 것을 의미합니다 이 구성 요소를 사용한다는 의미입니다 이 매개 변수가 변경되었습니다 그래서 더 이상 추측하는 게임이 아닙니다 그래서 이러한 변화는 나에게 좋을 것 같습니다

@Will에 대한 Comment 기능을 열어 두겠습니다 이러한 변화가 갤러리에 업로드되었습니다 구현 준비 너에게 끝이야, 윌 LARCHE : 고마워, 닉

그는 위대하지 않습니까? [박수 갈채] 그래서 저는 엔지니어입니다 그리고 닉은이 갤러리 프로젝트를 나에게 공유했습니다 나는 링크를 얻었다 그리고 나는 그것을 클릭한다 그리고 나는 여기 들어올거야

그리고 나에게 Material Components 선적 서류 비치 자, Material Components 또는 MDC는 무엇입니까? Material Components는 오픈 소스 프레임 워크입니다 머티리얼 디자인을 구현합니다 Android 용 MDC, iOS, 웹 및 Flutter 용 MDC가 있습니다 Google에서 앱과 동일한 코드입니다

각각에는 수십 가지 구성 요소가 있으며 모두 닉이 더 일찍 이야기했던 시원한 것들을해라 오픈 소스이기 때문에 수수께끼가 없습니다 그들은 마법 상자가 아닙니다 보거나 사용자 정의 할 수있는 모든 것을 사용할 수 있습니다 그리고 우리는 코드를 기증 해 주시기 바랍니다

이제 Material Components의 새로운 텍스트 필드를 살펴 보겠습니다 어떻게해야합니까? MDC를 코드 기반에 추가하는 것은 매우 쉽습니다 Android 사용자는 디자인 지원에 액세스합니다 표준 지원 라이브러리 설정을 사용하여 Maven을 통해 라이브러리 웹에서는 노드 모듈 만 설치하면됩니다

Flutter에서 끝났습니다 Flutter에는 재질 구성 요소가 내장되어 있습니다 iOS에서는 CocoaPod를 사용할 수 있습니다 Pod 파일에 추가합니다 iOS에서 조금 더 자세히 살펴 보겠습니다

새 텍스트 필드를 구현하는 방법에 대해 설명합니다 따라서 MDC iOS의 모든 텍스트 입력란에는 입력 및 제어기를 포함한다 우리는 MDC 텍스트 필드와 아웃 라인 컨트롤러를 추가 할 것입니다 우리의 앱에 본질적인 콘텐츠 크기를 사용하여 레이아웃 할 수 있습니다

UI 텍스트 필드 대리자를 설정할 수도 있습니다 그리고 자리 표시자는 국경을 넘어서 뜰 것이다 MDC를 이미 사용하고 있다면 업그레이드가 매우 쉽습니다 이러한 새로운 디자인을 얻으십시오 CocoaPod를 사용하고 있다면, 포드 업데이트 MaterialComponents를 실행하십시오

그런 다음 컨트롤러 클래스를 변경합니다 예전의 수업에서 새로운 멋진 수업 중 하나에 이르기까지 그리고 너 끝났어 그런데이 텍스트 필드는 훨씬 더 우수합니다 이전 디자인보다 성능이 좋습니다 우리는 엄청난 양의 연구를 순서대로 수행했습니다

이러한 최적화 된 디자인, 많은 연구가 필요합니다 그리고 그것은 긴 형태로, 사용자가보고 상호 작용할 확률이 훨씬 높습니다 이 텍스트 필드는 이전 디자인보다 새로운 텍스트 필드 또는 자료에 대해 더 자세히 알고 싶다면 연구, 목요일 "Measuring Material"목요일을 볼 수 있습니다 12시 30 분에 iOS에서 이렇게하는 것은 쉬운 일입니다 하지만 안드로이드는 어떨까요? 글자 입력 레이아웃에 윤곽선 상자 스타일을 설정했습니다

요소입니다 웹에서는 요소를 바꿉니다 클래스 MDC 라인 리플, MDC 클래스의 요소 클래스 경로가있는 SVG가있는 노치 아웃 라인 MDC 노치 외곽선 경로 및 MDC 요소 노치가있는 윤곽 유휴 수정 자 클래스 MDC 텍스트 필드 개요를 잊지 마십시오 더 간단 할 수는 없습니다

그리고 Flutter에서 테두리를 윤곽선으로 바꿉니다 MDC Flutter에서 일하기 때문에 조금 편견이 있습니다 하지만 펄터가 완벽한 방법이라고 생각합니다 여러 플랫폼에서 재료 설계를 구현할 수 있습니다 한 번 해보면 iOS와 Android를 모두 얻을 수 있습니다

그리고 MDC가 바로 구워집니다 Flutter 용 기본 UI 프레임 워크입니다 새 프로젝트를 만들 때마다 이미 링크되어 있습니다 나는 그것을 좋아한다 이제 재료 텍스트 입력란 코드에 추가 할 수 있습니다

그러나 더 많은 것이 있습니다 거의 모든 재료 가이드 라인 구성 요소를 찾을 수 있습니다 자재 구성 요소 앱 바, 버튼, 카드, 칩, 대화 상자, 탐색, 탭, 잉크 잔물결 지금 수십 가지가 있습니다

그리고 오늘 Materialio/develop에서이 모든 것들을 이용할 수 있습니다 그리고 설계가 완료되지 않았기 때문에 항상 더 많은 것들이 추가됩니다 오늘은 디자인 리소스를 보여 줬습니다 오늘 Material

io에서 사용할 수 있습니다 Theme Editor, Gallery 및 Material Tools Suite의 사용법 브랜드를위한 디자인을 사용자 정의 할 수 있도록 도와줍니다 머티리얼 구성 요소가 만드는 방법 4 개의 플랫폼에서 이러한 디자인을 쉽게 구현할 수 있습니다 정확성과 용이성 그래서 당신이 I / O에 있다면, 그 밖의 무엇을 할 수 있습니까? 우리의 디자인 돔으로 갈 수 있습니다

디자인 리뷰 및 데모를 얻을 수 있습니다 박스 회담에 귀를 기울이십시오 그리고 당신은 또한 이야기를 보러 갈 수 있습니다 "Flutter가있는 코드 Beautiful UI 그리고 재료 디자인 " 우리는 Material Components를위한 30 개의 코드 랩을 가지고 있습니다

코드 랩에서 그리고 수요일 2시 30 분에 세션, "펄럭과 물질을 묻는다" 우리에게 와서 질문 할 수있는 곳 Flutter 앱에서 소재 디자인을 구현하는 방법에 대해 알아보십시오 고맙습니다

[음악 재생]

Keynote (Google I/O '18)

좋은 아침입니다 구글 CEO 순다르 피차이 구글 개발자 연례 회의에 오신 여러분을 환영합니다 날씨가 좋네요 작년보다 좀 더 따뜻한 거 같아요 모두들 즐거운 시간 보내고 계신가요 이 자리에 와 주셔서 감사합니다 오늘 약 칠천명 정도가 와 주신 것 같은데요 여기 와 주신 분들 뿐만 아니라 전세계에서 라이브 스트리밍으로 보고 계신 분들도 있습니다 모든 분들에게 감사 드립니다 오늘 많은 얘기를 나눌 거예요 시작하기 전에 아주 중요한 사안을 먼저 해결하고 싶네요 작년 말 즈음에 제 눈길을 끈것이 있었는데 우리 주력 상품 중 하나에 중대한 버그가 있다는 것이었죠 뭐였냐면 버거 이모지에 있는 치즈의 순서가 잘못 된것이었습니다 버그를 고치느라 고생 좀 했어요 사람들이 치즈가 어디 있는지에 대해 그렇게 많이 신경 쓰는지 몰랐어요 그래서 수정했습니다 애초에 제가 채식주의자라는 게 좀 아이러니하네요 어째든 수정이 완료되었습니다 이번엔 치즈가 올바른 곳에 자리잡았기를 바랍니다 버거 이모지를 수정하다 보니 이 이모지도 거슬리더군요 왜 거품이 맥주 위에 있는지에 대해 직원들이 한 설명은 언급하고 싶지도 않네요 이제 물리법칙에 맞게 수정해두었습니다 다 잘 수정되었으니까 본론으로 들어가볼까요? 작년 개발자 회의 이후로 생긴 많은 발전들에 대해 이야기 해보죠 많은 부분에서 특별한 한 해였다는 것을 모두 동의하실 거라고 생각합니다 여러분도 느끼셨을 거라 믿습니다 우리는 지금 컴퓨팅에 있어서 중요한 변곡점에 서 있습니다 기술을 진보시키는 건 흥미진진한 일이죠 그에 따른 우리의 책임에 대해서도 많은 생각을 해 봤습니다 기술에 대한 기대는 어떤 세상에서 사느냐에 따라 혹은 어떤 기회가 주어졌느냐에 따라 굉장히 달라집니다 휴대폰 없이 성장한 저같은 사람은 분명히 기억하고 있습니다 기술에 대한 접근성이 우리의 삶을 어떻게 바꿀 수 있는지를요 우리는 세계 각지에서 일을 하면서 이를 목격할 수 있습니다 여러분은 스마트폰을 처음 접하는 사람을 보면서 알 수 있을 겁니다 그리고 우리가 보는 디지털 기술에 대한 큰 수요를 통해 느낄 수 있습니다 그게 바로 우리가 디지털 기술을 세계 각지로 보급하는데 집중하는 이유입니다 지금까지 우리는 2,500만명을 훈련시켰고 향후 5년 안에 그 숫자가 6,000만명 이상이 될 것으로 기대하고 있습니다 기술이 긍정적인 힘을 가진 것은 분명합니다 그러나 기술 혁신이 가져올 수 있는 결과에 대해 우리가 놀라기만 할 수는 없다는 것 역시 분명합니다 기술의 진보가 우리의 삶에서 수행할 역할에 대한 매우 실제적이고 중요한 질문이 있습니다 우리가 가야할 길에 대해 매우 조심스럽고 신중한 접근이 필요하다는 것을 잘 알고 있습니다 그 권리를 얻은 데 대한 깊은 책임감 역시 느끼고 있습니다 주요 과제들에 대한 우리의 신념이 바로 이것입니다 정보를 좀 더 사회에 유용하게, 접근성 있게 그리고 유익하게 만드는 것입니다 하나의 기업체로서 영원한 과제를 가진다는 것이 행운이라고 생각합니다 처음 시작했을 때만큼이나 오늘날과도 이어져 있는 느낌이거든요 우리의 과제에 접근함에 있어서 새로운 활력소와 함께 한다는 사실에 흥분됩니다 AI에서의 성장 덕분이죠 AI는 우리에게 새로운 길을 제시해 줬습니다 전세계 사용자들의 문제를 해결 하는데 있어서요 작년 개발자 회의에서 구글 AI를 발표했습니다 우리 팀이 열심히 노력한 결과였죠 AI의 편리함을 모두와 나누기 위해서 말입니다 저희는 전세계적으로 보급하고 싶기 때문에 세계 곳곳에 AI 센터를 만들었습니다 AI는 앞으로도 많은 분야에 영향을 주게 될 겁니다 오늘 그 예시를 몇 개 보여드리겠습니다 AI가 변형시킬 중요한 분야 중 하나가 건강 관리 분야입니다 작년에 당뇨병성 망막증과 관련한 작업을 발표했습니다 이것이 실명의 주요 원인입니다 구글은 의사의 더 빠른 진단 돕기 위해 딥 러닝 기술을 적용했습니다 그 때부터 계속 현장 시험을 해왔습니다 인도의 아라빈드 병원과 산카라 병원에서 이루어졌죠 현장 시험 결과는 매우 좋았습니다 전문의가 드문 지역에서 전문적인 진단을 내릴 수 있게 해 줬습니다 같은 망막 스캔을 봐도 사람이 찾아낼 수 없는 것들을 AI는 찾아낼 수 있다는 것을 알 수 있었습니다 같은 홍채 인식을 통해서 AI는 더 많은 정보들을 얻을 수 있었습니다 이를 통해 5년 내에 심장마비나 뇌졸중 같은 유해 심혈관 관련 질병의 발병을 예상할 수 있었습니다 제가 흥미롭게 생각한 점은 의사가 홍채 검사로 발견할 수 있는 것보다 머신 러닝을 통해 발견할 수 있는 것이 더 많다는 것입니다 이 기술은 심혈관계 질환을 수술 없이 발견하는 데 초석이 될 수 있습니다 현재도 진행중이며 최근 연구 결과를 발표했습니다 또한 협력사들과 함께 이를 현장에 적용시키려 작업하고 있습니다 AI가 도울 수 있는 또 다른 분야는 의사를 도와서 질병을 예측하는 것입니다 의사들은 다양하고 많은 어려움에 직면하고 있습니다 그런 의사들을 위해서 예고를 해 주는 거죠 24시간에서 48시간 이내에 환자가 매우 아프게 될 것 같다 이런 예고는 중대한 차이를 가져올 수 있습니다 그래서 머신 러닝 시스템으로 작업을 진행했습니다 협력 업체들과 함께 일했습니다 익명의 의료 기록들을 이용했습니다 그리고 각 환자별로 십만개가 넘는 정보를 분석하면 어떤 의사도 혼자서 분석할 수 없는 양이죠 AI가 양적으로 재입원의 가능성을 추측할 수 있다는 것을 알아 냈습니다 기존 방식보다 24시간에서 48시간 빠르게요 의사에게 행동할 시간을 좀 더 많이 줄 수 있습니다 이와 관련한 자료를 오늘 오후경에 게재할 예정입니다 우리와 함께 일할 병원이나 의료기관을 찾고 있습니다 AI가 도울 수 있는 다른 분야는 접근성 분야입니다 일상적인 사용 사례를 훨씬 쉽게 만들 수 있습니다 흔한 사용사례를 들어 볼게요 밤에 집에 오면 TV를 켜잖아요 종종 두 명 혹은 그 이상의 사람들이 서로에게 열정적으로 대화를 하는 화면을 보실 겁니다 잘 들리지 않는 부분을 들으려고 자동 생성 자막에 의존해서 무슨 말을 하는지 본다고 상상해보세요 아마 이런 장면을 보게 될 겁니다 보시다시피 알아 보기가 힘들죠 무슨 말을 하는 지 알기 어렵습니다 그래서 '루킹투리슨'이라 불리는 머신 러닝 기술이 있습니다 청각 신호만을 알아듣는 것이 아니라 시각 신호와 청각 신호를 결합하여 두 음성을 명확히 구분해 줍니다 어떻게 작동하는 지 보실까요? 유튜브 영상이라고 생각해보세요 그는 대니 에인지 수준은 아닙니다 그렇지만 콜란젤로보다는 낫죠 그러니까 그는 알아들을 수 있습니다 고의로 져도 괜찮다고 말한 겁니까? 지금 고의로 지는 것이 괜찮다고 말했을 뿐만 아니라 팬들한테 다 알려준 거죠? 이래도 괜찮다고 당신이 괜찮다고 했잖아요! 더 이상 말 할것도 없네요 우리는 말 할게 많이 있죠 중요한 일상적인 사용사례에 어떻게 기술을 접목하여 훨씬 더 편리하게 만들 수 있는지 보셨습니다 기술의 위대한 점은 끊임없이 발전한다는 것입니다 사실 머신 러닝은 200년 전 기술인 모스부호에도 적용시킬 수 있습니다 그리고 누군가의 삶의 질에 영향을 줄 수 있죠 한 번 보실까요? 안녕하세요 저는 타냐입니다 이것이 제 목소리 입니다 저는 머리 근처에 고정되어 있는 스위치로 점과 대시를 클릭해서 모스부호를 사용합니다 제가 어릴때에는 의사소통단어판을 사용했습니다 단어를 가리키기 위해 머리에 달린 막대를 사용해야만 했습니다 굉장히 재미있었습니다 진심으로요 모스부호가 처음 제 삶에 들어왔을 때 순수한 해방과 자유를 느낄 수 있었습니다 이따 봐요 사랑해요 아마 그게 제가 스카이 다이빙을 매우 좋아하는 이유인 것 같습니다 같은 해방감과 자유를 느끼거든요 스카이 다이빙을 통해서 제 하나뿐인 사랑인 켄을 만났습니다 그 역시 저와 사랑에 빠졌죠 정말 굉장히 힘든 일이었습니다 모스부호를 시험해 보기 위해 모스부호 장비를 찾는 건 힘들었어요 그래서 직접 만들어야만 했습니다 켄의 도움으로 제 목소리를 가질 수 있었습니다 또한 제 일상의 독립성도 향상 되었죠 하지만 대부분의 사람들 곁엔 켄과 같이 도와주는 사람이 없죠 그래서 G보드 팀과 협력하고 싶습니다 모스부호를 사용하는 자유를 만끽하길 희망하는 사람들을 도와주기 위해서요 G보드는 구글 키보드입니다 G보드에서 일하면서 알게 된 건 전세계적으로 그러니까 수천만명의 사람들이 살면서 본인들의 언어로 된 키보드를 가지지 못 했다는 사실입니다 구글은 타냐와 함께 모스부호를 지원하는 G보드를 만들었습니다 이것은 일종의 입력 양식입니다 모스부호를 입력하면 추측과 제안을 통해 문자가 출력됩니다 좋은 머신 러닝 예시라고 생각합니다 머신 러닝을 이용해서 실제로 누군가를 도와줄 수 있습니다 인공 지능이 없는 평범한 키보드는 할 수 없는 일이죠 이 여정을 계속할 수 있어서 매우 행복합니다 아주 많은 사람들이 이로 인해 혜택받을 거예요 그게 저를 무한히 전율시킵니다 고마워요 타냐 다른 사람들이 그들의 목소리를 찾게 당신의 목소리를 사용해줘서 매우 인상적인 이야기입니다 타냐와 켄을 이 자리에 모실 수 있어서 매우 영광입니다 타냐와 켄은 실제로 개발자로서 프로젝트에 기여했습니다 G보드에 포함된 실제 예측 제안의 힘을 모스부호의 문맥에서 사용 하기 위해 직접 구글 팀과 함께 개발에 참여했습니다 모스부호 기능이 포함된 G보드의 베타 버전이 오늘 오후경 이용가능 하다는 사실에 정말 기쁩니다 AI와 함께 제품을 재창조할 수 있어서 너무 좋습니다 G보드가 훌룡한 예시죠 매일매일 80억개가 넘는 자동 완성을 우리가 사용자에 제공하고 사용자는 그를 선택합니다 우리 주력 상품 중 하나를 AI를 이용해서 재설계한 또 다른 예시는 G메일입니다 G메일이 새롭고 신선한 외관으로 최근에 바뀌었잖아요? 최근에 이루어진 재설계입니다 여러분이 만족하시면서 쓰시고 계신다면 좋겠네요 G메일의 또 다른 기능을 보여드리겠습니다 스마트 작성이라고 부릅니다 이름에서 알 수 있듯이 머신 러닝을 사용해서 여러분이 타자를 칠 때 문구를 제안해주는 거죠 여러분이 할 일은 탭을 누르고 자동 완성을 하는 것 뿐입니다 화요일에 타코 먹기 자클린 안녕 못 본 지 좀 됐네 잘 지내고 있지? 조만간 만나서 타코 먹는 거 어때? 니가 나쵸랑 살사소스 가져오면 내가 과카몰리 만들게 이 메일에서 제목이 화요일에 타코 먹기라는 것을 인지하고 칩, 살사 소스, 과카몰리를 제안하고 있고요 주소같은 일반적인 것들도 자동으로 처리합니다 그래서 여러분이 걱정할 필요가 없죠 뭐라고 쓰고 싶은지에만 집중하면 됩니다 저는 이 기능을 즐겨 씁니다 이 기능으로 회사에 많은 메일을 보냈어요 회사가 뭐라고 생각할 지는 모르겠지만요 굉장히 좋았습니다 이번 달 내로 스마트 작성을 출시할 예정입니다 여러분 모두 좋아하시기를 바랍니다 다음 제품은 개발 단계부터 AI를 활용해서 만든 서비스인데요 바로 구글 포토입니다 아주 잘 작동되고 있고 점점 더 나아지고 있습니다 사진 중 하나를 클릭하는 것을 사진 뷰어 경험이라고 부릅니다 한 번에 한 장의 사진만을 보는 거죠 사진 서비스 규모에 대한 부연설명을 드리자면 매일매일 50억 장이 넘는 사진이 사용자들에 의해 클릭됩니다 매일매일이요 우리는 AI가 그런 상황에서 쓰이기를 바랐습니다 새로운 기능인 행동 제안입니다 사소한 행동들을 제안해주는 거죠 사용자가 행동하는 맥락 안에서요 예를 들어보겠습니다 결혼식에 다녀 왔다고 가정하죠 찍은 사진들을 살펴보겠죠 구글포토가 사진 안에 당신의 친구인 리사가 있다는 것을 인식하고 그러면 리사와 함께 찍은 사진 세 장을 공유하지 않겠느냐고 제안하는 거죠 한 번의 클릭으로 그 사진들을 리사에게 보낼 수 있습니다 모두들 자기 휴대폰으로 사진을 찍으려고 하잖아요 그걸 개선할 수 있는 거죠 예를 들어보겠습니다 같은 결혼식입니다 사진의 노출이 부족하면 우리 AI가 제안하는 거죠 지금 밝기를 조절하라구요 탭 한 번만 해주면 저절로 적절하게 밝기를 조절해 줍니다 혹은 여러분이 나중에 다시 보려고 서류를 찍어 두었다면 구글 포토가 이를 인식하고 서류를 PDF파일로 변환할 수 있습니다 그래서 나중에

나중에 쓰기 훨씬 편하게요 이런 간단한 일들을 즐겁게 만들고 싶었습니다 한편으로는 AI가 예상치 못한 상황을 선사할 수도 있습니다 예를 들면 아이를 귀엽게 찍은 사진을 가지고 있습니다 더 좋은 사진으로 만들어 줄 수 있어요 배경색을 없애고 아이의 색을 튀게 만들어 줍니다 아이를 한 층 더 귀엽게 해 주죠 아니면 아주 특별한 순간 있잖아요 흑백 사진으로 저장된 순간이요 어머니나 할머니의 사진일 수도 있죠 구글포토는 색을 입혀서 그 순간을 재창조 할 수 있습니다 좀 더 현실적이고 특별한 순간으로 만들어 줍니다 이 모든 구글 포토의 새 기능은 몇 달 이내에 출시될 예정입니다 이런 작업이 가능한 이유는 한동안 우리가 연산형 아키텍처의 규모에 많은 투자를 해왔기 때문입니다 작년에 텐서 프로세싱 유닛에 대해 말했던 것도 같은 이유입니다 특수 목적 머신 러닝 칩들입니다 오늘날 우리가 보고 있는 모든 제품의 개선을 만들어냈죠 이를 클라우드 소비자들에게도 이용 가능하게 만들었습니다 작년 이후로 우리는 열심히 일했습니다 그래서 오늘 차세대 TPU 30을 발표하게 되어 기쁩니다 이 칩들은 너무 빨라서 사상 처음으로 우리 데이터 센터에 액체 냉각 시스템을 도입해야만 했습니다 이 칩을 거대한 포드에 연결해서 각각의 포드들은 작년보다 8배 이상 빨라졌습니다 100 페타플롭스를 가뿐히 넘는 속도죠 덕분에 우리는 더 좋은 모델 더 큰 모델, 더 정확한 모델을 만들 수 있습니다 더 큰 문제들을 해결하는 데 도움을 주기도 하죠 AI를 다루면서 생긴 주요 문제 중 하나는 구글 어시스턴트입니다 우리가 바라는 완벽한 어시스턴트는 자연스럽게 대화할 수 있고 필요할 때 도움을 제공하며 현실의 일을 해결하게 해 주는 것입니다 이것을 더 좋아지게 만드는 작업을 하고 있습니다 어시스턴트가 자연스럽고 편안하게 대화할 수 있기를 원합니다 그러기 위해서는 구글 어시스턴트의 기초부터 시작해야겠죠 바로 음성입니다 오늘날 대부분의 사용자들이 어시스턴트와 상호작용하는 수단이죠 지금 음성은 '홀리'라고 불립니다 진짜 사람이죠 우리 스튜디오에서 몇 달간 머물렀습니다 녹음한 것들을 이어 붙여서 음성을 만들었습니다 하지만 18개월 전에 딥마인드 팀이 찾아낸 돌파구를 발표했죠 웨이브넷입니다 현재 체계와는 다르게 웨이브넷은 좀 더 자연스러운 음성을 만들기 위하여 실제 근본이 되는 로우 오디오를 만들어 냅니다 사람이 말하는 것과 흡사하게요 음의 높이, 속도 심지어는 말사이의 공백까지 따라해서 의미를 전달해 줍니다 그 모든 것을 가능하게 하고 싶었습니다 웨이브넷으로 열심히 작업했습니다 오늘부터 구글 어시스턴트에 6개의 새로운 음성이 추가됩니다 함께 인사 해 볼까요? 좋은 아침입니다 저는 당신의 구글 어시스턴트입니다 쇼어라인 앰피씨어터에 오신 것을 환영합니다 구글 개발자 회의를 즐기시기를 바랍니다 순다르씨에게 마이크를 넘깁니다 우리의 목표는 언젠가 전세계적으로 올바른 강세, 언어, 사투리를 구사하는 겁니다 웨이브넷이 이를 훨씬 쉽게 만들어 줍니다 이 기술을 활용하면서 어떤 놀라운 음성을 가진 분을 스튜디오로 모시면 좋을지 고민했습니다 한 번 보시죠 쿠스쿠스 북아프리카 세몰리나와 듀럼 밀을 빻아서 나온 작은 알갱이 형태의 음식 다정한 눈과 복슬거리는 꼬리에 내 하이쿠를 좋아하는 강아지를 원해 누구나 그렇지 않나? 생일을 맞은 당신의 생일을 축하합니다 생일 축하합니다 존 레전드 자랑하기 싫다고 얘기하겠지만 당신이 들은 것 중 최고의 어시스턴트가 될 겁니다 어디 사는지 말해 줄수 있나요? 각종 기기에서 저를 찾을 수 있습니다 휴대폰, 구글 홈 그리고 제게 행운이 따른다면 당신의 마음에서도요 네, 존 레전드의 음성이 어시스턴트로 나옵니다 존이 여러분이 물을 만한 모든 예상 질문에 답하면서 계속 스튜디오에 있지 않았던건 분명합니다 웨이브넷은 스튜디오에서 보내야 하는 시간을 줄이고 모델이 존의 다양한 목소리를 포착할 수 있게 했습니다 존의 음성은 올해 말에 특정 상황에 맞게 나올 예정입니다 여러분이 이런 대답을 들을 수 있게요 좋은 아침입니다 순다르씨 지금 마운틴 뷰의 하늘은 맑고 기온은 섭씨 18도입니다 오늘은 24도까지 올라갈 것으로 보이고 날씨는 화창할 예정입니다 오전 10시에는 구글 개발자 회의 기조 연설 일정이 있고 그리고 오후 1시에는 마가리타를 마실 예정입니다 좋은 하루 되십시오 오후 1시가 기다려지네요 존의 음성은 올해 하반기에 나올 예정입니다 AI와 함께 이런 진보를 이룰 수 있어서 정말 기쁩니다 구글 어시스턴트에는 더 많은 업그레이드가 있을 겁니다 그에 관해서 좀더 이야기해볼까요? 스콧을 무대 위로 모시겠습니다 헤이 구글 매디한테 전화 해 줘 네, 지금 전화합니다 헤이 구글 식사 4명 예약 해 줘 알겠습니다 헤이 구글 동생한테 전화해 줘 헤이 구글 형한테 전화해 줘 캐롤한테 문자해 줘 날 위해서도 캐롤에게 문자해 줄래? 헤이 구글 누가 나한테 문자했어? – 요 구글 – 컷! 케빈, 정말 좋았는데요 우리가 아직 '요 구글'은 못 만들어서요 '헤이'라고 해야 해요 헤이 구글 헤이 구글! 시아 노래 재생해 줘 헤이 구글 다음 편 재생해 줘 넷플릭스에서 크라운 재생해 줘 채닝 테이텀 나온 영화 전부 재생해 줘 알겠습니다 – 요 구글 – 컷! 잘 하셨는데요 제발 한 번만 '헤이 구글'이라고 해 주시면 안 될까요? 헤이 구글 내 휴대폰 찾아 줘 지금 찾고 있습니다 와! 헤이 구글 헤이 구글 헤이 구글! 요 구글 앞문 잠가 줘 컷! 좋아요 그럼 그냥 요 구글로 가죠 아마 기술자들은 그게 뭐든 업데이트하는 걸 좋아하겠죠 요 그냥 헤이 구글이라고 말하고 구글이 하게 하세요 안녕하세요 무었을 도와 드릴까요? 구글 어시스턴트 개발 총책임자 스콧 허프만 2년 전에 바로 이 연례 회의에서 구글 어시스턴트를 발표했습니다 오늘날 어시스턴트는 5억여개의 기기에서 이용 가능합니다 휴대폰, 스피커, 헤드폰 TV, 시계 그리고 그 외의 기기들을 포함해서요 40개가 넘는 자동차 브랜드의 자동차에서도 가능합니다 커넥티드 홈 디바이스 5천여개에서도 작동합니다 식기세척기부터 초인종까지요 전세계 사람들이 매일 어시스턴트를 쓰고 있습니다 예를 들면 우리는 작년에 인도에서 어시스턴트를 출시했습니다 반응이 정말 엄청났습니다 일일 사용량은 올해 초의 세 배가 됐습니다 올해 말까지 어시스턴트가 30개의 언어를 지원하고 80개국에서 이용 가능해 질 겁니다 대단한 진보를 이룬 거죠 그렇지만 아직 시작에 불과합니다 오늘 여러분에게 알려드릴 소식은 어시스턴트가 좀 더 자연스럽게 대화하고 시각적으로 나아질 중요한 방법입니다 여러분이 좀 더 많은 일을 하고 여유 시간을 가질 수 있도록요 피차이CEO가 말했다시피 이제 구글 어시스턴트에서 새로운 음성들을 선택할 수 있습니다 어시스턴트와 좀 더 자연스럽게 대화하기 위해서 중요한 요소죠 그러나 훌륭한 대화 상대가 되기 위해서 어시스턴트는 대화의 사회적 역동성을 깊게 이해해야만 합니다 예를 들어 보겠습니다 솔직히 말해서 어시스턴트가 내 말을 듣게 하고 싶을 때마다 '헤이 구글'이라고 말하는 건 조금 짜증나지 않나요? 여러분이 유튜브에서 보셨을 수도 있는 이 할머니는 분명히 그렇게 느끼고 계십니다 구구! 헤이 구구! 구구! 헬로우 구구! 헤에이 구구 오케이 구구 – 날씨가 어떨지 궁금하대 – 내일 날씨가 내일 날씨가 플래글러 해변의 내일 날씨는 소나기가 내릴 예정이며 기온은 최고 18도, 최저 13도입니다 어시스턴트가 결국 할머님을 위해서 일하긴 했네요 그렇지만 이렇게 힘들어서는 안 되잖아요 이제는 매번 '헤이 구글'이라고 하지 않아도 됩니다 확인해 보시죠 헤이 구글 워리어스가 이겼어? 네, 워리어스가 118 대 92로 이겼습니다 저번 일요일이었고 상대는 펠리칸스였습니다 좋았어! 다음 게임은 언제야? 워리어스의 다음 게임은 오늘 오후 7시 30분입니다 상대 팀은 펠리칸스입니다 고마워 오늘 밤 경기는 재밌겠어 내가 집에 가면 케빈 듀란트 저지 찾으라고 말해줘 알겠습니다 집에 도착하면 말씀 드리겠습니다 제가 자연스럽게 오고 가는 대화를 했다는 걸 눈치채셨나요? 어시스턴트와 대화하면서 후속 요청마다 '헤이 구글'이라고 반복할 필요가 없었죠 훨씬 더 유용한 건 제 어시스턴트가 어시스턴트에게 말하는 것과 여러분에게 말하는 것을 구분할 수 있다는 겁니다 이것을 지속되는 대화라고 부릅니다 가장 요청이 많이 들어온 기능이었습니다 이 기능은 다음주부터 사용 가능 합니다 경기 시간이 다가왔다고 가정해봅시다 헤이 구글 워리어스 경기 켜 주고 팝콘 기계 시작 해 줘 네 유튜브 TV에서 하는 골든 스테이트 워리어스 게임입니다 팝콘 기계 작동시켰습니다 그리고 거실이랑 주방 불 좀 어둡게 해 줘 알겠습니다 거실과 주방 조명을 낮춥니다 이 두 예시에서 제가 한 번에 여러 가지를 요구했다는 걸 알아차리셨나요? 우리한테는 굉장히 자연스러운 일이죠 하지만 컴퓨터가 이해하기는 어려운 일입니다 이것을 다중 액션이라고 부릅니다 이 기능은 지금부터 어시스턴트에서 사용 가능합니다 여러분이 어쩌면 '이게 어려운가?' '-고' 같이 연결어만 찾으면 되잖아' 라고생각할 수도 있는데요 하지만 언제나 그렇게 간단한 일은 아니죠 이 예시에서 '와'가 포함되어 있지만 두 가지 질문이 아니라 사실 하나의 질문이거든요 워리어스와 펠리칸스 중에 누가 이겼지? 하지만 이 예시는 워리어스와 펠리칸스의 선수 명단은? 방금 전의 예시와 비슷해 보이지만 어시스턴트가 문장을 분해해야만 두 가지 질문을 찾아낼 수 있습니다 언어학에서 대등 구조 축소라고 불리는 현상입니다 -워리어스의 선수 명단은? -펠리칸스의 선수명당은? 다중 액션은 더욱 복잡한 방식도 이해할 수 있습니다 그럼 재미를 위해서 헤이 구글 케빈 듀란트가 드래프트되었을 때 누가 캘리포니아의 주지사였지? 그리고 어떤 팀이 그를 드래프트 해갔지? 2007년 주지사는 아놀드 슈왈츠제네거였습니다 시애틀 슈퍼 소닉스가 케빈 듀란트를 드래프트했습니다 좋습니다 혹시 궁금해하실까봐요 감사합니다 다음 이야기를 해 보죠 우리가 연구한 또 다른 건 가정용 구글 어시스턴트의 대화 기능 향상입니다 작년 가을에 구글 어시스턴트의 가정용을 출시했습니다 가족끼리 하기 좋은 게임이나 활동, 이야기들을 제공해줍니다 우리는 책장을 계속 확장했습니다 가족들은 13만 시간이 넘는 동화를 청취했습니다 지난 두 달만 세어 봐도요 가족들을 위한 일을 계속해서 개선해 나가다 보니 많은 부모님들이 걱정을 했습니다 우리 팀에 있는 자녀를 가진 사람들도 그랬죠 아이들이 너무 오만하고 요구만 하게 된다는 겁니다 그냥 '헤이 구글'이라고 말하고 원하는 걸 시키기만 하면서요 이건 접근하기 쉬운 영역이 아니죠 하지만 우리가 한 걸음 내딛었는데 프리티 플리즈라는 기능입니다 아이를 가진 직원 몇몇이 직접 실험해봤습니다 한 번 보시죠 헤이 구글 (불명확함)에게 말해줘 아빠 '주세요'라고 말해야지 오케이 구글 이야기 하나만 해주세요 '주세요'라고 말해주셔서 감사합니다 프리즈 댄스 재생해주세요 정말 상냥하게 부탁하시네요 이야기 하나만 말해주세요 친절하게 부탁해주셔서 감사합니다 옛날 옛날에 괴짜 바다코끼리가 살았습니다 제 숙제 좀 도와주세요 제발요 – 제발 – 제발요 당신은 정말 예의바르시군요 나도 알아요 보신 것처럼 어시스턴트가 정중함이 더해진 긍정적인 대화를 이해하고 반응하는 거죠 가족들과 아동 발달 전문가와 상의하며 일해왔습니다 프리티 플리즈를 올 해 하반기 이내에 가족용 선택사항으로 만들 예정입니다 어시스턴트를 위한 새로운 목소리들부터 지속되는 대화 다중 액션, 프리티 플리즈까지 AI가 우리가 크게 도약하는데 도움을 주고 있습니다 그래서 모두가 좀 더 자연스럽게 어시스턴트와 대화할 수 있습니다 이제 릴리안을 소개하겠습니다 우리가 하고 있는 재밌는 일들을 알려주실 분입니다 음성와 영상 어시스턴트를 통합한 것과 관련해서요 스콧 감사해요 좋은 아침입니다 구글 어시스턴트 프로덕트 매니지먼트 디렉터 릴리안 링콘 지난 몇 년 동안 어시스턴트는 구두 대화에 집중해왔고 그 결과를 구글에서 보고 계십니다 오늘 새로운 비쥬얼 캔버스를 공개하도록 하겠습니다 화면용 구글 어시스턴트입니다 풍부한 시각 자료들과 단순한 목소리를 결합했습니다 매기를 무대 위로 불렀습니다 라이브 데모 버전을 오가면서 보여드릴 예정이거든요 새로운 스마트 디스플레이의 초기 버전 기억하시나요? 이번 1월에 CES에서 보여드렸습니다 우리는 최고의 소비자 가전 브랜드와 협업을 하고 있습니다 오늘 첫 번째 스마트 디스플레이가 오는 7월에 판매될 예정임을 말씀드리게 되어 기쁩니다 오늘 저는 이 새로운 장비가 여러분의 일상을 더 쉽게 만들어 주는 방법을 보여드리겠습니다 음성의 간결성을 터치 스크린의 한 눈에 알아보기 쉬운 속성과 결합해서 말이죠 라이브 데모 버전을 보실까요? 이 기기는 레노버 스마트 디스플레이입니다 은은한 화면에 구글 포토와 결합되어있습니다 제 아이들 사진이 제게 인사하네요 벨라와 허드슨은 진짜 제 아이들입니다 매일 아침을 시작하는 최고의 방법이죠 기기가 제 목소리에 통제되기 때문에 간단한 명령어만으로 영상이나 실시간 TV를 볼 수 있습니다 집 안에서 다른 일을 하면서 제가 제일 좋아하는 프로그램을 놓치지 않게 해 주는 간단한 방법이죠 헤이 구글 지미 키멜 라이브 보여 줘 알겠습니다 유튜브 TV에서 지미 키멜 라이브를 재생합니다 재밌는 일이 있었어요 제가 실제로 겪은 일인데요 오늘 아침에 딸들을 학교에 태워다 주고 있는데 바로 이렇게요 여러분은 유튜브 TV에서 멋진 프로그램들을 볼 수 있는데요 지역 뉴스나 실시간 스포츠 경기부터 아주 많은 프로그램들이 있습니다 이러한 것을 스마트 디스플레이에서 이용하실 수 있을 겁니다 물론 유튜브의 평범한 컨텐츠들을 즐기고 싶으실 수도 있죠 초보자를 위한 영상이나 음악, 새로나온 시리즈 코브라 카이 같은 독자적인 컨텐츠 같은 것 말이죠 정말 재미 있어서 이번주 부터 보기 시작 했습니다 요리는 음성과 화면의 결합이 정말로 유용하게 쓰이는 또 다른 예죠 닉과 저는 간단한 가정용 요리법을 즐겨 봅니다 헤이 구글 피자 밤 레시피 좀 보여 줘 알겠습니다 레시피들을 불러왔습니다 테이스티의 첫 번째 레시피를 선택해죠 맛있어 보이네요 구체적인 레시피가 바로 보이고 요리 시작하기를 탭해주면 됩니다 알겠습니다 테이스티의 레시피입니다 이처럼 시현 영상을 보는 동시에 음성 안내를 들을 수 있습니다 이러한 기능들은 요리에 있어서 혁명과 같습니다 특히 두 손이 뭔가를 하고 있을 때 유용하죠 고마워요 매기 스마트 디스플레이를 활용한 몇 가지 방법으로 가정 생활을 쉽게 만들어봤습니다 훨씬 더 다양한 것들이 남았습니다 방송이나 듀얼 영상 전화를 하면서 가족들과 계속 연락을 하는 것부터 다른 스마트 홈 파트너들을 통해서 계속 집 안 상황을 파악하는 것이나 구글 지도를 통해 아침 출근길을 미리 확인해 보는 것까지요 구글의 제일 좋은 것들을 결합하고 전세계의 개발자 및 협력자들과 작업하여 음성과 영상을 한 데 모아 완전히 새로운 생활방식을 가져올 겁니다 스마트 디스플레이에 고무되어 화면용 어시스턴트에 대해 다시 한 번 생각해봤습니다 우리와 언제나 함께 하는 화면인 휴대폰에 대해서요 휴대폰에서 어시스턴트가 작동하는 방식을 잠깐 보여드릴게요 얼마나 실감나고 상호 작용하며 주도적으로 작동하는 지 보시죠 또 다른 라이브 데모 버전을 볼 건데요 헤이 구글 카밀라 카베요에 대해서 말해줘 위키피디아에 따르면 카를라 카밀라 카베요 에스트라바오는 미국의 가수이자 작곡가입니다 보시다시피 화면의 장점을 활용해서 풍부하고 몰입되는 대답을 합니다 다른 예시입니다 난방 좀 줄여 줘 알겠습니다 거실의 온도를 낮춥니다 스마트 홈에서 여러분은 그저 손가락 하나로 모든 제어를 할 수 있습니다 제가 제일 좋아하는 걸 보여 드릴게요 헤이 구글 스타벅스에서 내가 매일 주문하는 거 주문해 줘 안녕하세요 스타벅스에 다시 와 주셔서 감사합니다 톨 사이즈의 무지방 라떼에 카라멜 드리즐 올려서 한 잔 맞으시죠? 다른 건 필요 없으신가요? 아니요 괜찮아요 그러면 항상 방문하시는 매장에서 가져가실 건가요? 여기서 '네'를 탭합니다 네 주문 접수되었습니다 조금 이따 만나요 어때요? 우리와 협업하는 브랜드는 스타벅스 던킨 도넛, 도어대시, 도미노 그리고 그 외에 많은 동업자들이 음식 방문 포장 및 배달 업계에 있고 구글 어시스턴트와 함께 합니다 몇몇 브랜드들은 이미 사용 가능하고 앞으로 더 많은 브랜드들이 가능할 예정입니다 요구 사항에 대해 훌륭하게 상호작용하는 대응은 정말 도움이 됩니다 하지만 제 이상적인 어시스턴트는 주도적으로 도울 수 있어야 합니다 지금 어시스턴트에 들어와 있는데 여기서 화면을 위로 밀어 올리면 제 하루를 시각적인 스냅 사진으로 확인할 수 있습니다 유용한 제안들도 볼 수 있죠 시각과 위치, 심지어는 어시스턴트와 최근 한 대화에 근거해서요 알림들, 택배들 노트와 목록들까지 모두 있고 잘 정돈되어서 바로 볼 수 있습니다 저는 이런 사소한 것들을 유용하게 관리하고 쉽게 볼 수 있는 편리함을 사랑합니다 이 새로운 휴대폰용 시각 경험은 AI 중심으로 디자인되었습니다 이번 여름에 안드로이드에서, 하반기에 iOS에서 출시됩니다 때때로 시각적 측면을 낮춤으로써 어시스턴트가 더욱 더 실제로 유용하게 쓰이기도 합니다 차 안에 있다고 해 봅시다 운전에 집중해야겠죠 직장에서 집을 향해 가는 길입니다 러시 아워임에도 최단 거리를 보여주는 구글 지도가 있습니다 헤이 구글 닉한테 내 예상도착시간 보내주고 힙합 틀어 줘 알겠습니다 닉에게 20분 뒤 도착한다고 알립니다 유튜브에서 힙합 음악을 검색합니다 남편에게 예상도착시간을 알리는 게 간단한 음성 명령어만으로 가능하니까 정말 편리하죠 구글 지도 네비게이션에 어시스턴트가 장착될 겁니다 이번 여름부터요 스마트 디스플레이, 휴대폰을 거쳐서 지도까지 둘러봤습니다 구글 어시스턴트가 어떻게 활용될 지 느낌이 오시나요 좀 더 시각적 도움이 되는 방법으로요 언제 음성으로 응답할지 그리고 언제 좀 더 몰입하여 대화를 나눌지 알아차릴 수 있습니다 이제 피차이CEO에게 다시 마이크를 넘깁니다 감사합니다 고마워요 릴리안 우리 어시스턴트의 진척사항을 보니 기분이 좋네요 아까 말했지만 우리의 어시스턴트 비전은 여러분이 일을 끝내게 돕는 것입니다 일을 하는 것의 큰 부분이 전화를 거는 것이더라구요 엔진 오일 교환 일정을 잡고 싶을 수도 있고 주중에 배관공에게 연락하고 싶을 수도 있고 미용실 예약을 하고 싶을 수도 있습니다 그런 순간에 사용자를 돕기 위해서 열심히 연구했습니다 사용자들과 사업을 좋은 방식으로 연결하고 싶었습니다 사업은 사실 예약에 많이 의지하죠 하지만 심지어 미국에서도 소기업의 60%는 온라인 예약이 불가능합니다 AI가 그런 문제를 도와줄 수 있을 것이라 생각했습니다 이 예시를 봅시죠 구글에게 화요일에 미용실 예약을 부탁하고 싶다고 해보죠 오전 10시에서 12시 사이에요 무슨 일이 일어날 거냐면 구글 어시스턴트가 여러분을 위해 매끄럽게 전화를 해 예약 하는 것입니다 지금부터 들으실 것은 구글 어시스턴트가 실제 미용실 직원에게 전화를 해서 예약을 하는 내용입니다 들어보시죠 여보세요 무엇을 도와드릴까요? 여보세요 제 고객의 컷트 예약을 하려는데요 5월 3일에 가능한가요 그럼요 잠깐만 기다려주세요 몇 시쯤에 생각하시나요? 오후 12시쯤이요 오후 12시는 꽉 찼습니다 제일 가까운 시간은 1시 15분 정도예요 오전 10시에서 오후 12시 사이에는 안 되나요? 뭘 하시느냐에 따라 달라집니다 고객이 어떤 서비스를 원하시죠? 그냥 여성 컷트요 알겠습니다 그러면 오전 열시에 가능해요 오전 열시 괜찮네요 고객님 성함이 어떻게 되시나요? 리사예요 알겠습니다 완벽해요 5월 3일 오전 10시에 리사씨 예약되셨습니다 네 알겠어요 감사합니다 감사해요 좋은 하루 되세요 여러분이 들으신건 실제 통화입니다 어시스턴트가 실제로 대화의 뉘앙스를 이해한다는 게 정말 놀랍지 않나요 이 기술 연구에 수년을 들였습니다 이를 구글 듀플렉스라고 부릅니다 자연스러운 언어 이해와 딥 러닝, 실감나는 대화에 우리가 수년동안 들인 투자의 산물이죠 어시스턴트는 일이 끝나면 예약이 완료되었다는 확인 알림을 여러분에게 전해줍니다 다른 예시를 보여드리겠습니다 식당에 전화를 하고 싶다고 해 봅시다 아마 작은 식당일 거예요 온라인 예약이 보통 불가능하죠 그리고 통화가 예상과는 조금 다른 방향으로 전개됩니다 한 번 들어보시죠 여보세요 무엇을 도와드릴까요? 안녕하세요 7일 수요일에 예약하려구요 일곱 분인가요? 4명이에요 네 분이요? 언제죠? 오늘인가요? 오늘밤? 다음 수요일 오후 여섯시요 사실 우리 가게는 5명부터 예약할 수 있어요 네 분이라면 그냥 오시면 됩니다 자리에 앉기까지 대기 시간은 어느 정도인가요? 언제요? 내일이요? 아니면 주말? 다음 주 수요일이요 7일 입니다 그리 붐비지 않을 거예요 네 분이 오시는 거 맞죠? – 알겠습니다 감사해요 – 네 들어가세요 다시 말씀드리지만 실제 통화입니다 예상처럼 흘러가지 않는 통화는 자주 있는 일이잖아요 어시스턴트는 문맥과 뉘앙스를 이해하고 만일에 대비해서 대기시간까지 물어봅니다 대화를 우아하게 다뤘어요 이 기술은 여전히 개발 중이고 열심히 연구하고 있습니다 사용자들의 경험과 기대를 충족시켜 회사와 사용자 모두에게 좋도록요 올바르게 이루어진다면 사람들의 시간을 절약하고 회사들에게 큰 가치를 창출해 줄 겁니다 이런 때에도 사용 가능하게 하고 싶어요 아침을 맞이한 바쁜 부모님인 거예요 게다가 아이가 아파서 의사에게 예약 전화를 하는 상황입니다 이 상황에 사용 가능하려면 정말 열심히 일해야 할겁니다 이보다 단순한 일들에는 조만간 사용 가능하게 출시될 겁니다 예를 들면 매일 구글에는 많은 질문들이 올라옵니다 사람들이 사업체의 개장 시간과 폐장 시간을 알고 싶어하는 질문들이 많죠 하지만 휴일이 끼면 까다로워지잖아요 사업체들은 많은 전화를 받게 되죠 그래서 우리 구글이 단 한 통의 전화를 하고 그 정보를 수백만 사용자들을 위해서 업데이트를 하는 겁니다 그러면 소규모 사업체들이 무수히 많은 전화를 받을 필요가 없겠죠 이렇게 시간을 수정함으로써 사용자들에게 더 나은 경험을 하게 만들어 줄 겁니다 다가오는 주에 이 기능을 시험 삼아 출시할 예정입니다 지켜 봐 주세요 이 모든 것을 아우르는 하나의 주제는 우리가 사용자들에게 시간을 주기 위해 열심히 노력한다는 것입니다 구글에서는 이점에 집착해왔습니다 검색에서는 사용자들이 원하는 답을 빠르게 찾아서 알려주는 데 집착했죠 그리고 저는 새로운 영역인 디지털 웰빙으로 들어섰습니다 연구 결과에 따르면 사람들은 전자기기에 매여 산다고 느낍니다 여러분들도 이런 기분을 느끼시겠죠 사회적인 압박은 커져만 갑니다 무엇이든 받는 즉시 응답하라구요 사람들은 정보를 바로바로 처리하느라 초조해합니다 포모를 겪고 있죠 최신 유행에 뒤쳐지는 것을 두려워합니다 우리는 더 나은 방법이 있을 거라고 생각했고 사람들에게 말해왔습니다 몇몇이 조모라는 개념을 알려주더군요 유행에 뒤쳐지는 즐거움이죠 그래서 우리는 디지털 웰빙이 진짜로 사용자들을 도울 수 있다고 믿습니다 많은 노력이 지속되어야 할 겁니다 우리의 모든 상품들과 플랫폼에 걸친 노력이죠 여러분의 도움이 필요합니다 디지털 웰빙으로 사용자를 도울 수 있는 방법은 네 가지입니다 여러분의 습관을 이해하고 문제를 파악하여 필요할 때 스위치를 꺼버립니다 가장 중요한 건 가족과의 균형을 찾는 거죠 예시를 몇 개 보여드리겠습니다 다가오는 출시일에 안드로이드에서 이 소식을 듣게 될 겁니다 제가 가장 좋아하는 기능은 바로 대시보드입니다 안드로이드에서 여러분이 어떻게 시간을 쓰는 지를 완벽하게 보여드릴 예정인데요 작동시켰던 앱들 그 날짜에 휴대폰을 켠 횟수 받은 알림 수 그리고 그것들을 해결하여 더 나아지도록 도울 생각입니다 앱들도 도움이 될 수 있죠 유튜브가 선두에 설 텐데요 만약 여러분이 동의한다면 휴식을 취하라고 알림을 줄 겁니다 예를 들어서 한동안 유튜브를 봤다면 알림창이 떠서 말하는 거죠 '휴식을 취할 시간입니다' 사용자들이 원한다면 유튜브가 시행할 다른 것은 모든 알림을 통합하는 겁니다 일별 요약 형태로 말이죠 네 개의 알림이 왔다면 하루에 한 번만 알림이 오는 거죠 유튜브가 이 기능을 이번 주에 출시할 예정입니다 이 분야에 있어서 많은 작업을 해 왔어요 패밀리 링크가 좋은 예죠 부모님들에게 자녀의 화면 보는 시간을 관리할 수 있는 도구를 제공했습니다 전 이게 중요한 부분이라고 생각합니다 여기에서 더 나아가고 싶습니다 아이들이 똑똑한 결정을 내릴 준비를 갖추게 하고 싶습니다 그래서 우리의 새로운 접근 방식인 구글 디자인 접근입니다 비 인터넷 어썸이라고 부르죠 아이들이 디지털 세상에서 안전한 탐험을 하게 도와줍니다 아이들이 안전하고 친절하며 사려 깊은 온라인 세상에 있기를 원합니다 다가오는 해에 아이들 오백만명을 추가로 훈련시킬 것을 서약합니다 지금 보시는 이 모든 도구들은 우리 디지털 웰빙 사이트에서 오늘 오후에 출시됩니다 우리가 거대한 책임감을 느끼는 또 다른 분야가 있습니다 바로 뉴스입니다 뉴스는 우리 주요 임무죠 또한 이런 시대에는 양질의 언론을 지원하는 것이 어느 때보다 중요한 일이잖아요 민주주의가 작동하는 데 기본이 되죠 저는 언제나 뉴스를 좋아했어요 인도에서 자라면서 분명히 기억하는 건 제가 신문을 기다렸었다는 거예요 할아버지는 제 바로 옆에서 같이 기다리셨죠 분명한 서열이 있었습니다 할아버지가 신문을 제일 먼저 보시고 그 다음은 아버지, 그리고 제 형까지 읽으면 제 차례가 왔죠 그 당시에는 주로 스포츠 영역을 좋아했습니다 시간이 흐르면서 뉴스에 대한 저의 애정도 커져갔고 오늘날까지도 저와 함께하고 있습니다 뉴스 산업에게 어려운 시기입니다 구글 뉴스 이니셔티브를 최근에 출시했습니다 삼억 달러를 향후 삼년간 투자하기로 결정했습니다 기관이나 기자들과 함께 일하면서 산업에 도움이 되는 혁신적인 제품과 프로그램을 개발하는 데 도움을 주고 싶습니다 그와 관련한 제품인 구글 뉴스는 오랫동안 우리 곁에 있었죠 사실 911테러 직후에 만들어졌습니다 스무 명의 직원이 투입된 프로젝트로 다양한 신문사의 뉴스를 보고 무슨 일이 일어났는지 더 잘 이해하고 싶어했던 한 기술자에 의해 시작됐습니다 그 때부터 컨텐츠의 양과 다양성은 커져가기만 했습니다 오늘날 생산되는 기사는 그 어느 때보다 대단한 양을 보여줍니다 도움이 간절해서 구글을 켠 사람들에게 정확한 정보를 제공하는 것이 우리의 책임인 것이 사실이죠 이게 바로 우리가 뉴스 프로젝트를 다시 구상하게 된 이유입니다 AI를 활용해서 언론이 제시해야 하는 제일 중요한 것을 우선 제시합니다 사용자가 신뢰하는 양질의 기사를 제공하고 싶습니다 하지만 출판사들을 위한 제품도 만들고 싶습니다 그 무엇보다도 깊은 통찰력과 완전한 관점으로 사용자가 관심있어 하는 주제를 제공해주고 싶습니다 새로운 구글 뉴스를 발표하게 되어 굉장히 떨립니다 트리스탄이 더 자세하게 설명해 줄 겁니다 구글 뉴스 엔지니어 트리스탄 업힐 피차이CEO님 감사합니다 새로운 구글 뉴스와 함께 세 가지 일을 도우려고 합니다 첫 번째, 여러분이 관심 있는 뉴스를 계속 알 수 있게 하겠습니다 두 번째, 완전한 이야기를 이해하게 하겠습니다 마지막으로 여러분이 사랑하는 신문사를 즐기고 후원할 수 있게 하겠습니다 결국 뉴스 출판사와 그들이 만드는 양질의 기사가 없다면 오늘 여러분에게 보여 줄 것이 아무것도 없겠죠 어떻게 여러분이 관심 있는 뉴스를 더 쉽게 알도록 만들 지부터 시작해보도록 하겠습니다 구글 뉴스를 켜면 제일 윗 부분에 지금 바로 알아야 하는 주요 기사 다섯 개의 브리핑이 보입니다 브리핑 밑으로는 당신만을 위해서 선택된 기사들이 보입니다 우리 AI가 지속적으로 웹의 파이어호스를 읽어서 매분 발행되고 있는 수백만개의 기사, 영상, 팟캐스트 그리고 댓글들을 당신이 알아야 하는 주요한 것에 따라 정리해 줄 겁니다 구글 뉴스는 각 지역 사건과 그 지역의 의견들도 보여줍니다 자신의 공동체에 연결된 것을 느끼게 해 주는 정보죠 크로니클의 이 기사는 새로운 베이브리지를 지나는데 얼마나 걸리는지를 궁금하게 했습니다 멋있는 건 제가 굳이 앱에게 나는 정치를 따른다거나 자전거를 좋아한다거나 베이 에리어에 대해 알고 싶다는 것을 말 할 필요가 없이 완벽하게 작동 합니다 그리고 우리가 앱에 강화학습같은 기술을 적용시켰기 때문에 더 많이 사용할수록 더 나아질 겁니다 언제든지 바로 이 출판사나 주제는 더 적게 혹은 더 많이 보고 싶다고 말해도 됩니다 다른 사람들은 뭘 읽는지 궁금해지면 헤드라인으로 바꿔서 지금 전세계에서 가장 보도가 많이 되는 주요 기사들을 볼 수도 있죠 더 살펴볼까요? 크고 멋있는 사진들이 많아서 이 앱이 완전히 시선을 사로잡는 걸 알 수 있죠 진심으로 훌륭한 영상은 물론이구요 한 번 보시죠 (기기에서 나오는 음악과 환호) 유튜브나 웹에 퍼져 있는 모든 최신 영상을 볼 수 있습니다 우리의 디자인은 앱을 가볍고, 쉽고, 빠르고 또한 재밌게 만드는 데 중점을 뒀습니다 우리의 처리 원칙은 이야기가 스스로 말하게 하는 것입니다 꽤 괜찮죠? 앱을 통해서 보시고 있는 것은 새로운 구글 머티리얼 테마입니다 앱 전체가 머티리얼 디자인을 이용해서 만들어졌는데요 변환할 수 있고 통일된 우리의 디자인 시스템으로 구글에서 특별히 맞춤 제작한 것입니다 오늘 오후에 더 자세한 설명과 각자의 제품에서 머티리얼 테마를 이용하는 방법에 대해 들으실 수 있습니다 새로운 비쥬얼 포맷인 뉴스캐스트를 기쁜 마음으로 소개하겠습니다 이런 것은 어떤 뉴스 앱에서도 보실 수 없으실텐데요 뉴스캐스트는 이야기를 미리보기하는 기능입니다 무슨 얘기인지 쉽게 알아차릴 수 있게 해 주죠 영화 스타 워즈와 관련된 이야기를 함께 확인해보시죠 자연스러운 언어 이해의 최신 기술을 이용해서 모든 것을 한 데 모았습니다 솔로의 영화 예고편부터 뉴스 기사나 캐스트의 언급까지 모두요 새로운 제시방식으로 휴대폰으로 보기에 아주 멋지죠 뉴스캐스트는 기본적인 것을 알기 쉽게 해 주고 더 자세히 알고 싶은 것을 결정할 수 있게 해 줍니다 또 가끔씩은 다른 방식으로는 절대 알지 못했을 것도 발견합니다 제가 제일 관심 있는 기사나 정말 복잡한 기사의 경우에는 뛰어들어서 다양한 관점을 확인하고 싶잖아요 그런 관점에서 구글 뉴스의 두 번째 목표에 대해서 얘기해 볼까요? 이야기 전체를 이해하는 겁니다 오늘날 스스로의 관점을 넓혀서 뉴스를 심도 깊게 이해하는 건 많은 노력이 필요하잖아요 구글 뉴스와 함께라면 큰 힘을 기울이지 않고 가능합니다 풀 커버리지는 더 자세히 알려주겠다는 초대장입니다 다양한 신문사와 형식으로 전해지는 이야기들 측면에서 이야기의 전체적인 그림을 완성시킵니다 우리는 시간적 동일 지역성이라는 기술을 이용해서 풀 커버리지를 만들었습니다 이 기술을 통해서 우리는 각 개체간의 관계를 볼 수 있고 이야기 속 사람, 장소, 물건을 이야기에서 전개된 그대로 이해할 수 있습니다 언제든지 이 기술을 웹의 정보의 홍수에 적용하여 줄거리에 맞게 구성합니다 전부 실시간으로 이뤄지죠 현존하는 가장 강력한 앱 기능입니다 뉴스를 파헤칠 수 있는 완전히 새로운 방식을 제공하죠 풀 커버리지가 작동하는 방법을 최근 푸에르토리코에서 발생한 정전을 통해서 알아보시죠 이 사건에 대해 굉장히 많은 궁금증을 가지고 있었습니다 "어떻게 일이 이 지경이 됐지?" "예방할 수는 없었을까?" "이 일이 해결되고는 있을까?" 같은 질문이었죠 풀 커버리지를 만들어서 이 모든 것을 한 자리에서 이해할 수 있게 해 봤습니다 무슨 일이 일어났는지 알려주는 주요 표제들부터 시작했습니다 그리고 실시간 사건 이해를 이용해서 중요한 이야기 측면에서 정리를 해 나갔습니다 이 일처럼 몇 주, 몇 달에 걸쳐서 발생하는 사건의 뉴스의 경우에는 우리의 주요 사건 시간대를 봄으로써 사건 전개를 파악할 수 있습니다 그리고 복구가 시작되었지만 아직 가야 할 길이 멀었음을 분명히 알 수 있었습니다 아직 남은 사건에 대한 질문들을 끄집어냈습니다 여러분이 직접 답을 찾으러 나갈 필요가 없게요 우리가 사건의 전후사정과 다양한 시각을 알고 있으므로 관련 인물의 트윗이나 여론 분석, 사실 확인 등을 보여주고 한 단계 깊게 이야기를 이해할 수 있도록 돕습니다 각각의 경우에서 왜 이 정보가 중요한지 어떤 특별한 가치를 지녔는지를 우리 AI가 강조해줍니다 제가 풀 커버리지를 사용하면서 제가 관심 있는 주제에 대해서 방대한 양의 지식을 쌓을 수 있다는 것을 알았습니다 360도의 시각을 가질 수 있었습니다 표제 몇 개를 훑어봤을 때보다 훨씬 나은 결과죠 그 무엇보다도 우리 연구 결과에 의하면 건설적인 대화나 토론을 위해서는 모두가 같은 정보를 얻을 수 있어야합니다 그게 바로 풀 커버리지에서 같은 주제에 대해 모두가 같은 내용을 보는 이유입니다 신뢰 할만한 신문사에서 여과 없이 사건에 대한 시각을 보여드립니다 감사합니다 이 말은 꼭 하고 싶었는데 저는 이 새로운 기능들을 사랑합니다 이것들은 우리가 새로운 구글 뉴스를 더 재미있게 만들기 위해 구상한 것 중 일부분에 불과합니다 하지만 아까 말씀드렸다시피 이 모든 건 대단한 언론이 매일 만들어내는 것이 없었다면 존재할 수 없습니다 이것은 바로 우리의 마지막 목표인 여러분이 좋아하는 신문사를 즐기고 후원하게 돕는 것으로 이어지죠 앱의 전면 중앙에 신문사를 위치시켰습니다 그리고 뉴스스탠드에서는 좋아하는 신문사를 찾아서 팔로우하거나 새로운 신문사를 검색하고 찾기 쉽습니다 천여개가 넘는 잡지도 있는데요 와이어드, 내셔널 지오그래픽, 피플 같은 잡지로 모두 제 휴대폰에서 보기에는 아주 멋있네요 USA 투데이같은 출판물을 팔로우하려면 별 모양을 직접 탭하면 됩니다 만약 구독하고 싶은 출판물이 있다면 예를 들어 워싱턴 포스트를 구독하고 싶다면 이를 매우 쉽게 만들었습니다 양식도 신용카드 번호도 새로운 비밀번호도 필요 없습니다 구글 계정으로 가입하기 때문에 이미 준비가 되어있죠 출판사를 구독하면 어디에서나 쉽게 컨텐츠를 볼 수 있어야 한다고 생각합니다 그리고 이게 구글을 통한 구독을 개발한 이유입니다 구글을 통한 구독은 구글 계정으로 로그인한다면 이미 지불한 컨텐츠를 어디에서든 이용 가능하게 합니다 어떤 플랫폼이나 장비든지 구글 써치나 구글 뉴스, 출판사의 사이트에서 지불한 것이라면요 전세계 60개가 넘는 출판사들과 공동으로 작업했습니다 다가오는 주에 출시될 예정입니다 감사합니다 언제 어디서든지 가장 중요한 신뢰할 수 있는 고품질의 정보에 쉽게 접근할 수 있게 하기 위해서 우리가 나아가야 할 수많은 단계 중 하나였습니다 그게 새로운 구글 뉴스였죠 관심 있는 뉴스를 계속 볼 수 있고 브리핑과 뉴스캐스트를 제공해주고 이야기 전체를 이해할 수 있으며 풀 커버리지를 사용할 수 있고 좋아하는 신문사를 읽고 팔로우하고 구독함으로써 즐기고 후원할 수 있게 해줍니다 이제 발표할 제일 좋은 뉴스는 127개국의 안드로이드와 iOS, 그리고 웹에서 오늘부터 이 기능을 사용할 수 있다는 겁니다 저도 그렇게 생각해요 정말 멋진 일이죠 다음 주부터는 누구든지 사용할 수 있을 겁니다 구글에서는 정확한 적시의 정보를 사람들에게 제공하고 양질의 언론을 만들고 후원하는 게 그 어느 때보다 바로 지금 중요하다는 것을 알고 있습니다 우리의 역할을 수행하기 위해 최선을 다하겠습니다 이 여정을 여러분과 함께 하게 되기를 고대합니다 이제 제가 소개할 데이브는 안드로이드의 최신 소식을 알려줄 겁니다 안드로이드는 단순한 목표를 가지고 시작했습니다 모바일 산업에 공개된 표준을 만들자는 것이었죠 오늘날 안드로이드는 전세계에서 가장 유명한 모바일 운영 체계입니다 학습을 위한 개방 지원을 위한 개방 변화를 위한 개방 차이를 위한 개방 모두를 위한 개방 새로운 한계를 향한 개방 새로운 친구를 위한 개방 세상을 향한 개방 미래를 향한 개방 만약 당신이 개방성을 믿는다면 선택을 믿는다면 모두의 혁신을 믿는다면 안드로이드에 오신 것을 환영합니다 10년간 감사했습니다 모두들 안녕하세요 2018 개발자 회의에 참가하게 되어 영광입니다 안드로이드 엔지니어링 담당 부사장 데이브 버크 십년 전에 첫 번째 안드로이드 휴대폰인 T 모바일 G1을 출시했습니다 간단하지만 대담한 아이디어였습니다 모두에게 열려 있는 무료 모바일 플랫폼을 만들자 그리고 오늘날 그 아이디어는 빛을 발하고 있습니다 우리 동업자들이 수만개의 스마트폰을 출시해서 전세계 수십억의 사람들이 이를 사용하고 있습니다 이 여정을 통해서 우리는 안드로이드가 단순한 스마트폰 운영 체계를 뛰어넘었다는 것을 알 수 있었습니다 웨어러블 기기나 TV, 자동차, AR, VR, IoT 등의 새로운 컴퓨팅 분야에 힘을 불어넣어 주고 있습니다 지난 십년간 안드로이드의 성장은 데스크탑에서 모바일로의 컴퓨팅의 변화를 도왔습니다 피차이CEO가 말했듯이 세계는 새로운 변화에 직면해 있습니다 AI가 산업을 크게 변화시킬 겁니다 건강 관리나 교통같은 분야에서요 우리 산업 역시 이미 바뀌고 있습니다 그 결과 우리가 작업하고 있는 새로운 안드로이드인 안드로이드 P가 나왔습니다 안드로이드 P는 AI를 운영 체계 핵심으로 하는 새로운 비전의 중요한 첫 걸음입니다 사실 AI는 이번 출시의 세가지 테마의 첫 번째 테마를 뒷받침해줍니다 세가지 테마는 지능 단순함 디지털 웰빙입니다 지능부터 시작해보겠습니다 우리는 스마트폰이 더 똑똑해져야 한다고 믿습니다 스마트폰은 여러분에게서 배우고 여러분에게 적응해야 합니다 내장된 머신 러닝같은 기술은 여러분의 사용 패턴을 익히고 자동적으로 다음 행동을 예상해서 여러분의 시간을 절약해줍니다 기기에서 운영되기 때문에 데이터가 휴대폰에서 비공개로 저장됩니다 몇몇 예시를 통해서 이 기술을 어떻게 안드로이드에 적용시켜 더 똑똑한 운영 체계를 만들었는지 직접 확인해보시죠 거의 대부분의 설문조사에서 스마트폰 사용자들은 제일 걱정되는 것으로 배터리 수명을 꼽았습니다 여러분에게도 적용될 지 모르겠지만 이건 제 버전의 매슬로의 욕구 단계입니다 배터리, 와이파이, 생리적 욕구 안정, 애정, 존경, 자아 실현 다 겪어보신 적 있으시잖아요 배터리가 충분한 것 같았는데 집 밖을 나서기만 하면 평소보다 빠르게 사라지면서 충전기로 달려가야만 하죠 안드로이드 P는 딥 마인드와 협력하여 적응형 배터리라는 새로운 기능을 만들었습니다 여러분에게 좀 더 지속되는 배터리를 선사하기 위해 설계되었습니다 적응형 배터리는 내장된 머신 러닝을 사용하여 다음 몇 시간 동안 당신이 어떤 앱을 사용할지 어떤 앱을 오늘은 전혀 사용하지 않을지를 예측할 수 있습니다 그리고 그 예측과 운영 체계가 적응한 당신의 사용 패턴을 결합하여 당신이 쓸만한 앱과 서비스에만 배터리를 소모합니다 결과는 굉장히 탁월했습니다 전체적으로 켜진 앱에 쓰이는 CPU를 30% 감소시킬 수 있었습니다 작은 CPU 코어를 이용하여 작동하는 백그라운드 프로세서같은 다른 수행 능력 향상과 결합되어 많은 사용자들에게 배터리 사용 시간을 늘려주었습니다 꽤 멋지죠 OS가 사용자에게 적응하는 또 다른 예시는 자동 밝기 조절입니다 대부분의 현대 스마트폰은 밝기를 자동으로 조절합니다 주변의 밝기 조건을 따져서요 하지만 한 방식으로만 작동하죠 여러분의 개인적 기호나 환경은 고려하지 못합니다 그래서 여러분이 직접 밝기를 조정하는 일이 자주 일어나게 되고 나중에는 화면이 너무 밝아 보이거나 너무 어둡게 보이게 됩니다 그래서 안드로이드 P에서는 새로운 내장 머신 러닝 기능인 적응형 밝기를 씁니다 적응형 밝기는 주변 조명에 따라 여러분이 어떻게 밝기 조절을 하는지 습득해서 그대로 조절을 해줍니다 에너지 효율적인 방법으로요 휴대폰이 여러분의 기호에 적응함에 따라 여러분은 밝기가 말 그대로 자동 조절되는 것을 볼 수 있습니다 놀랍도록 효율적이죠 실제로 시험 사용자 중 약 절반이 이전 안드로이드 버전들에 비해서 직접 밝기 조절을 덜 하게 되었습니다 우리는 UI 역시 좀 더 지능적으로 만들었습니다 작년에 예상 앱이라는 개념을 소개했습니다 여러분이 평소에 앱을 사용하는 흐름에 맞춰 OS가 다음으로 여러분이 필요로 할 앱을 예상하고 보여주는 기능입니다 매우 효율적이죠 거의 60%의 예상률을 보여줬습니다 안드로이드 P는 단순히 다음에 실행할 앱을 예상하는 수준을 벗어나서 여러분이 다음에 취할 행동이 무엇인지 예상합니다 이 기능은 앱 액션이라고 합니다 어떤 기능인지 한 번 보시죠 런처의 맨 위에 두 가지 액션이 보이시죠 하나는 제 여자동생인 피오나에게 전화하는 것이고 다른 하나는 스트라바 앱을 사용해 저녁 조깅을 시작하는 것입니다 그러니까 액션들이 제 사용 패턴에 따라 예상되는 거죠 휴대폰이 저에게 맞춰서 제 다음 일을 하도록 돕는 겁니다 더욱 빠르게 할 수 있게요 다음 예시입니다 제가 헤드폰을 연결하면 안드로이드는 제가 듣던 앨범을 다시 틀어줍니다 앱 액션을 지원하기 위해 개발자들은 앱에 actionsxml을 추가해주기만 하면 됩니다 그러면 액션이 런처에서 뿐 아니라 스마트 텍스트 선택, 플레이스토어, 구글 검색 그리고 어시스턴트에서까지 작동할 겁니다 구글 검색을 보시죠 우리는 다른 방식들로 액션이 나타나게 실험을 하고 있습니다 설치해서 많이 쓰는 앱들을 위해서요 예를 들면 저는 판당고를 아주 자주 씁니다 그래서 제가 새로운 어벤져스 영화인 인피니티 워를 검색하면 보통의 제안에 더해서 판당고 앱에서 표를 사는 액션까지 받게 됩니다 꽤 멋있죠 액션은 간단하지만 대단한 아이디어로 여러분의 상황에 맞게 앱에 깊은 연결고리를 제공해줍니다 하지만 그보다 더 대단한 것이 있습니다 앱 UI를 그때그때 적절하게 사용자에게 제공하는 겁니다 이걸 슬라이스라고 부릅니다 슬라이스는 새로운 API로 개발자들이 앱 UI에서 상호작용되는 정보를 분명히 하게 해 줍니다 OS에서는 다른 곳에서 나타날 수도 있습니다 안드로이드 P에서는 슬라이스를 검색에서 가장 먼저 보여주는 준비 작업을 해 두었죠 한 번 보실까요? 제가 밖에 나와 있는데 출근하기 위해 차를 타야 한다고 합시다 제가 구글 검색 앱에 리프트를 입력하면 제 휴대폰의 리프트 앱에서 만든 슬라이스를 볼 수 있습니다 리프트는 슬라이스 API를 이용해서 UI 템플릿의 다양한 배열을 보여줍니다 검색하는 중에 리프트 앱의 슬라이스를 만들기 위함이죠 그러고 나면 리프트가 제 직장까지의 비용을 보여주고 슬라이스가 상호작용할 수 있기 때문에 저는 바로 거기서 택시를 부를 수 있죠 아주 좋습니다 슬라이스 템플릿은 다용도로 개발자들이 모든 곳에 쓸 수 있습니다 영상 재생부터 호텔 체크인까지요 또 다른 예들 들어볼가요 제가 하와이를 검색하면 구글 포토에서 제 휴가 사진 슬라이스를 보여줍니다 우리는 놀라운 파트너들과 함께 앱 액션과 슬라이스를 작업했습니다 개발자들을 위한 얼리액세스가 다음 달에 좀 더 광범위하게 열릴 예정입니다 지금까지 액션이 그 중에서도 슬라이스가 역동적인 양방향 경험을 가능하게 해 주는 것을 보셨습니다 앱의 UI가 상황에 맞게 지능적으로 나타나서 가능한 일이죠 지금까지 우리가 안드로이를 사용자에 맞추게 하기 위해 운영체계를 가르쳐 좀 더 지능적으로 만들고 있는 방법들을 소개했습니다 머신 러닝은 강력한 도구입니다 하지만 개발자들이 배우고 적용하기에 어렵거나 비싸게 느껴질 수 있죠 우리는 이런 도구가 머신 러닝에 대해 전문지식이 없거나 적은 사람들에게도 접근 가능하고 쓰기 쉽게 되기를 원했습니다 그래서 제가 오늘 발표할 것은 ML 키트입니다 새로운 API 세트로 파이어베이스를 통해 사용 가능합니다 ML 키트는 여러분에게 내장 API를 줘서 문자 인식, 얼굴 탐지 영상 표지 등등에 쓸 수 있게 합니다 ML 키트는 구글의 클라우드 기반 ML 기술에 다가갈 수 있는 능력을 지원해줍니다 시스템 구성상으로 ML 키트는 사용 준비가 완료된 모델을 제공하고 텐서플로우 라이트를 기반으로 하며 모바일에 최적화되어 있습니다 가장 좋은 점은 ML 키트가 공통 사용이 가능해서 안드로이드와 iOS 모두에서 작동하는 기능이라는 겁니다 구글은 ML키트를 통해 굉장히 좋은 결과를 얻은 협력사들과 함께 일하고 있습니다 예를 들면 유명한 칼로리 계산 앱인 루즈 잇!은 우리의 문자 인식 모델을 써서 영양 정보를 검사하고 ML 키트 맞춤형 모델 API를 써서 카메라를 통해 수집한 200가지의 다른 음식들을 자동적으로 분류합니다 오늘 오후 개발자 기조 연설에서 ML 키트에 대해 더 들으시게 될겁니다 스마트폰을 더 지능적으로 만들 수 있어서 너무 좋지만 우리에게는 유행이 지나간 기술도 중요합니다 우리의 지난 몇 년간 주요 목표는 안드로이드 UI를 현재의 사용자들과 다음 안드로이드 사용자 10억 둘 모두에게 좀 더 간단하고 접근 가능하게 진화시키는 것이었습니다 안드로이드 P에서는 단순함을 특별히 강조했습니다 우리가 생각하고, 여러분이 말씀 해주신 불만 사항들 즉, 원안 보다 더욱 복잡했던 경험들을 다루면서말이죠 이러한 개선사항은 구글 버전의 안드로이드 UI를 적용한 기기에서 찾아 보실 수 있는데 구글 픽셀이나 안드로이드 원 기기들이죠 제 휴대폰에서 라이브 데모 버전을 몇 개 실행해보겠습니다 원형 극장에서 칠천명이 저를 주시하는데 뭐가 잘못되겠어요? 그렇죠? 안드로이드 P를 통해 새로운 시스템 탐색 방법을 소개합니다 우리가 일년 넘게 연구한 결과죠 새로운 디자인이 안드로이드의 멀티태스킹을 좀 더 접근하기 쉽고 이해하기 쉽게 했습니다 가장 먼저 눈에 띄는 것은 하나의 깨끗한 홈 버튼입니다 더 적은 베젤을 원하는 디자인 트렌드를 인식해서 화면 가장자리의 여러개의 버튼보다는 제스처에 강조를 둔 디자인입니다 제가 화면을 밀어 올리면 바로 오버뷰가 생성 되고 최근에 사용했던 앱을 다시 사용할 수 있습니다 화면 하단에는 예상 앱 다섯개가 있어서 시간을 절약할 수 있습니다 계속해서 화면을 밀어 올리면, 즉, 두 번 위로 밀어올리면 모든 앱을 볼 수 있습니다 그러니까 시스템 공학적으로 우리가 한것은 것은 모든 앱과 오버뷰 공간을 하나로 합친 것입니다 밀어 올리는 제스처는 어디에서는 통합니다 어떤 앱을 사용하고 있든지 모든 앱과 오버뷰로 빠르게 돌아올 수 있는 거죠 제가 하고 있던 것들을 없애지 않고서도요 그리고 만약 원하신다면 퀵 스크럽 제스처를 사용하실 수도 있습니다 홈 버튼을 옆으로 슬라이드해서 최근 사용한 앱들을 스크롤하는 거죠 이 커진 수평 오버뷰의 장점 중 하나는 앱 컨텐츠를 알아 보기 쉬워서 이전에 사용한 앱의 정보를 다시 보기 편하다는 겁니다 심지어 우리는 스마트 텍스트 선택을 오버뷰까지 확장시켰습니다 예를 들면 제가 밴드 더 킬러스의 설명 중 한 곳을 탭하면 문구가 선택되어지고 스포티파이 같은 앱에서 들어볼 수 있는 액션이 보입니다 스마트 텍스트 선택은 또한 신경망까지 확장되어 좀 더 많은 개체를 인식할 수 있습니다 스포츠 팀이나 음악가, 항공편 번호들까지도요 이 뷰 탐색 시스템을 지난 달에 사용해보면서 정말 좋았습니다 훨씬 빠르고 효율적으로 끊임없이 멀티태스킹을 할 수 있죠 탐색 작업을 바꾸는 것은 굉장히 어려운 일입니다 하지만 가끔씩은 작은 변화가 큰 차이를 가져오기도 하죠 음량 조절이 한 예입니다 다들 그런 경험 있으시잖아요 영상이 재생되기 전에 음량을 줄이려고 했는데 그 대신에 벨소리를 작게 하고 영상의 음성이 주변에 있는 모두에게 울려 퍼졌던 경험이요 이걸 어떻게 고칠 수 있을까요? 여기 새롭게 나온 간편해진 음량 조절이 있습니다 수직으로 되어 있고 하드웨어 버튼 옆에 있어서 직관적이죠 주요 차이점은 이제 슬라이더가 미디어 음량만을 조절한다는 겁니다 그게 제일 자주 조절하는 거니까요 벨소리 음량에 있어서 제일 자주 쓰이는 것은 키거나 무음이거나 끄는 것이잖아요 간편하죠 우리가 회전도 굉장히 간편하게 바꿨습니다 저와 같다면 기기가 원하지 않을 때 회전되는 걸 싫어하실 텐데요 그렇다면 이 기능을 좋아하실 겁니다 지금 저는 회전 잠금 모드입니다 앱을 켜 보죠 그리고 기기를 회전시키면 새로운 회전 버튼이 탐색 바에 뜬 것을 볼 수 있습니다 그러면 그걸 탭해서 회전을 조절할 수 있습니다 꽤 멋진 기능이죠 지금까지 안드로이드 P에서의 사용자 경험을 간편화시킨 방법들에 대해 빠르게 훓어봤습니다 아직 많이 남아있어요 작업 분석 재설계부터 더 나은 스크린샷이나 개선된 알림 관리 등등 말이죠 알림 관리 말이 나왔으니 말인데 우리는 여러분이 원하신다면 더 많은 통제권을 드리고 싶습니다 피차이CEO가 이전에 암시한 디지털 세상과 현실 세상을 쉽게 이동할 수 있게 하겠다는 개념에서 중요한 부분입니다 이 중요한 영역과 우리의 세 번째 테마를 좀 더 자세히 알아보기 위해 사미르에게 마이크를 넘기겠습니다 감사합니다 모두들 안녕하세요! 최근에 가족과 휴가를 다녀왔는데 부인이 제 휴대폰을 봐도 되냐고 물었습니다 호텔 방에 들어서자마자요 저에게서 휴대폰을 가져가서 호텔 금고로 걸어가더니 안에 넣고 잠가버리더군요 그리고 돌아서서 제 두 눈을 보며 말했습니다 "칠일 뒤에 우리가 집으로 돌아갈 때 다시 줄게" 와! 전 충격을 받았죠 살짝 화가 나기도 했습니다 하지만 몇 시간이 지나자 근사한 일이 일어났습니다 휴대폰에서 오는 방해가 없어지자 제가 실제로 세상과 떨어져서 현재에 충실해질 수 있었고 멋있는 가족 휴가를 즐길 수 있었죠 저에게만 해당되는 일은 아닙니다 우리 팀은 기술과의 적절한 균형을 찾으려는 사람들의 이야기를 많이 들어왔습니다 피차이CEO에게서 들으셨 듯이 디지털 웰빙을 돕는 것이 어느 때보다 중요한 시기입니다 사람들은 휴대폰을 사용하는 시간이 정말 유용한 시간이라고 말하곤 합니다 하지만 가끔씩은 다른 일을 하면서 시간을 보내고 싶다고 하죠 사실 우리는 70%가 넘는 사람들이 이 균형을 맞추기 위해 도움을 필요로 한다는 것을 발견했습니다 그래서 열심히 연구한 끝에 안드로이드에 주요 능력을 더했습니다 사람들이 원하는 기술과의 균형 찾기에 도움을 주는 능력이죠 우리가 첫 번째로 주목한 것은 여러분의 습관을 이해하는 데 도움을 주는 것입니다 안드로이드 P는 대시보드를 통해 여러분이 기기에서 어떻게 시간을 보내는 지 보여줍니다 아까 보셨다시피 어떤 앱에서 얼마나 시간을 보내는지 오늘 하루 얼마나 자주 기기를 열었는지 그리고 알림을 얼마나 많이 받았는지 같은 것들이죠 이런 것들 중 무엇이든지 한 층 더 분석해 볼 수 있습니다 예를 들어보겠습니다 제 토요일 G메일 데이터입니다 이걸 보면 제가 주말동안 이메일을 꼭 봤어야 했는지 의문이 들긴 하네요 그게 대시보드가 있는 이유니까요 언제 사용하는 지는 이를 이해하는데 중요하지만 앱에서 뭘 사용하는 지도 못지 않게 중요하죠 TV를 보는 것과 같아요 기나긴 하루 끝에 좋아하는 쇼를 보는 건 꽤 기분 좋은 일이잖아요 하지만 교양 방송을 보는 건 왜 내가 다른 걸 하지 않았을까 의문이 들게 하죠 많은 개발자들이 이 개념을 '의미있는 일'이라고 부릅니다 많은 개발자들과 가깝게 일하면서 사람들이 건강한 방식으로 기술을 사용하게 돕자는 목표를 공유했습니다 그래서 안드로이드 P에서는 개발자들이 좀 더 세밀하게 앱에서 쓰는 시간을 분석해서 새로운 대시보드를 만들었습니다 예를 들어보겠습니다 유튜브는 딥 링크를 추가해서 모바일과 데스크탑을 통합한 총 감상 시간과 피차이CEO가 이전에 언급했던 유용한 도구들을 이용할 수 있게 할 겁니다 이해하는 건 좋은 시작이죠 하지만 안드로이드 P는 여러분에게 통제권을 줍니다 어떻게 그리고 언제 휴대폰을 쓸 지 여러분이 관리할 수 있게 돕습니다 좋아하는 앱이 있으시겠죠 하지만 여러분이 그 앱에 쓰는 시간은 느끼시는 것보다 훨씬 많습니다 안드로이드 P는 앱에서 쓸 시간을 제한할 수 있고 그 제한이 다가오면 여러분에게 살짝 알려줍니다 다른 걸 할 시간이라구요 그리고 남은 하루 동안 그 앱 아이콘은 비활성화되어 여러분의 목표를 상기시켜 줍니다 사람들이 말했던 또 다른 것은 참석한 식사자리나 회의에 완전히 집중하기가 어렵다는 겁니다 기기가 보여주는 알림이 방해가 되지만 거부하기 힘들다는 거죠 그렇죠? 다들 경험 있으시잖아요 그래서 우리가 만든 개선사항은 방해금지 모드입니다 전화나 문자뿐 아니라 시각적인 방해를 하는 화면 팝업도 없애줍니다 방해금지 모드 사용을 더 간편하게 하기 위해 새로운 제스처를 만들었습니다 애정을 담아 쉿이라고 이름지었죠 만약 휴대폰을 탁자에 뒤집어두면 자동으로 방해금지 모드에 들어갑니다 현재에 집중하고 핑 소리나 진동, 다른 방해가 없게요 당연히 응급상황을 대비해서 우리 삶의 주요 인물들의 연락은 받고 싶잖아요 배우자나 아이 학교같은 곳이요 안드로이드 P가 연락처 목록을 만들어드립니다 언제나 전화가 울려서 방해금지 모드에도 금지되지 않는 연락처들이죠 마지막으로 많은 사람들이 보통 잠자리에 들기 전에 휴대폰을 확인한다는 이야기를 들었습니다 그러면 알아차리기도 전에 한 두시간이 금방 지나가버리죠 솔직히 저도 최소한 일주일에 한 번은 그렇습니다 숙면을 취하는 건 중요하잖아요 기술은 그걸 도와줘야지 방해해서는 안 됩니다 그래서 와인드 다운 모드를 만들었습니다 구글 어시스턴트에게 잠 잘 시간을 말해놓으면 그 시간이 되었을 때 방해금지 모드로 바뀝니다 화면도 흑백 모드로 바뀌게 됩니다 뇌에 훨씬 적은 자극을 주죠 그리고 여러분이 휴대폰을 내려놓는 데 도움을 줄 겁니다 간단한 아이디어지만 컬러 TV 이전으로 돌아간 앱들을 보면서 제가 얼마나 빨리 휴대폰을 내려놓는 지 보면 놀라운 일이죠 걱정 마세요 아침에 일어나면 색은 다시 돌아옵니다 지금까지 디지털 웰빙과 관련한 기능을 몇 개 훑어 봤습니다 안드로이드 P는 이번 가을에 구글 픽셀과 함께 나올 예정입니다 디지털 웰빙은 우리에게 장기 테마가 될 겁니다 앞으로도 많이 기대해 주세요 지능, 단순함, 디지털 웰빙이라는 데이브와 제가 말한 세 가지 테마 뿐만 아니라 말 그대로 수백개의 개선사항들이 다가오는 안드로이드 P에서 보여질 겁니다 특히 플랫폼에 더한 보안 개선이 제일 기대되네요 그것에 대해서는 목요일에 열리는 안드로이드 보안 세션에서 자세히 알게 되실 겁니다 여러분의 가장 큰 의문은 '다 좋아' '근데 이걸 내가 어떻게 해 볼 수 있지?'일 겁니다 그래서 오늘 안드로이드 P 베타 버전이 발표됩니다 안드로이드 오레오에서 한 노력으로 OS 업그레이드를 쉽게 할 수 있어서 안드로이드 P 베타 버전은 구글 픽셀에서 이용 가능합니다 또한 일곱 개의 제조사 주력 기기에서도 오늘부터 이용 가능해질 겁니다 이 링크에 가셔서 여러분의 기기에 베타 버전을 받는 법을 알아 보시고 우리에게 여러분의 생각을 알려주시기 바랍니다 그럼 안드로이드의 새로운 것들 소개를 마치고 지도에 대해 얘기할 수 있게 젠을 소개하겠습니다 감사합니다 지도는 우리를 안내하고 연결시킵니다 구글은 그들이 한 번도 가보지 않은 곳의 지도를 만듭니다 그것이 어디이든 모든 사람들을 위해 덕분에 나이지리아가 변화했고 여러분도 여기에 함께 할 수 있습니다 목적지에 대한 지식으로 무장할 수 있다는 것은 당신도 다른 사람들처럼 목적지에 다다를 수 있다는 뜻입니다 두 번의 지진이 연속적으로 멕시코 시티를 강타했습니다 구글 지도가 이런 응급상황에 대처할 수 있게 도와줬죠 허리케인이 휴스턴을 섬으로 만들고 길은 수시로 바뀌었습니다 우리는 "구글이 있어서 다행이다"라고 계속 말했습니다 없었으면 우리가 뭘 할 수 있었을까요? 정말 멋진 일인 것 같아요 사람들이 좋아하는 일을 할 수 있게 그리고 해야 할 일을 할 수 있게 그들을 도와준다는 것은요 구글 지도 책임자 젠 피츠패트릭 기술을 만드는 것은 현실의 사람들의 일상을 돕기 위해서입니다 이것이 구글이 누구이고 무엇에 주력하는지를 결정하는 지에 있어서 처음부터 주안점이었습니다 최근 AI과 컴퓨터 비전의 발전은 우리의 오랜 상품들에도 극적인 진전을 가져왔습니다 구글 지도같은 상품이죠 또한 새로운 상품을 만드는 데도 도움을 줬는데 구글 렌즈같은 상품입니다 구글 지도부터 시작해봅시다 지도는 모두를 돕기 위해 만들어졌습니다 세계 어느 곳에 있든 상관없이요 우리는 220개의 국가와 영토를 지도화하고 수억개의 회사와 장소들을 지도에 표시했습니다 그 작업을 하면서 십억이 넘는 사람들에게 길을 잃어버리지 않고 세계를 여행할 수 있다는 자신감을 심어주었습니다 하지만 아직 끝은 멀었습니다 우리는 지도를 좀 더 똑똑하고 좀 더 상세하게 하려고 노력했는데 AI의 발전은 이를 가속화시켜줬습니다 이제는 거리 뷰와 위성 사진에서 새로운 주소, 회사, 건물들을 자동으로 추출하여 지도에 직접 추가할 수 있습니다 정식 주소가 없는 시골이나 여기 라고스처럼 빠르게 변하는 도시에서는 중요한 일이죠 지난 몇 년 동안 말 그대로 지도를 아예 바꿔야만 했어요 안녕하세요 나이지리아 만약 새로운 사업을 시작하시려고 한다면 얼마나 붐비는지 대기 시간이 어느 정도인지 심지어 사람들이 얼마나 오래 머무는지까지 알 수 있습니다 나가기 전에 주차가 쉬울지 어려울지를 알려주고 주차 공간을 찾는 데 도움을 줄 수도 있죠 이제 교통수단에 따라서 다른 길을 안내할 수 있습니다 오토바이를 타는지 차를 운전하는지에 따라서요 각 교통수단의 속도를 이해함으로써 모두에게 더 정확한 교통 예측를 해 줄 수 있게 됐죠 이건 지도가 할 수 있는 것의 겉핥기일 뿐입니다 원래 우리가 지도를 설계한 것은 여러분이 스스로의 위치를 파악하고 목적지로 가는데 도움을 주기 위해서였습니다 하지만 지난 몇 년간 사용자들이 지도에 점점 더 많은 것을 요구했습니다 그들 주변의 세상에 대해 점점 더 어려운 질문들을 물어왔죠 그리고 더 많은 일을 하려고 했습니다 오늘날 우리 사용자들은 목적지로 가는 최단거리 뿐만 아니라 주변에는 무슨 일이 있는지 새로운 장소는 어떤지 그리고 현지인이 자주 가는 곳이 어디인지 같은 것까지 궁금해합니다 세상은 신나는 일들로 가득합니다 스포츠 바에서 좋아하는 팀을 응원하거나 동네 식당에서 편안하게 친구나 가족과 저녁을 먹는 일들이죠 세상이 제공하는 일들을 여러분이 쉽게 알아보고 경험할 수 있도록 해 주고 싶습니다 구글 지도를 업데이트하면서 여러분이 관심 가지는 지역에서 새로운 것이나 유행을 계속 알 수 있게 하도록 열심히 노력했습니다 여러분에게 최적화된 장소를 상황과 관심사에 맞게 찾아드립니다 어떤 모습일지 예시들을 보여드릴텐데 소피아의 도움을 좀 받아보겠습니다 첫 번째, 포 유라는 탭을 추가했습니다 여러분이 관심 가지는 동네에 관해 알아 둘 만한 것들을 알려주도록 설계되었습니다 새로 개장하는 곳이나 지금 유행하는 것들 그리고 맞춤형 추천장소 같은 거요 여기 보시면 저한테 주변에 막 개장한 카페를 알려주네요 스크롤을 내리면 이번 주에 인기가 많은 식당 목록이 보이네요 굉장히 유용하죠 아무 힘을 기울이지 않고도 지도가 일상에서 벗어나 새로운 것을 시도하도록 자극하는 아이디어를 주니까요 하지만 이 장소가 저에게 맞다는 걸 어떻게 알 수 있을까요? 좋은 평가를 받은 장소들을 둘러보면서 내가 분명히 좋아할 만하고 꽤 괜찮은 것들이 많겠다고 생각했지만 정확히 어떤 게 좋은지 말할 수 없었던 경험이 있지 않나요? 우리가 유어 매치라는 점수를 만들었습니다 여러분이 좋아할 만한 장소를 찾는 데 도움을 주기 위해서죠 유어 매치는 머신 러닝을 사용하여 내가 추가해 놓은 정보들과 구글이 알고 있는 수억개의 장소들을 결합해줍니다 내가 평가한 식당들, 내가 좋아한 요리들, 내가 가 봤던 장소들 같은 정보죠 매치 숫자를 클릭하면 왜 당신에게 이것을 추천하는지 그 이유를 알려줍니다 당신만을 위한 장소 점수인 거죠 초기 테스터들이 정말 좋다고 평가했습니다 이제 여러분은 최고의 장소를 자신감 있게 고를 수 있습니다 미리 계획을 했든 그냥 떠나서 바로 결정을 해야 하든 상관 없이요 소피아 고마워요 포 유 탭과 유어 매치 점수는 여러분이 잘 알고 있게 해 주고 자신감 있게 장소를 선택하게 해 주는 방법의 좋은 예시입니다 사용자들에게서 자주 듣는 또 다른 불만사항은 다른 사람과 계획을 짜는 것이 진짜 힘들다는 거죠 그래서 함께 장소를 고르기 쉽도록 만들었습니다 쓰는 방법은 이렇습니다 최종 명단에 올리고 싶은 어떤 장소든 길게 누릅니다 저는 언제나 라멘을 추천하지만 제 친구들은 각자 다른 의견이 있다는 것을 알고 있습니다 그래서 선택권을 주기 위해 다른 선택지들을 추가하죠 좋아하는 장소들을 충분히 더했다면 목록을 친구들과 공유해서 친구들 의견을 더합니다 몇 번 탭하기만 하면 쉽게 공유할 수 있슴니다 여러분이 선호하는 어떤 플랫폼에서든 가능하죠 그리고 나면 친구들이 원하는 장소를 추가할 수도 있고 한 번의 간단한 클릭으로 투표하여 모임 장소를 빠르게 결정할 수 있습니다 이제는 링크들을 복사하고 붙여넣기 하는 대신에 서로 문자를 주고 받으면서 결정을 빠르고 쉽고 재미있게 내릴 수 있습니다 이건 새로운 지도 기능들을 일별한 것 뿐입니다 새로운 지도는 이번 여름 늦게 안드로이드와 iOS 모두에서 출시됩니다 우리는 이것이 주변 지역부터 머나먼 세계의 구석까지에서 여러분이 계속 더 나은 결정을 내리고 새로운 시각으로 세상을 경험하는 데 도움을 주기 위해 지도가 할 수 있는 일들의 시작점일 뿐이라고 생각합니다 이런 발견은 소규모 가게들이 없었다면 불가능했을 겁니다 왜냐하면 사람들이 새로운 장소를 발견하도록 도와줄 때 새로운 소비자들이 그 지역 사업을 발견하는 것도 돕고 싶거든요 주변 지역의 빵집이나 구석진 곳의 이발소같은 가게입니다 이런 가게들은 우리 공동체의 근간입니다 진심으로 그들이 구글과 함께 성공할 수 있게 도울 것을 약속합니다 매달 우리는 사용자들을 주위의 가게들과 90억 번이 넘게 연결해줍니다 10억 번의 전화와 30억 번의 길 찾기 요청을 포함한 숫자입니다 지난 몇 달간 우리는 심지어 몇몇 도구를 더했습니다 지역의 가게들이 의미 있는 방식으로 소비자들과 의사소통하고 관계를 맺게 해 주는 도구입니다 당신이 좋아하는 가게들의 이벤트나 제안들에 대한 일일 포스트를 볼 수 있습니다 조만간 그것에서 더 업데이트되어 새로운 포 유의 흐름을 볼 수 있을 겁니다 여러분이 준비가 되었다면 간편하게 한 번의 클릭으로 예약을 하거나 주문을 할 수 있습니다 기술이 모두에게 기회를 주는 것을 보면 언제나 고무됩니다 지난 13년간 우리가 모든 길, 모든 건물, 모든 가게들을 지도화하는데 투자한 이유는 이게 중요한 일이기 때문입니다 우리가 세계 지도를 만들었을 때, 지역 사회는 살아 숨쉬고 우리가 절대 불가능하리라 생각했던 장소들에서의 기회가 생겼습니다 컴퓨팅이 진화함에 따라 우리는 새롭게 생각하도록 계속 스스로 도전해왔습니다 현실에서 여러분의 일을 돕기 위해서였습니다 무대로 아파르나를 모셔서 우리가 구글 지도나 다른 곳에서 어떤 일을 하는지 알려드리겠습니다 구글 VR·AR 부사장 아파르나 첸나프라가다 우리 스마트폰의 카메라는 우리를 주변 세상과 굉장히 직접적으로 연결해줍니다 순간을 저장하고, 추억을 포착하고, 의사소통하게 도와줍니다 하지만 피차이CEO가 말했듯이 컴퓨터 비전과 AI의 진보에 따라 우리는 질문하게 되었습니다 "카메라가 더 많은 것을 할 수 있다면 어떨까?" "카메라가 질문에 대답하는 데 도움을 줄 수 있을까?" 그 질문들은 "어디로 가는 거지?"나 "내 앞에 뭐가 있지?"같은 거죠 익숙한 광경을 그려볼게요 당신은 지하철을 빠져나왔습니다 이미 약속시간이나 기술 회사 회의에 늦어버렸죠 종종 있는 일들이잖아요 그 때 휴대폰이 말하죠 '마켓가에서 남쪽으로 가세요' 그럼 어떻게 해야 하죠? 한 가지 문제는 어느 쪽이 남쪽인지 알 수 없다는 거죠 그러면 휴대폰을 내려다보고 지도상의 파란 점을 보죠 걸으면서 그 점이 옳은 방향으로 움직이는지 확인합니다 그렇지 않다면 반대 방향으로 걸어야죠 우리 모두 그런 적 있잖아요 그래서 우리는 자문했습니다 "카메라가 이걸 도와줄 수 있을까?" 우리 팀은 정말 열심히 작업했습니다 카메라와 컴퓨터 비전의 힘과 거리 뷰와 지도를 통합하여 걸어다니는 내비게이션을 재구상했습니다 구글 지도에서 보여질 모습을 한 번 보시죠 카메라를 켜면 여러분은 바로 어디에 있는지 알 수 있습니다 휴대폰과 싸울 필요가 없죠 지도상의 모든 정보나 거리 이름과 방향들은 여러분 바로 앞에 있을 겁니다 지도도 볼 수 있어서 계속 위치를 확인할 수 있죠 주변 장소들도 볼 수 있어서 주변에 뭐가 있는지 알 수 있죠 그리고 재미를 위해서 우리 팀이 유용한 가이드를 더하자는 아이디어를 냈어요 지금 보시는 거 같은 거죠 방향을 알려줄 겁니다 저기 지나가네요! 아주 멋있죠 이제 이런 경험들이 가능해졌지만 GPS 혼자서는 이것을 편집할 수 없습니다 그래서 우리는 VPS에서 작업을 해왔습니다 시각 위치 확인 서비스로 정확한 위치와 방향을 측정해줍니다 여기에서 주안점은 여러분이나 저나 익숙하지 않은 장소에서는 시각적인 랜드마크를 찾는다는 거죠 가게 앞이나 건물 정면 같은 걸요 그것과 같은 아이디어죠 VPS는 주변 환경의 시각적인 특징을 사용해서 같은 일을 합니다 정확히 어디 있는지 알려주고 정확히 어디로 가야 할 지 알려줘서 우리가 여러분을 돕게 해줍니다 아주 좋죠 우리가 지도에서 카메라를 이용해서 여러분을 도와주는 방법이었습니다 하지만 우리는 카메라가 여러분이 보는 것을 통해 더 많이 도울 수 있다고 생각했습니다 그게 바로 우리가 구글 렌즈 연구를 시작한 이유입니다 사람들은 이미 많은 답을 찾기 위해 구글 렌즈를 사용하고 있습니다 특히 질문이 말로는 설명하기 어려운 종류일 때는 더 그렇죠 '공원에서 본 그 귀여운 개는 뭐지?' 같은 질문에 대한 답입니다 래브라두들이죠 아니면 시카고에 있는 이 건물은 리글리 빌딩이고 높이는 130미터입니다 아니면 요새 제 9살 아들이 말하듯 할 수 있겠죠 "케빈 듀란트가 60명 넘게 서 있는 거랑 같네?" 오늘날의 렌즈는 구글 제품에서 사용할 수 있습니다 포토나 어시스턴트같은 제품이요 하지만 다음 주부터는 렌즈가 카메라 앱에 바로 삽입되어 픽셀이나 새로운 LG G7, 그리고 더 많은 기기들에서 사용 가능해질 겁니다 이렇게 하면 훨씬 더 쉽게 카메라로 바로 앞에 있는 것에 구글 렌즈를 사용할 수 있습니다 아주 많이 기대되네요 이와 비슷하게 비전은 컴퓨팅에 있어서 근본적인 변화입니다 많은 시간이 필요로하겠지만 우리는 이미 많은 진보를 이루었습니다 그래서 오늘 제가 구글 렌즈의 세 가지 새로운 기능을 보여드리겠습니다 더 많은 유형의 질문에 더 많은 답을 더 빠르게 줄 수 있을 겁니다 한 번 보실까요? 좋아요! 자, 첫 번째입니다 렌즈가 단어를 인식하고 이해할 수 있습니다 단어는 어디에나 있죠 생각해보면 교통 표지판, 포스터 식당 메뉴, 명함같은 것도요 하지만 스마트 텍스트 선택과 함께라면 보이는 단어들을 필요로 하는 답과 행동으로 이어줄 수 있죠 그래서 복사하고 붙여넣기를 현실에서 바로 휴대폰으로 할 수 있죠 바로 이렇게요 아니면 이걸 보고 있다고 합시다 단어가 가득한 페이지들을 답이 가득한 페이지로 바꿀 수 있죠 예를 들어서 식당 메뉴를 보다가 빠르게 탭을 해주면 모든 요리들을 알아낼 수 있습니다 어떻게 생겼고 어떤 게 들어가는지 같은 걸요 그건 그렇고 채식주의자로서 라따뚜이에 주키니와 토마토만 들어간다는 걸 알게 되서 좋더군요 진짜 좋죠 이런 예시들을 통해서 렌즈가 시각적으로 기호나 글자의 모양을 이해할뿐만 아니라 단어 뒤의 문맥을 이해하려고 노력한다는 것을 알 수 있습니다 거기서 바로 스콧이 말했던 모든 언어가 이해된다는 것이 진짜 도움이 되는 거죠 제가 다음으로 말할 기능은 스타일 매치라는 기능입니다 아이디어는 이렇죠 가끔 여러분이 하는 질문은 "오, 이 정확한 사물은 뭐지?"보다는 "이런 게 뭐지?"에 가깝습니다 친구 집에 있는데 이 유행하는 램프를 봤습니다 그리고 이 스타일과 비슷한 것들을 알고 싶습니다 이제 렌즈가 여러분을 도와줄 수 있습니다 시선을 끄는 옷을 봤다면 그저 카메라를 켜고 어떤 아이템이든 클릭하세요 그러면 당연히 구체적인 정보를 찾아낼 수 있을 겁니다 그 특정 물건에 대한 후기같은 거죠 하지만 그 외에도 그 스타일과 비슷한 모든 것들을 보고 찾을 수 있습니다 두 가지 부분이 있습니다 렌즈는 수백만 개의 물건을 검색해야만 하죠 하지만 우리는 검색을 어떻게 하는지 알고 있잖아요 하지만 다른 부분은 사실 복잡한 것들입니다 질감이나 모양, 크기, 각도, 조명같은 것들이 다를 수 있잖아요 기술적으로 어려운 문제입니다 하지만 우리는 기쁘게도 이 부분에서 많은 진보를 이루었습니다 이제 제가 오늘 말할 마지막은 어떻게 렌즈가 실시간으로 작동하게 만들었냐는 겁니다 스타일 매치의 예시에서 보셨다시피 카메라를 켜서 보기 시작하면 즉각적으로 렌즈가 모든 정보를 주도적으로 보여줍니다 심지어 여러분이 보는 것들의 정보를 고정시켜 놓기도 합니다 이런 것들은, 수십억 개의 단어, 구문, 장소, 물건들을 샅샅이 조사하는 것들은 여러분이 필요로 하는 것을 실시간으로 제공하기 위한 것으로 머신 러닝이 없다면 불가능하죠 우리는 기기의 지능만이 아니라 클라우드 TPU의 힘까지 두 개 모두를 사용합니다 클라우드 TPU는 작년 개발자 회의에서 발표한 것으로 이를 완성했죠 정말 신나네요 시간이 지나면서 우리가 하고 싶은 것은 모든 것들 위에 직접적으로 생생한 결과를 오버레이하는 것입니다 가게 앞이나 거리 표지판, 콘서트 포스터같은 것들 위에요 그래서 휴대폰을 찰리 푸스의 콘서트 포스터에 그저 대기만 하면 뮤직 비디오가 바로 재생되는 것처럼 그런 일들을 하고 싶어요 카메라가 단순히 질문의 대답을 해주는 것뿐만 아니라 질문이 있는 곳에 대답을 넣어주는 예시입니다 매우 흥미로운 일이죠 스마트 텍스트 선택 스타일 매치, 실시간 결과들이 몇 주 안에 렌즈에서 출시됩니다 계속 지켜봐 주세요 구글이 어떻게 카메라에 AI를 적용시켜 여러분 주변의 일을 해결할 지에 대한 예시들이었습니다 AI와 지도 제작, 컴퓨터 비전을 현실의 문제 해결에 적용시키려면 자율주행차량보다 더 현실적인 것은 없을 겁니다 여기에 대해 말씀드리기 위해 웨이모의 CEO인 존 크라프시크씨를 모시겠습니다 감사합니다 모두들 안녕하세요! 웨이모CEO 존 크라프시크 오늘 구글의 친구들을 무대에서 만나게 되어 너무 즐겁네요 저는 이번에 쇼어라인에 처음으로 오게 됐지만 우리 자율주행차는 처음이 아닙니다 2009년에 이 씨어터 바로 바깥 주차장에서 처음으로 자율주행기술의 시험들이 이루어졌습니다 구글의 기술자들, 로봇 연구가들과 연구자들이 있는 이 곳에서 차들이 스스로 운전할 수 있다는 것을 실제로 검증하기 위한 말도 안 되는 미션이 시작되었습니다 그 당시에는 대부분의 사람들이 자율주행차에 대해서 공상 과학일 뿐이라고 생각했습니다 그러나 이 헌신적인 몽상가들은 자율주행차량이 모두에게 교통을 더욱 안전하고 간편하고 접근 가능하게 할 것을 믿었습니다 그렇게 구글의 자율주행차량 프로젝트가 시작되었습니다 빠르게 2018년으로 돌아와서 구글의 자율주행차량 프로젝트는 이제 웨이모라고 불리는 독립적인 알파벳의 자회사입니다 손보고 연구하는 것을 넘어서 발전해왔습니다 오늘날 웨이모는 전세계에서 유일하게 공공 도로에서 운전석에 아무도 없이 운전하는 완전한 자율주행차량 군단을 갖췄습니다 애리조나주 피닉스의 사람들은 이미 완전한 자율주행을 경험해 봤습니다 한 번 보시죠 자율주행 첫 날입니다 준비됐나요? 갑시다! 기분이 좀 이상하네요 이것이 미래입니다 저 여자분을 보세요 "아무도 운전 안 하고 있는데?" 알고 있었어! 이걸 기다렸지 아무도 운전을 안 한다는 걸 전혀 몰랐어요 요! 자동차! 셀카찍자! 자동차야, 고마워 자동차야, 고마워 아주 멋있죠 여기 나오신 분들은 웨이모의 초기 탑승 프로그램 참가자들입니다 일상에서 우리 자율주행차를 사용한 일반인들이시죠 작년 한 해 동안 이 초기 탑승자들과 얘기를 나눌 기회가 있었습니다 그 분들의 이야기는 굉장히 고무적인 것들이었습니다 초기 탑승자들 중 한 명인 네하는 어렸던 십대 시절에 비극적인 사고를 목격했습니다 네하가 운전면허를 따기 무섭게 만들었습니다 하지만 이제 네하는 매일 웨이모를 타고 출근합니다 짐과 바바라는 더 이상 늙어서 돌아다닐 힘이 없을 때를 걱정할 필요가 없습니다 그리고 잭슨 가족이 있습니다 웨이모는 빽빽한 잭슨 가족의 스케쥴을 진행시켜 줍니다 카일라와 요셉을 학교 통학과 친구들과의 연습이나 만남에 데려다줍니다 이제 공상 과학이 아니죠 자율주행기술을 만들 때 우리가 목표로 한 사람들이 바로 이런 사람들입니다 2018년에 들어서 자율주행차량은 벌써 사람들의 삶과 행동을 바꿨습니다 피닉스가 웨이모의 운전자 없는 교통 서비스의 첫 번째 무대가 되어 올 해 하반기에 출시될 것입니다 조만간 누구나 우리 앱을 사용해서 웨이모를 부를 수 있게 될 겁니다 완전한 자율주행차량이 멈춰 서면 아무도 운전석에 없지만 목적지까지 데려다줄 겁니다 이건 그저 시작일 뿐이죠 왜냐하면 웨이모에서 우리는 단지 더 나은 차를 만드는 것이 아니라 더 나은 운전자를 만드는 것이기 때문입니다 그리고 그 운전자는 모든 앱에서 사용될 수 있을 것입니다 택시 요청, 물류, 개인 차량이나 대중 교통수단과 사람들을 연결시켜주는 데까지도요 우리의 기술은 이 모든 다른 산업들에서 사용 가능하다고 생각합니다 많은 회사들과 동업하여 자율주행의 미래가 모두의 현실이 되도록 하겠습니다 그리고 이 미래는 우리가 AI에 했던 투자와 AI의 약진으로 가능해졌습니다 옛날을 돌아보면 구글은 아마도 그 당시에 이 세상에서 유일하게 AI와 자율주행기술에 동시에 투자한 기업일 겁니다 구글이 음성 인식, 컴퓨터 비전, 이미지 검색 등을 통해서 머신 러닝에 주요 진보를 만들기 시작했을 때 웨이모는 그 수혜를 받을 특별한 위치에 자리했습니다 예를 들면, 2013년에 우리는 보행자 탐지의 돌파구가 될만한 기술을 찾고 있었습니다 다행스럽게도 구글은 딥 러닝이라는 새로운 기술을 이미 효율적으로 사용하고 있었습니다 딥 러닝은 머신 러닝의 한 종류로 다양한 층에 신경망을 만들어 좀 더 복잡한 문제를 해결할 수 있게 합니다 그래서 우리의 자율주행 기술자들은 구글 브레인 팀의 연구원들과 팀을 이루어서 겨우 몇 달만에 보행자 탐지의 오류 발생률을 100배 줄였습니다 네 100%가 아니라 100배요 그리고 오늘날

감사합니다 오늘날 AI는 자율주행 시스템에서 더욱 큰 역할을 하고 있습니다 우리의 능력을 개방하여 진정한 자율주행을 만들어냈습니다 머신 러닝이 현재 길거리에서 보이는 안전하고 능숙한 웨이모의 운전자들을 어떻게 머신 러닝이 만들어냈는지 더 자세히 알려드리기 위해 드미트리를 소개하겠습니다 감사합니다 웨이모 자율주행 기술 총괄 드미트리 돌고프 좋은 아침입니다 이 자리에 서게 되어 영광입니다 웨이모에서 AI는 우리 시스템의 모든 영역을 관장합니다 인지에서 예측으로, 의사 결정으로, 지도 제작으로 그리고 더 많은 것들까지도요 유능하고 안전한 운전자가 되기 위해서는 우리 차량은 주변 세상을 의미론적으로 깊게 이해해야만 합니다 우리 차량은 물체를 이해하고 분류해야만 하고 물체의 움직임을 분석하고 그 의도를 판단하고 앞으로 뭘 할 것인지 예측할 수 있어야 합니다 각각의 물체들이 다른 것들과 어떻게 상호작용할 지 이해해야만 합니다 그리고 마지막으로 우리 차량은 모든 정보를 이용해서 안전하고 예측가능한 방식으로 작동해야만 합니다 그래서 말할 필요도 없이 자율주행차량을 만드는 데는 많은 것들이 요구됩니다 오늘 제가 말 할 두 영역은 AI가 큰 영향을 준 영역으로 인지와 예측입니다 첫 번째, 인지입니다 물체를 탐지하고 분류하는 건 운전에 있어서 중요한 부분입니다 특히 보행자들은 특별한 시련을 만들어주는데 다양한 형태와 자세, 크기로 나타나기 때문입니다 예를 들어서 건설업 종사자가 맨홀 밖을 쳐다보고 있습니다 몸의 대부분은 보이지 않겠죠 여기는 길을 지나는 보행자가 나무 판자에 가려져있네요 그리고 여기를 보시면 보행자가 공룡 옷을 입고 있네요 우리는 차에게 쥬라기 시대에 대해서 가르쳐주지 않았습니다 하지만 여전히 차는 그것들을 올바르게 분류할 수 있습니다 이 보행자들을 탐지하고 분류할 수 있는 이유는 딥 넷을 적용하여 센서 데이터를 통합했기 때문입니다 전통적으로 컴퓨터 비전에서 신경망은 카메라 이미지와 영상에서만 이용되었습니다 하지만 우리 차는 카메라보다 훨씬 많이 가지고 있죠 물체의 형태와 거리를 짐작할 수 있는 레이저와 물체의 속도를 계산할 수 있는 레이더도 장착되어 있죠 머신 러닝을 이 통합된 센서 데이터에 적용시킴으로써 어떤 형태의 보행자든 실시간으로 정확하게 탐지할 수 있습니다 머신 러닝이 웨이모를 위해 놀랍게 큰 일을 해 준 두 번째 영역은 도로 위의 사람이 어떤 행동을 할 지 예측하는 것입니다 사람들은 보통 우리의 예측대로 행동하지만 가끔씩은 그렇지 않습니다 여기 빨간불에 달리는 차의 예시를 보시죠 불행스럽게도 우리는 이런 일을 생각보다 자주 봅니다 이것을 자동차의 시점에서 분석해보겠습니다 차가 교차로에서 직진을 하려고 합니다 분명히 초록불이죠 그리고 교차로는 빨간불로 멈춰 있네요 하지만 교차점에 막 진입하는 순간 오른쪽에서 빠르게 다가오는 차량이 보이네요 우리 모델은 이것을 감속해야 할 차량의 이상 행동이라고 이해했습니다 차량이 빨간 불에도 계속 달릴 것으로 예측하고 우선 속도를 줄였습니다 여기 붉은 장애물에서요 빨간불에서도 달리는 차량에게 우리 앞으로 지나갈 공간을 준 거죠 다른 차량을 치는 걸 막기는 거의 불가능해 보이지만요 이런 종류의 변칙을 탐지할 수 있는 건 우리 ML 모델을 다양한 예시로 훈련시켜왔기 때문입니다 현재 우리 군단은 공공 도로에서 6백만 마일이 넘게 자율주행을 해봤습니다 실제 상황을 수억 개 이상 지켜볼 수 있었던 거죠 그런 관점에서 볼 때 우리는 매일 보통 미국인의 일 년 주행량보다 더 많이 운전을 한다는 거죠 그저 좋은 알고리즘보다는 더 많은 것이 자율주행차량에 필요합니다 굉장히 튼튼한 기반 시설도 필요하죠 웨이모에서는 텐서플로우 생태계와 TPU를 포함한 구글 데이터 센터를 이용하여 신경망을 훈련시켰습니다 이제 TPU를 이용해서 우리는 신경망을 15배 더 효율적으로 훈련시킬 수 있습니다 또한 이 튼튼한 기반시설을 이용하여 시뮬레이션에서 우리 모델을 입증했습니다 이 가상 세계에서 우리는 매일매일 이만 오천대의 차와 동일하게 주행을 했습니다 다하면 시뮬레이션에서 50억 마일 넘게 주행을 했죠 이 정도의 규모를 통해 우리 모델의 훈련과 입증 모두에서 빠르고 효율적으로 차량에 새 기술을 가르칠 수 있습니다 우리가 다루기 시작한 새 기술은 어려운 날씨에서의 자율주행입니다 여기 보시는 것처럼 눈이 오는 것 같은 날씨에서요 그리고 오늘 최초로 눈 속에서 자율주행하는 우리 차량이 어떤 모습인지 그 비밀에 가려진 모습을 보여드리겠습니다 이게 어떤 필터도 거치지 않았을 때 자율주행차가 보는 장면입니다 눈보라 속 주행은 어렵습니다 눈송이가 우리 센서에 많은 방해를 하기 때문이죠 하지만 머신 러닝을 이 데이터에 적용함으로써 우리 차량이 보는 것은 이런 모습입니다 우리는 분명하게 각 차량을 구분할 수 있습니다 센서가 방해되는 데도 불구하고요 이런 진보된 능력들을 빨리 공개할수록 우리 자율주행차량들이 더 빠르게 전세계의 더 많은 도시들과 여러분 인근 도시에 보급될 겁니다 우리 자율주행차량이 더 많은 사람들에게 보급되고 도로가 모두에게 더 안전하고 쉽고 접근하기 편한 곳이 될 미래로 우리를 데려다줄 날이 기다려집니다 여러분 감사합니다 이제 젠을 다시 무대로 불러서 우리의 아침 세션을 마치도록 하겠습니다 드미트리 고마워요 AI가 언제나 새로운 방식으로 사람들을 돕는 일에 대해 알아볼 수 있어 좋았습니다 제가 구글에 기술 인턴으로 입사한 게 거의 19년 전이네요 첫 날 문을 열고 들어갔을 때부터 제가 항상 생각하는 것은 기술의 영역과 기술의 가능성 확장에 헌신할 것이었습니다 사람들의 실제 삶에 영향을 줄 제품들에 주력하는 것과 함께요 그리고 세월이 지나면서 저는 여러번 목격했습니다 어떻게 기술이 실제로 변화된 역할을 수행하는 지를요 검색이나 지도같은 제품 초기에서 구글 어시스턴트같은 새로운 영역으로 변화했죠 오늘날의 구글을 보면 그 초기의 가치가 여전히 살아 숨쉬고 있는 것을 볼 수 있습니다 우리는 계속해서 여러분과 함께 모두를 위한 제품과 중요한 제품을 만드는데 전념하겠습니다 우리 스스로의 목표를 더 높이고 책임감 있게 사회와 세상에 공헌하도록 지속적으로 포부를 품겠습니다 진짜 모두를 위한 제작을 하려면 다양한 관점들이 혼합되어야 합니다 그게 바로 우리가 올해 개발자 회의를 확대하여 더 많은 목소리들을 들으려고 한 이유입니다 남은 삼일간 추가 연설자들을 초대하여 디지털 웰빙 촉진에서부터 NGO의 미션 달성을 돕는 것까지 모든 분야에서 확장된 역할을 수행하는 기술에 대해서 모두 말해드리겠습니다 물론 그 뿐만 아니라 여러분이 개발자 회의에서 기대한 수백개의 기술 얘기도 있습니다 여러분이 즐기시고 배워가셨으면 좋겠습니다 2018년 개발자 회의에 오신 것을 환영합니다 부디 즐겨주세요 다음 며칠간 자극을 얻으셔서 모두를 위해 좋은 것을 만드는 일을 지속하시기를 바랍니다 감사합니다

Improve app performance with Android Studio Profilers (Google I/O '18)

[음악 재생] ESTEBAN DE LA CANAL : 제 이름은 에스테반입니다 저는 Android Studio의 프로파일 링의 선두 주자입니다

오늘은 우리가 가진 모든 새로운 기능을 보여 드리겠습니다 Android Studio 32 및 Google의 일부 기능 프로파일 러의 Android Studio 31에서 시작되었습니다 권리

그래서 저는 세션의 대부분에서 데모를 할 것입니다 그러나 이전에 프로파일 러를 본 적이없는 경우에 대비하여 – 아이디어를 얻으려면 얼마나 많은 사람들이 프로파일 러를 사용 했습니까? 승인 훌륭합니다 글쎄, 나는 우리가 당신에게 이러한 프로파일 러를 가지고 있지만, 대부분은 당신을 보았습니다 하지만 우리에게는 새로운 프로파일 러가 있습니다

오늘 소개하게 될 것입니다 그것이 에너지 프로파일 러입니다 아시다시피, 우리는 모니터를 가지고 있습니다 그게 당신에게 응용 프로그램에서 원격 telemetry 보여줍니다 우리에게는 CPU 네트워크 메모리와 새로운 에너지 프로파일 러가 있습니다

그리고 당신은 그 중 누구에게나 뛰어들 수 있습니다 예를 들어, 네트워크 요청을 검사하십시오 코드에서 요청한 곳 실제로 다운로드 한 내용, 전송 된 내용을 확인하십시오 또한 메모리 프로파일 러에 들어가서, 기억의 붕괴를 보아라 얼마나 많은 객체를 할당했는지, 당신이 그들을 할당 한 곳

CPU 프로파일 러를 살펴볼 수도 있습니다 나는 우리에게 당신에게 새로운 멋진 특징들을 보여줄 것입니다 거기에 32, 특히 systrace에 추가되었습니다 다시 한 번 질문 드리겠습니다

얼마나 많은 사람들이 전에 systrace를 사용 했나요? 승인 시원한 이제 systrace는 우리는 첫 번째 단계부터 시작했습니다 systrace를 Android Studio CPU 프로파일 러에 통합하는 방법에 대해 설명합니다 나는 잠시 후에 그것을 시연 할 것입니다 그리고 마지막으로 새로운 에너지 프로파일 러가 있습니다 앱의 문제를 찾는 데 도움이되는 에너지 프로파일 링으로 이어질 수있는 에너지 문제

나는 세션의 끝에서 그것에 대해 더 이야기한다 그리고 그걸로 끝입니다 그것이 내가 가지고있는 모든 슬라이드입니다 이제 데모로 이동하겠습니다 그리고 면책 조항을 만들어야합니다

오늘 내가 데모 할 기능들, 저는 Android Studio 32 Canary입니다 아직 안정적이지 않은 이유입니다 그래서 우리는 울퉁불퉁 한 탈것을 타기 위해있을 것입니다 하지만 우리가 갖고있는 것을 보여주고 싶었습니다

그리고 우리가 충돌하면 우리는 YouTube와 YouTube간에 시청하는 사람들과 그리고 그게 다야 괜찮아 그래서 지난 주에이 시계 앱을 썼습니다 그것은 시계가있는 간단한 시계 응용 프로그램입니다 그것은 당신이 클릭 할 수있는 스톱워치를 가지고 있으며, 뭔가를합니다

타이머가 있습니다 그리고 나는 너희들과 그것을 프로파일하고 싶다 먼저 네트워크 프로파일 러부터 시작해 보겠습니다 그래서이 응용 프로그램은 많은 기능을 가지고 시계 앱에 있어서는 안된다 예를 들어 인터넷에 접속해야합니다

위치에 액세스해야합니다 그것은 우리가 이것을 데모 할 수있는 많은 것들이 있습니다 그러니 제발 이런 시계 응용 프로그램을 작성하지 마십시오 그래서 가지고있는 기능 중 하나는 배경을 바꿀 수 있다는 것입니다 그래서 인터넷 연결이 충분하다면, 이 일은 이미지를 바로 다운로드하기 시작합니다

지금 우리는 거기에 갈 네트워크 프로파일 러에 들어가면됩니다 당신은 반드시 전에 이것을 보았습니다 그리고 수행 된 모든 네트워크 요청을 볼 수 있습니다

당신은 그들을 클릭하고 실제 페이로드를 볼 수 있습니다 31에 추가 된 새로운 기능 우리가 보내는 것을 볼 수있는 능력입니다 우리가받는 것만이 아니라 페이로드 또는 우리가 사용하는 사용자 지정 헤더를 참조하십시오 이 경우 하나의 맞춤 헤더가 있습니다

그 말은 Google I / O입니다 31에 또 다른 새로운 기능이 있습니다 네트워크 프로파일 러의 경우 스레드보기입니다 따라서 여기에서 보는 것처럼 요청을 표시합니다

타임 라인에서는 볼 수 있지만 스레드보기를 선택하면 어떤 실에있다 이걸 닫으면 더 많은 공간이 생깁니다 우리는 거기에 갈 따라서 각 스레드가 작성된 요청을 볼 수 있습니다 그리고 우리가 더 좋아한다면

표준 비동기 작업을 사용하고 있습니다 순차적으로 실행할 기본 실행자를 사용하며, 그리고 당신은 그들을 볼 수 있습니다 그리고 그들이 같은 스레드를 재사용한다면, 당신도 그들을 볼 수 있습니다 그러나 앱에서 더 복잡한 스레딩 요청이있는 경우, 이보기를 사용하여 현재 진행중인 작업을 볼 수 있습니다 그래서 그것들은 두 가지 새로운 기능입니다

우리가 31에서 추가 한 네트워크 프로파일 러에서 이제 저는 메모리 프로파일 러로 이동하려고합니다 다음 세션으로 가자 이전에이 뷰를 본 적이 있다면, 니가 얼마나 많은 기억을했는지 다른 구성 요소로 사용하지만 우리는 또한 할당 한 객체의 수를 보여줍니다

Android 또는 휴대 전화에서 프로파일 링하는 경우, 우리는 – 이 기능은 매우 훌륭합니다 실시간 위치라는 기능이 있습니다 추적 그날을 기억하십시오 아마도 작년이었을 것입니다

위치 추적을 할 때, 위치를 기록하려면 버튼을 클릭해야했습니다 그러면 그들을 볼 수 있습니다 우리가 여기서 무슨 일이 있었는지 알고 싶다면, 우리는 객체 선이 올라가는 것을 볼 수 있습니다 가비지 컬렉터가 올라가고 있기 때문에, 쓰레기 수거로 따라서 무슨 일이 일어나고 있는지보고 싶다면 범위를 선택하십시오

우리는 모든 단일 객체에 대한 정보를 얻을 것입니다 그곳에 할당되었고, 그 시간에 할당되었고, 그리고 귀하의 코드에서 할당되었습니다 그리고이 창문을 밀면 너는 이 변화가 일어나는 것을 볼 수 있습니다 따라서 가비지 콜렉션 기간 동안 슬라이드하면, 할당 취소 된 객체가 표시됩니다

이 창을 닫을 게 우리는 거기에 갈 할당되지 않은 문자열이 많이 있음을 알 수 있습니다 그래서 우리는이 앱을 실제로 보게 될 것입니다 그것이 얼마나 나쁜지 보아라

예를 들어, 이것을 선택하면 할당 된 것을보고 싶습니다 많은 문자열이 할당되어 있음을 알 수 있습니다 나는 그 중 하나를 클릭해서 내가 어디에 할당했는지 볼 수 있습니다 나는 그들을 onDraw 안에 할당했습니다 이것은 좋은 생각이 아닙니다

사용자 정의보기가 있고 많은 문자열을 할당하는 경우 거기에 나쁜 일이 일어날 것입니다 그리고 우리는 CPU 프로파일 러를 통해 그 부분에 대해 더 많이 보게 될 것입니다 그러나 이것은 이미 우리에게 말하기 시작했습니다 내 앱이 잘못하고있는 것에 대한 신호 우리가 3

2에서 추가 한 또 다른 새로운 것 JNI의 글로벌 레퍼런스를 볼 수있는 능력입니다 이것은 많은 메모리 누수 때문에 매우 중요합니다 1 개의 JNI 글로벌 참조가 작성되어 있기 (위해) 때문에, 우리는 언제 그것을 만들었는지 알지 못합니다 그게 어디 있는지 알아 그래서 당신이 범위를 선택할 때, 우리가 여기에 내 애플 리케이션에 무엇을 가지고, 이미지를 다운로드 할 때마다 필터를 실행합니다

C ++에서 어둡게해서 글꼴을 볼 수 있습니다 거기에 전 세계적인 참조가 있습니다 그리고 나는 그것이 올바르게했기를 바랍니다 그래서 우리는 JNI 힙 (heap)이라고 부르는 특별한 힙을 가지고 있습니다 그러나 당신이 그것을 선택할 때, 당신은 볼 수 있습니다

이 시간 범위에 존재했던 모든 글로벌 참조 이 경우, 나는이 엔트리를 가지고 있고, 나는 내가 하나를 창조했음을 알았지 만 그것이 없어 졌음에 틀림 없다 여기에 살고 범위를 선택하겠습니다 그리고 여기 있습니다 이것은 내 세계적인 것입니다

이것은 내가 다운로드 한 모든 이미지입니다 나는 여전히 JNI 글로벌 참조를 보유하고있다 그리고 실제로 코드의 C ++ 라인으로 이동할 수 있습니다 내가 결코 놓아주지 않는 그 세계적인 참조를 만들었다 그래서 이것이 문제를 추적하는데 유용하길 바란다

글로벌 참조 그리고 한 가지 더 당신은 아마 모든 시간을 왼쪽에서 보았을 것입니다 Sessions 패널이라는 새로운 패널이 있습니다 이제 이전 세션을 볼 수있게되었습니다

프로필을 작성 했으므로 다시 탐색 할 수 있습니다 이전 실행을 비교하십시오 앱을 최적화하고 있다면, 내가 무엇을 바꿨는지, 너는 돌아갈 수 있다고 말한다 세션을 통해 볼 수 있습니다 음, 데모가 끝날 때, 잘하면 우리는 되돌아 가서 우리가 최적화 한 것과 일어난 것을 볼 수 있습니다

그러나 그것은 우리가 이런 일을 할 수있는 문을 열었습니다 이제 파일을 가져올 수 있습니다 나는 힙 덤프를 가져올 것이다 그리고이 힙 덤프를 직접 가져 왔습니다 새로운 프로파일 러에게 보내고 우리가 그것에 대한 고정 장치라고 부르는 것, 그리고 너처럼 힙 덤프를 분석 할 수있어

프로파일 러에서 익숙하다 CPU 추적을 가져올 수도 있습니다 우리가 수출 할 수있는 모든 것, 우리도 수입 할 수 있습니다 그래서 매우 편리합니다 – 이것은 32에서 새로 추가되었습니다

그리고 이것이 내가 기억하기를 원하는 것입니다 이제 우리는 CPU로 가서 대부분의 시간을 보낼 것입니다 그곳에 권리 이것은 라이브 세션입니다

그리고 내가 갖고있는 기능 하나를 보여 드리겠습니다 괜찮아 그래서 우리가 추가하고 싶은 한가지 처음부터 프로파일 링하는 능력이었습니다 그래서 그것이 프로파일이라면, 당신은 이것을 압니다 앱 시작 프로필 작성을 원할 경우, 당신은 CPU 프로파일 러에 가서 클릭 레코드를해야하므로 무슨 일이 일어나고 있는지 알 수 있어요

음, 32에서, 당신이 할 수있는 것은 당신이 Profiling 탭으로 간다면, 녹음 시작 옵션이 있습니다 시작시 메소드 추적 그래서 나는이 덱스를 가지고있다 원하는 구성을 선택할 수 있습니다

이 경우 샘플 Java 구성을 사용하려고합니다 앱을 다시 실행하겠습니다 시원한 이제 앱이 다시 시작된 것을 볼 수 있습니다 프로파일 러는 저에게 직접 CPU 프로파일 러, 이미 진행중인 캡처가 있습니다

앱 시작부터 이제 저는 그걸 막을 것입니다 그곳에서 일어난 일을 조사 할 것입니다 데이터를 가져 오는 데 몇 초가 걸립니다 시원한

나는 당신이 화면상의 해상도를 볼 수 있는지, 그러나 보자 그리고 그것을 보라 앱의 시작 부분을 선택하겠습니다 사실 캡처가 시작되었음을 알 수 있습니다 원격 측정기가 데이터를 받기 시작할 수 있기 전에도 앱에서 나온 거지? 우리의 원격 계측은 여기에서 시작되었지만, 우리는 데이터를 볼 수 있습니다

계속 확대하면 내 주요 활동의 첫 번째를 볼 수 있습니다 그리고 심지어 우리가 볼 수 있기 전에, dexes 중 하나 귀하의 응용 프로그램의 아주 시작 부분에 낮췄다 따라서이 메커니즘을 사용하면 처음부터 프로파일 링 할 수 있습니다 앱의 시작 시간을 최적화 할 수 있습니다 하지만이 캡처를 살펴 보겠습니다

전에 본 문자열이 실제로 몇 가지 문제가 발생합니다 CPU 프로파일 러에서 내가 가장 좋아하는보기 중 하나 Flame 차트입니다 Flame 차트는 모든 호출 스택을 집계합니다 같은 시작을 가지고 있습니다 따라서 기본적으로 하향식 트리라는 것을 알 수 있습니다

그러나 시각적 인 방법으로 그리고 가장 큰 것들 중 하나가 내 onDraw라는 것을 알 수 있습니다 내가 이것을 굴리는 방법은 모든 프레임에 있습니다 나는 모든 것을 다시 렌더링하고있다 그건 좋은 방법이 아닙니다

그러나 이것은 프로파일 러에 대한 좋은 예입니다 그래서 당신은 내가 렌더링하고 있음을 볼 수 있습니다 맨 위에는 많은 것들이 있습니다 문자열 형식화와 관련이 있습니다 그리고 이것이 우리 문자열 문제의 원천이 될 수 있습니다

우리가 전에 본 것 따라서 앱이 제대로 작동하지 않는 또 다른 증상입니다 내가 항상 우리의 프로파일 러에 대해 말한 한 가지는 우리가 앱에서 무엇이 잘못되었는지 말할 수 없습니다 앱이하는 일만 알려줄 수 있습니다 그리고 나서 너에게 달려있어, 오, 나는 이것이 일어날 것을 기대하지 않았다

알 수 있듯이 내 앱은 괜찮아 보이지만 후드에서는 그렇지 않아 그래서 당신이 틀린 레이블에 버그가 있다고 가정 해 봅시다 그것은 다른 위치에 있습니다 앱을 실행하고 있습니다 당신은 그것을 보았고, 오, 틀렸어

이 문제를 해결해야합니다 그러나 성능 문제와 같은 문제가 있다면 너는 그것을 보지 못할 것이다 나중에도 배터리에 관해서 이야기하겠습니다 너는 들판에서 그것을 볼거야, 그렇지? 그래서 우리는 우리의 프로파일 러를 앱의 다른 창으로 만들고 싶습니다 프로필러를 보면서 앱을 실행할 수 있습니다

그런 다음 문제를 볼 수 있습니다 네가 기대하지 않았던 것이 나타나기 시작했다 onDraw 내부에서 많은 문자열 서식을 지정하는 것처럼 요구 코드에 가보겠습니다 여기에 제가 – 너 볼 수있어? 네

그래서 저는 onDraw를 가지고 있고 drawtime이라는 함수를 가지고 있습니다 어디에서 내 앱을 볼 시간이 있는가? drawTimeString이라는 함수를 작성했습니다 문자열 서식을 사용하여 시간을 그리는 아마 좋은 생각이 아닙니다 그래서 그것은 단지 하나의 사건입니다 나는 다른 함수를 쓰고있다

문자열을 사용하지 않고 시간을 그립니다 우리는 그것을 시도 할 것입니다 오, 우리가하기 전에, 너에게 보여 줄게 우리가 여기있는 한 가지 여러분 중 얼마나 많은 사람들이이 라인을 잘 알고 있습니까? 코드, Trace

beginSection? 손을 들어주세요 시원한 그래서이 줄은 끝 부분과 함께, 그들은 systrace 이벤트를 만들 것입니다 당신이 볼 수있는 systrace를 사용할 수 있습니다 그래서 제가 최적화를하기 전에, 무슨 일이 일어나는지 보여줄거야

시스템 추적 방법을 사용하여 캡처를 수행 할 경우 그래서 이것은 두포의 아래에서 systrace를 달리고있다 Python 스크립트로 이동할 필요가 없습니다 더 이상 가져 오지 말고 HTML보기에서 다시 가져옵니다 우리는 대신 여기에 당신에게 보여줄 것입니다 안드로이드 스튜디오에서 우리의 응용 프로그램에서

승인 내가 울퉁불퉁 한 탈것에 대해 언급 한 것을 기억하니? 이거 야 Oopsie 에뮬레이터를 다시 시작하면 다시 시도하겠습니다 우리는 거기에 갈

제발, 집에서 이것을 시험해보십시오 파일 버그, 우리는 그들을 해결할 것입니다 이 표를 얻으면 이러한 문제 모두 정렬됩니다 우리는 거기에 갈 CPU 프로파일 러로 가서 시스템 트레이스를 사용할 것입니다

두 번째는 매력입니다 승인 그래서 여기에 시스템 추적이 있습니다 선택 부분을 선택하고 확대합니다 시원한

우선 여기에서 주목할 것은, 우선, 우리는 거기에 커널 섹션이라는 새로운 섹션이 있습니다 여기서 모든 CPU를 보여줍니다 세심한주의를 기울이면 모든 스레드 정보를 다시 렌더링하고, systrace에서 모든 데이터 가져 오기 그래서 스레드 정보가 있기 전에, prog 파일 시스템을 샘플링합니다 그래서 정확하지 않습니다

그러나 당신이 systrace 포획을 가지고 갈하자마자, 당신은 정확히 어디에서 볼 수 있습니다 당신의 실이 매 순간하고있는 일 그리고 그 중 하나를 선택하면, 우리는 당신의 쓰레드가 어떤 CPU에서 스케줄되고 있는지에 대해 위에서 강조했다 그래서 당신은 스레드 경합을 볼 수 있습니다 또는 당신을 CPU에서 쫓아 내고있는 모든 것들

근본적인 차이가있다 그런데 우리는 당신이 그것을 보는 방식으로 여기에 systrace를 보여줍니다 HTML보기에서 여기서 우리는 앱에 중점을 둡니다 녹색으로 강조 표시된 모든 항목이 여기에 표시됩니다

짙은 녹색조차도 당신의 앱입니다 계속해서 다른 이벤트를 볼 수 있습니다 CPU를 사용하고있는 곳이나 쫓겨 난 곳을 확인하십시오 그러나 우리는 당신의 앱에 초점을 맞 춥니 다 우리는 앱의 스레드를 보여줍니다

따라서 거대한 HTML 페이지를 탐색 할 필요가 없습니다 그리고 우리는 당신이 알고있는 모든 다른 것들을 사용합니다 다른 모든 캡처 우리는 systrace (예 : Flame chart)에 사용합니다 또는 하향식보기

시간을 최대한 빨리 확대하겠습니다 우리는 프레임을 볼 수 있습니다 그래서 나는 여기에있다 더 많이 확대하고 사실 내 메인 스레드를 선택하자 우리는 거기에 갈

그래서 우리는 ChoreographerdufFrame을 볼 수 있습니다 아래로 내려 가면 내 맞춤 구성 요소에서 onDraw를 볼 수 있습니다 우리는 끌기 시간을 볼 수 있습니다 코드를 기억하십시오 – 코드로 돌아가서 보여 드리겠습니다 그리기 시간에는 시계 끌기 시간이 있습니다

내 임시 문자열 주위 섹션 주위에, 그리고 당신은 내가 그것을 세 번, 한 번 보았 음을 알 수 있습니다 내 앱의 모든 섹션에 대해 각자의 복용 기간을 알 수 있습니까? 그래서 프레임을 렌더링하는 데 38 밀리 초가 걸립니다 초당 60 프레임으로 앱을 실행하려면, 당신은 17 밀리 세컨드 이하로 렌더링해야합니다 이제는 끝났어 사실, 시간을 끌기위한 나의 목표 중 하나는 11 밀리 초를 취하는 것입니다

그래서 내가 가지고있는 것은 잘하지 못하고있다 괜찮아 보이는데, 당신이 이것을 선적했다고 사람들이 불평한다고 상상해보십시오 이것은 제가 언급 한 것들 중 하나입니다 당신은 당신의 앱을 본다 그러나 그것을 본다

그것이 괜찮은지 확인하기 위해 프로파일 러 유리를 통해 이제 최적화하고 다른 장면 캡처를 시작하겠습니다 내가 그리는 시간의 구현을 변경하겠습니다 이제 문자열을 사용하는 대신, 내 사용자 지정 서식을 사용하고 있습니다 문자열 형식을 사용하는 대신, 내 사용자 지정 서식을 사용하고 있습니다

우리는 이러한 변화와 함께 다시 실행할 것입니다 그리고 우리는 systrace를 통해 그것을 실행할 것입니다 그리고 그게 내 애플 리케이션에 영향을 참조하십시오 시원한 거기는

CPU 프로파일 러에 가면 systrace가 선택됩니다 그리고 나는 포획을 시작하고있다 몇 초 만에해야 할 일이 있습니다 거기에서 일어나는 프레임이 많습니다 멋지다

우리는 그것을 가지고있다 권리 주 스레드가 선택되었습니다 특정 프레임을 확대하십시오 프레임 워크에는 ChoreographerdufFrame이 있습니다

그런 다음 시계 켜기로 이동합니다 그리기 시간 기능을 더 이상 볼 수 없습니다 그것들은 그 아래 작은, 작은 얼룩 들이기 때문에, 그들 각각은 현재 71 마이크로 초가 걸리고, onDraw는 13 밀리 초입니다 우 – 후 그래서 우리는 그렇게했습니다

이제 초당 60 프레임 미만입니다 내 앱이 다른 곳에서 나쁘기 때문에, 적어도 우리는 그것의 한 부분을 최적화했습니다 시원한 그리고 그것은 systrace입니다 그리고 다시 세션을 언급하겠습니다

내가 말했던 것을 기억하라 너는 돌아가서 비교할 수있다 이전 세션이 왼쪽에 있는데, 우리는 우리가했던 이전의 systrace를 볼 수 있습니다 그래서 여기 있습니다 다시 선택할 수 있으며 주 스레드를 볼 수 있습니다

내 시간이 얼마나 나쁜지 보아라 그리고 나서 현재 실행중인 세션으로 되돌아갑니다 당신은이 모든 것을 지킬 수 있습니다 그리고 물론, 마우스 오른쪽 버튼을 클릭하면, 당신은 추적을 내보낼 수 있고 디버그, 또는 힙 덤프에서이 항목을 바로 내보낼 수 있습니다 세션 패널에서

음, 이것을 클릭하겠습니다 권리 그리고 그게 우리 – 20 분이야

systrace와의 통합 따라서 CPU 데이터를 캡처하는 또 다른 방법이 있습니다 그리고 그것은 디버거의 API를 통해 이루어집니다 코드 줄로 가자 여기있어

그래서 나는 스톱워치를 가지고 있는데, 나는 갈거야 내가 스톱워치를 시작할 때마다 그것을 바꾸기 위해, 시작 메소드 추적을 실행하겠습니다 그리고 내가 그것을 멈출 때마다, 나는 메소드 추적을 중지합니다 디버거를 가져와야하고 앱을 다시 실행하겠습니다 이제는 일단 API를 실행하면 이 파일을 가져와 가져와야합니다

좋아하는 프로파일 러 중 하나에서여십시오 추적 파일을 열 수 있습니다 하지만 지금 내가 CPU 프로파일 러에 있다면 내 스톱워치를 사용합니다 이것이 발생합니다 이제 캡처를하고 스튜디오 프로파일 러의 캡처가 진행 중이라는 것을 발견했습니다

우리는 당신에게 이것을 보여줄 것입니다 그리고 내가 그것을 멈추었을 때, 나는 가서 가져올 필요가 없다 어디에서든지 파일 우리는 그것을 장치에서 꺼내 바로 거기에 보여줍니다 그래서 내가 시작하고 멈 추면 시작하고 멈 춥니 다

이 모든 것을 포착합니다 실제로 서로 겹쳐 쓰고 있어요 그들은 동일한 파일링 장치를 사용하기 때문에, Studio로 가져 와서 보여주는 것입니다 프로필 작성을 원할 때 매우 편리합니다 정확히 한 순간

모두 탐색 할 수 있으며 여기에서 볼 수 있습니다 세션] 패널에서 꽤 괜찮은데 31에서 추가 한 것, CPU를 캡쳐하는 또 다른 방법 Simpleperf라는 C ++ 샘플링 도구를 사용합니다 androiddevelopers

com에있는 문서로 이동하면, Simpleperf에 대한 설명서를 찾을 수 있습니다 우리는 안드로이드 스튜디오 안에 Simpleperf 버전을 가지고 있습니다 C ++ 코드를 샘플링하고 전체 호출 스택을 볼 수 있습니다 귀하의 C + + 프로그램의 내가 많이 가지지 않기 때문에 데모하지 않을거야

C ++의 시원한 이것이 바로 CPU 프로파일 링입니다 이제 에너지 프로파일 러로 옮겨 가겠습니다 따라서 에너지는 까다 롭습니다

에너지는 까다로운 데 그 이유는 귀하의 휴대 전화에서 에너지를 사용하십시오 음, 화면은 분명히 – 나는 심지어 화면을 셀 수 없다 화면이 나쁩니다 그것은 많은 에너지를 사용하지만, 사용자는 전화를 사용하고 있습니다 게임을 사용하고 있다면 항상 화면을 사용하십시오

그러나 배터리 드레인 문제는 대개 사용자가 아닌 경우 CPU 또는 네트워크를 사용할 때 발생합니다 이것을 알고 있거나 개발자가 아닌 경우 이것에 대해 알고 있습니다 그럼 내가 살게 해줘 나는이 응용 프로그램에 상당한 양의 CPU를 사용하고 있습니다 에너지 분석기에 들어가면, 우리는 이것을 에너지의 가벼운 사용으로 분류합니다

우리는 당신에게 여기있는 것을 보여줄 것입니다 정말 좋은 모델 맞지? 그래서 우리는 당신이 얼마나 많은 에너지를 낼지 나타내는 것들을 보여줍니다 현대적인 전화로 사용하고 있습니다 나는 에뮬레이터가 얼마나 많은 에너지를 정제하는지는 모르겠다 분명히 사용하고 있지만 이것은 우리가 볼 수있는 것입니다

OK, 나는 잘하고있다, 잘하지 못하고있다 여기에 나타나는 것들을 보여 드리겠습니다 그러나 명백하게 두 가지 중요한 요소는 CPU와 네트워크입니다 그리고 그렇지 않습니다 명백한 것은 괜찮습니다

그냥 CPU와 네트워크를 사용하지 마십시오,하지만 어떻게? 아니면 내가 왜 현장에서 그것을 사용하고 있습니까? 그리고 문제는 실제로 우리가 그것을 사용할 때가 아닙니다 문제는 우리가 그것을 사용하고 있는지 모른다는 것입니다 그래서 나는 잠에서 깨어나는 실행 잠금 장치를 가지고 있다고 가정 해 봅시다 우리는 그것이 어디에 있는지 알지 못합니다 CPU를 사용하고 있습니다

또는 내가 올바르게 설정하지 않았다는 경고음이 들립니다 그게 내 애플 리케이션을 깨우고, 그리고 네트워크 요청을 만들고있어 그래서 실제 에너지가 아닙니다 이 모든 일에 대해 당신이 잘못 할 수 있습니다 장기간 배터리가 소모 될 수 있습니다

그리고 이것은 제가 전에 말했던 것의 일부입니다 앱을 보면, 내 앱을 보면, 그것은 실행중인 것 같습니다 괜찮을 것 같습니다 Play 스토어로 푸시해야한다면 너는 너의 전화로 시작 했어 이것은 가장 비싸고, 배터리를 사용하며, 당신의 휴대 전화에 가지고있는 시계

네 배터리를 버리 겠어 맞아 내가 이것을 볼 때 나는 그것을 모른다 따라서 프로파일 러를 살펴보면 끊임없이 이것이 CPU를 고갈시키는 것을 볼 수 있습니다, 그 이유를 조사 할 수 있습니다 내가 말했듯이, 일반적인 실수는 내가 해제하지 않는 잠자기 잠금 장치가 있거나 알람이 있습니다

그래서 우리는 당신에게 창문을주고 싶었습니다 일어나는 일들을 볼 수 있습니다 같은 방법으로 잘못된 위치에 라벨이있는 경우, 너는 그것을 볼 수있다, 너를 보여주고 싶다 취소하지 않았다는 경고를 받으면 또는 당신은 틀린 장소에있는 경보가있다, 우리는 당신에게 그것을 보여줄 것입니다 그래서 타이머가있는 곳에서이 앱을 보여 드리겠습니다

그래서 여기, 나는 10 초 타이머를 말하자 그리고 에너지 프로파일 러의 바닥을 볼 수 있습니다 거기에 노란색 선이 나타났습니다 도구 팁을 붙이면 경보 또는 직업입니다 우리는 거기에서 당신을 보여줍니다

그리고 타이머가 멈 추면, 경보가 울 렸어 타이머를 다시 시작하면 다시 알람이 울립니다 그리고 이것을 실제로, 제가 이것을 개발할 때, 내가보기에 유용 했어, 알았어, 내가 제대로하고 있니? 타이머를 멈 추면 내 경보가 사라 집니까? 다시 시작하면 다시 부르겠습니까? 그래서 이것을 보게됩니다 시계 타이머로 알람을 사용하지 마십시오 나는 또한 스톱워치에 잠자기 잠금 장치를 가지고있다

다시 한 번 스톱워치에 절전 모드 잠금 장치를 사용하지 마십시오 그리고 내가 그것을 시작할 때 나는 깨우기 잠금을 적용한다는 것을 알 수 있습니다 내가 그것을 멈추었을 때, 나는 그것을 내버려 두었다 그리고 나는 그것이 잘 작동하는 것을 볼 수 있습니다 빨간 줄이 계속 간다면 버그가 생겼지, 그치? 내 응용 프로그램은 동일하게 보일 것이며, 나는 그것을 발송할 것이다

사람들은 문제가 생기 겠지만 이 창을 통해 볼 수 있습니다 좋든 싫든 또한 위치를 추적합니다 그래서 내가 지금하고있는 것처럼 당신이 위치를 얻는다면, 우리는이 보라색 선을 보여줍니다 당신의 현재 위치

에뮬레이터에는 정말 편리한 기능이 있습니다 위치 이벤트를 보낼시기를 실제로 알릴 수 있습니다 그래서 우리 모델에서는 실제로 그것이 에너지를 사용 하여 그리고 다시 보라색 막대에서 볼 수 있습니다 보라색 막대가 사라졌습니다

그러나 그 이상으로, 우리의 프로파일 러에서 익숙 하듯이, 우리는 범위를 선택할 수 있습니다 너는 경보를 받았고, 위치 요청을했다 뒤로 이동하면 웨이크 잠금 장치를 선택할 수 있습니다 그리고 나는 그것을 잠시 후에 할 것이다 그 이상으로, 나는 당신에게 그 위치는 획득되었고 어떤 종류의 공급자였습니까? 나는 GPS 제공자를 사용하고 있습니다

그래서 우리는 그것을 볼 수 있습니다 코드가 나올 때 내가 선택한 간격 시간을 볼 수 있습니다 나는 그것을 토글 위치가 발생하도록 유발했다 버튼을 클릭하면 알람을 클릭하면 나는 그것을 처음 설정할 때를 볼 수있다 그러나 내가 그것을 다시 시작할 때, 나는 그것을 취소한다

따라서 코드의 모든 부분을 볼 수 있습니다 이 문제가 해결되지 않으면 문제를 디버깅 할 수 있도록 트리거되었습니다 올바르게 일어난다 내가 다시 가서 너에게 보여 줄게 웨이크 잠금 장치, 바로 거기에 있습니다

나는 선택한다 웨이크 잠금 장치를 볼 수 있습니다 그리고 내가 시작할 때마다 당신은 볼 수 있습니다 나는 스톱워치를 멈췄다 나는 인수하고 공개했다

깨우기 잠금을 사용하면 모든 호출 스택을 볼 수 있습니다 그 일이 언제 일어 났는지 이것이 바로 이것의 힘입니다 이것은 말하기위한 것이 아닙니다, 좋아, 당신은 많은 배터리를 사용하고 있습니다 네

나 다시, 나는 배터리를 사용하고 싶다 그래서 괜찮아 이 기능을 통해 앱이 당신이 생각하는 것을하는 것 그리고 그렇지 않다면 들어가서 고쳐야합니다 그래서

시원한 그것은 에너지 프로파일 러입니다 내가 너에게 보여주고 싶은 또 하나의 것을 보여 줄께 왼쪽에는 세션 패널이 있습니다 그리고 제 시간에 돌아 갑시다

이렇게 현재 세션을 중지 할 수 있습니다 그런 다음 이전 세션을 클릭 할 수 있습니다 우리가 한 모든 캡처를 비교할 수 있습니다 내가 여기에서 이야기를 시작했을 때부터, 우리가 처음 만났을 때였습니다 Studio를 다시 시작할 때까지이 정보를 모두 보관합니다

그래서 당신은 달리기를 비교할 수 있습니다 그리고 마지막으로 보여 드리죠 나는 그걸로 끝내고 싶다 나는 몇 분 일찍 닫을 것이다 괜찮아

전에 말했듯이, 모든 프레임을 렌더링하고 있습니다 나는 내가해서는 안되는 일을하고있어 그게 내가 항상 그 시야를 무효화하고 있다는거야 그리고 그것은 많은 CPU를 사용하고 있습니다 그럼 제 활동으로 돌아가 봅시다

나는 이것을하는 코드를 가지고있다 그래서 저는 모든 프레임을 업데이트하는 모델을 가지고 있습니다 그리고 나서 나는 항상 무효화한다 내 모델에는 언제 변화했는지 알 수있는 능력이 있습니다 그래서 캔버스를 무효화 할 때마다 무언가가 바뀌 었습니다

그리고 우리는 그것이 가지고있는 영향을 보게 될 것입니다 에너지, CPU 등 우리는 다시 응용 프로그램에있어 우리는 거기에 갈 대부분의 시간 동안 에너지 프로파일 러를 볼 수 있습니다

지금은 빛 아래 있습니다 전에 매체보다 높았습니다 이전 세션과 비교할 수 있습니다 물론 렌더링해야 할 때, 우리는 에너지 사용량이 올라 가기 시작한다는 것을 알 수 있습니다 왜냐하면 나는 매번 내 견해를 재검토하기 때문입니다

그리고 여기서 효과를 볼 수 있습니다 메모리 프로파일 러에서도이를 볼 수 있습니다 내가 메모리 프로파일 러로 돌아 가면 올라가고, 올라가고, 올라가고, 올라가고 있었던 선을 기억하십시오 쓰레기 수집? 그것은 사라졌습니다

나는 생성되는 몇몇 객체를 가지고있다 그리고 그들은 나중에 여기 에서처럼 주장 될 것입니다, 그러나 이전과 같지 않습니다 시원한 그리고 데모를 중단하고 슬라이드로 돌아가 보겠습니다 고맙습니다

[음악 재생]

Android Jetpack: manage UI navigation with Navigation Controller (Google I/O '18)

[음악 재생] LUKAS BERGSTROM : 안녕하세요 일찍 일어나서 우리와 함께있어 줘서 고마워

우리 천둥의 일부 3 ~ 4 건의 프레젠테이션으로 도난 당했을 수 있습니다 이 전에 Navigation Editor가 시연되었습니다 다행히도, 우리는 조금 더 자세하게 들어갈 시간이 있습니다 이전 발표보다 여기에는 많은 훌륭한 자료가 있습니다 그리고 저는 Lukas, Architecture for Architecture Components의 제품 관리자입니다

그리고 나와 함께, 나는 이안과 세르게이를 낳았다 내비게이션 구성 요소를 구축했습니다 네비게이션 네가 그것에 대해 생각한다면, Android의 거의 모든 앱에 문제가 있습니다 해결해야합니다 하지만 지금까지는 우리에게 정말로 당신을주지 않았습니다

시작 활동 이외의 작업을 수행 할 수있는 모든 것, 여러 가지 이유로, 그것에 대해 갈 가장 좋은 방법은 아닙니다 그래서 당신이 우리의 일을 생각한다면 안드로이드 개발, 탐색 용이 실제 해결책이없는 일반적인 문제였습니다 그리고 그것은 여러분에게 많은 것들이 있다는 것을 의미합니다 혼자서 해결해야합니다 그리고 조각 트랜잭션을 커밋하는 방법, 잘하면 예외를 던지지 않고, 네비게이션이 올바르게 실행되고 있는지 테스트하는 방법과 네비게이션이 발생할 때 올바른 일이 일어나고 있습니다

깊은 링크를 앱의 여러 위치에 매핑하는 방법, 당신의 앱으로 그 딥 링크 체계를 최신으로 유지하는 법 항해 구조 변경, 장소에서 논증 전달 장소 – 다시 말하지만, 우리는 오늘날 당신이 그것을 안전하게 할 수있는 안전한 방법을 제공하지 않습니다 위와 뒤로 사용자가 올바른 방향으로 이동하도록하는 방법 특히 어려운 상황에 처한 장소 앱의 네비게이션 깊숙이 깊숙이 링크 된 누군가처럼 계층 그리고 이것이 의미하는 바는 당신이 마칠 때입니다 이러한 문제를 해결하려면 일반적으로 두 가지 방향 중 하나를지나 갔다 당신은 탐색 프레임 워크의 60 %를 썼습니다

또는 오류가 발생하기 쉬운 상용구가 많이 있습니다 어디서나 내비게이션이 앱에서 발생해야합니다 따라서 코드의 병렬 라인이 여러 개 있습니다 이러한 다양한 문제를 해결하고, 전체 구조 상당히 부서지기 쉽다 그리고 개별적으로, 이러한 문제는 꽤 다루기 쉽습니다

그러나 실제 세계의 예를 보면, 당신은 그들이 꽤 털이 빠져 나올 수 있다는 것을 알 수 있습니다 앱에 항목 화면이 있다고 가정 해 보겠습니다 딥 링크를 통해 액세스 할 수 있습니다 여태까지는 그런대로 잘됐다 그러나 누군가가 개방을 통해 화면을 탐색 한 경우 홈 화면의 앱은 뒤쪽 스택에 몇 가지 다른 화면이 있습니다

그리고 그것을 치면, 우리는 그들을 원한다 항목 화면에서 앱 밖으로 가져 가지 마세요 카테고리 화면으로 이동 한 다음 홈 화면 그리고 누군가가 앱에 깊숙이 연결된다면, 우리는이 스크린들을 종합 할 필요가있다 항목 화면을 표시하기 전에 스택에 추가하십시오

그리고 타사 개발자와 이야기하면, 그는 당신이 코드를 작성하는 중일 때라고 말했습니다 이를 위해이 스크린들을 합성하는 것 앞뒤 스택에 추가합니다 하지만 딥 링크에서만 시작해야합니다 어쩌면 당신이 해결하고있는 것처럼 느낄 수 있습니다 프레임 워크의 실패 그래서 우리가하는 문제를 해결하는 것입니다

내비게이션을 시작합니다 그리고 우리가주는 것은 시각적 인 도구입니다 앱의 탐색 그래프를 수정할 수있는 이것은 XML로 표현됩니다 그리고이를 통해 사용 가능한 탐색 세트를 정의 할 수 있습니다 행동, 장소에서 장소로 전달할 수있는 논증, 시각적 전환과 같은 것들

그런 다음 하나의 탐색 통화가 활성화됩니다 그 모든 것을 런타임에 그리고 마지막으로 중요한 것은 결코 당신이 결코 한 가지를 의미하지 않습니다 프래그먼트 트랜잭션을 다시 만지는 것에 대해 걱정해야합니다 맨손으로

[박수 갈채] 따라서 탐색 그래프는 본질적으로 무엇입니까? 가능한 목적지의 집합 사람들이 내 앱에서 도달 할 수 있습니다 그리고 그것들은 대개 화면과 일치하지만 항상 그런 것은 아닙니다 그래서 네비게이션 컨트롤을 가질 수 있습니다 또는 화면의 작은 부분의 내용을 변경하는 것만으로, 하지만 일련의 탐색 대상입니다 그리고 그들을 연결하는 행동

그리고 행동은 실제로 당신이 어떻게 장소마다 갈 수 있습니다 따라서 실제로 앱에서 점 A에서 점 B로 이동하려면, 너는 정확한 항법을 부를 것이다 런타임시 조치 그러면 어떻게 생겼는지 살펴 보겠습니다 그리고 데모로 넘어 갑시다

승인 여기에서 우리가 보는 것은 일련의 탐색 목적지입니다 이들은 단편 대상이며, 다른 옵션도 가능합니다 화살촉과 그들을 연결하는 선들 행동입니다 그리고 이러한 액션은 실제로 메소드를 생성합니다

런타임에 호출 할 수 있습니다 여러분 모두 알고 있고 사랑하기 때문에이 모든 것이 XML에 의해 뒷받침됩니다 그리고 XML과 네비게이션 에디터 같은 능력을 지니고있다 그래서 둘 중 하나를 사용할 수 있습니다 여기서 화면을 추가 할 것입니다

그리고 당신이 보는 것은 일련의 이용 가능한 활동들입니다 그리고 내 애플 리케이션에 조각 좋아요, 그래서 우리는 그들에게 옵션을 추가했습니다 실제로이 질문에 성공적으로 대답하고 게임에서이기십시오 이제 액션을 추가 할 것입니다

해당 화면으로 이동합니다 큰 그리고 네비게이션 액션은 분명히 설정할 수있는 여러 가지 옵션이 있습니다 우리는 이것들에 대해 조금 더 이야기 할 것입니다 당분간, 우리는 한 가지를 할 것입니다

그래서 우리는 그들이 축하합니다 게임이 끝났음을 의미합니다 그래서 다시 타격해서는 안됩니다 더 이상 존재하지 않는 게임으로 이것이 의미하는 바는 우리가 행동하기를 원한다는 것입니다 Match 스크린으로 갑시다

그리고 그것은 내가 모든 것을 터뜨릴 것임을 의미합니다 이 목적지와 성냥 사이의 뒤쪽 스택에 화면 따라서 사용자가 축하합니다 화면에 도달하면, 그들이 뒤를 쳤을 때, 그들은 곧장 곧장 갈 것입니다 일치 화면으로 이동합니다 제가 설정할 수있는 많은 다른 옵션들, 하지만 지금은 그 얘기 만하겠습니다

돌아가 축하 화면을 다시 살펴 보겠습니다 언급 할 또 하나의 중요한 점은 여기에 설정된 핵심 사항입니다 프래그먼트 클래스입니다 이것이 런타임에 실제로 인스턴스화됩니다 레이아웃 미리보기는 여기에서 볼 수 있습니다

Navigation Editor 탐색 그래프와 관련된 레이아웃을 알고 있습니다 레이아웃과 관련이 있다는 것을 알고 있기 때문에 그 네비게이션 그래프로, 나는 두 배가 될 수있다 해당 조각의 목적지를 클릭하십시오 레이아웃 편집기로 들어가려면 큰 내가 방금 한 모든 일은 이 새 대상을 탐색에 추가 그래프, 행동, 그 팝 동작의 변화 그 행동의 전부는 내가 할 수있는 모든 것들이다

런타임에 프로그래밍 방식으로 수행합니다 따라서 탐색 편집기, XML 또는 프로그래밍 방식, 모두 잘 작동합니다 큰 그리고 지금, 나는 이것을 이안에게 건네 주겠다 좀 더 자세히 설명해 드리겠습니다

IAN LAKE : 그러면 마음에 떠오를 수있는 첫 번째 질문입니다 와,이게 완전히 새로운 길이야 귀하의 애플 리케이션의 UI를 구조화 그리고이 종류의 질문이 즉시 제기됩니다 좋아, 좋아, 내 활동이 실제로 의미하는 바는 무엇인가

권리? 모든 종류의 앱은 출발점이 매우 다릅니다 너희들이 지금있는 곳에서 – 아니면 이틀 전쯤에 앱 UI 구성 방법 일부는 매우 활동이 무거 우며 조각이 많이 무겁고 대단히 많을 수 있습니다

다른 시스템에서 모든 이들은 분명히 매우 유효한 장소입니다 그러나 우리는 활동이 더 많은 모델로 이동하고 있습니다 앱 진입 점 소유자가되는 활동보다는 앱의 콘텐츠 중 실제로는 그 세계적인 상태를 저장하게 될 것입니다

그래서 전 세계적인 항해가 가능합니다 아래쪽 탐색, 탐색 서랍, 당신은 여전히 ​​액션 바를 사용하고 있습니다 그것들은 활동이 관리하는 종류의 것들입니다 그러나 그것은 우리가 내용을 위해 NavHost라고 부르는 것에 위임합니다 그래서 우리의 멋진 슈퍼 간단한 활동 여기

우리는 상단에 액션 바를 가지고 있습니다 아래쪽에있는 하단 탐색 장치와이 큰 흰색 상자 중간에 그것은 우리의 NavHost입니다 그래서 탐색의 세계에서, 언제 당신은 다른 목적지들 사이를 항해한다 앱에서 실제로하고있는 일 그 상자 안의 모든 것을 바꿀뿐입니다

권리? 그래서 당신은 그 밖의 글로벌 네비게이션을 가지고 있습니다 우리는 당신이 그걸 갈고리로 묶을 수있는 고리를 가지고 있습니다 실제 NavHost와 동기화됩니다 그래서이 모양의 슈퍼 간단한 버전은 무엇입니까? 글쎄, 목적지에 파편을 사용한다면, NavHost 조각을 사용하고 싶을 것입니다 여기에 활동 레이아웃이 있습니다

그것은 말 그대로 우리의 한 조각입니다 따라서 탐색 조각 종속성을 포함시켜이 작업을 수행합니다 예상대로 완전히 다른 종류의 목적지를 사용하고 있다면, 아마 다른 종류의 NavHost도 가질 것입니다 사용자 정의보기 또는 무엇이든 여기에 추가 한 항목 그들이 필요로하는 다른 항목

그러나 NavHost 조각을 위해 몇 가지 편의를 설정했습니다 행동 양식 어떤 내비게이션을 설정할 수 있는가? 그래프를 XML로 사용하고 있으므로 프로그래밍 방식으로 설정하지 않아도됩니다 그래프의 시작 지점으로 이동합니다 기본적으로

그리고 파편들에 대해서 우리는 실제로 이것을 시스템 뒤로 버튼에 연결하십시오 그래서 우리는 정확히 그것을 할 수있는 방법을 제공합니다 따라서 특별히 뒤로 누를 때 재정의 할 필요가 없습니다 탐색을 위해 우리는 파편의 마법을 사용하여 모든 것을 연결합니다

이 기본 NavHost 옵션을 통해 그래서 우리의 활동이 실제로 두 줄의 코드가됩니다 그것은 두 줄이지만 수평으로 맞지 않습니다 슬라이드에 하지만 우리가 할 일은 단지 부 풀리는 것뿐입니다 우리 레이아웃, 컨텐츠보기, 그리고 위로 버튼 연결

이제는 일반적으로 큰 작업입니다 그러나 그래프의 구조에 대해 우리에게 말했기 때문에, 우리가 할 수있는 일은 이 경우, 우리는 활동에 Kotlin 확장 방법을 사용하고 있습니다

Java 사용자를위한 정적 메소드 일뿐입니다 내비게이션을 찾을 수있게 해주는 컨트롤러는 ID를 전달함으로써이 경우, NavHost 조각의 ID입니다 그리고 그것은 우리에게 위로 가기위한 액세스 권한을줍니다 그리고 옳은 것을 할 것입니다 탐색 그래프를 기반으로합니다

실제로 실제로 많은 추가 작업을 수행 할 필요는 없습니다 우리에게 그래프를 주면, 우리는 당신을 위해 이것을 할 수 있습니다 하지만 대부분의 앱에는 단 한 가지만 있습니다 실제로 당신이 가진 것이 아닙니다 어쩌면 당신은 조금 더 많은 것을 가지고있을 것입니다

그래서 우리는 두 번째 종속성 인 navigation-ui를 설정했습니다 실제로는 정적 메서드 집합입니다 네비게이션 구성 요소를 재료 설계 요소의 이러한 것들 중 일부는 하단 nav 및 사물과 같습니다 그런 종류의 글로벌 네비게이션에서 매우 그렇습니다 공간

물론 2018 년입니다 KTX, 정적 메서드를 확장으로 변경하는 개체 클래스가 작동하는 메소드 그래서 이것은 Kotlin 사용자들에게는 정말 쉽습니다 앱에 통합하고 탐색 기능을 제공합니다 그게 뭔가있는 것 같아

거기에있는 모든 구성 요소에 존재합니다 그럼이게 어떻게 생겼어? 우리가 다시 우리의 활동을 조금 더 복잡하게 만들면, 상단에 툴바를 추가하면 아래쪽 탐색보기를 추가하십시오 이 경우에도 앱 종류는 동일합니다 이전에 네비게이션 화면에서 보았던 그러나 우리가 이러한 것들을 연결하기 위해하는 일은 두 부분으로 나뉩니다 하나, 여기 메뉴가 실제로 나옵니다

당신이 각 목적지에 가지고있는 것과 동일한 ID를 사용하는 것 따라서 각 대상에는 고유 한 ID가 있습니다 그리고 실제로 메뉴 항목에 동일한 ID를 사용할 수 있습니다 그런 종류의 암시적인 링크를 구축합니다 오, 물론 홈 메뉴 항목을 클릭하면 앱의 집에 갈 것입니다

코드에서 우리는 액션 바를 설정하려고합니다 툴바를 사용하여 그런 다음 동일한 findNavController를 수행 할 수 있습니다 NavController 객체에 액세스 할 수 있습니다 그런 다음 활동에 대한 전화와 확장 기능 만 있습니다

NavController를 사용하여 작업 표시 줄을 설정할 수 있습니다 그리고 이것은 꽤 마술입니다 그러나 실제로 그것이하는 일은 실제로 네비게이션 할 때 이벤트를받을 예정이다 NavController에서 설정 한 라벨을 사용합니다 내비게이션 그래프에서 액션 제목을 업데이트하십시오

바 그리고 우리는 또 다른 도우미 방법을 가지고 있습니다 서랍 레이아웃을 사용하여 자동으로 변경하는 경우 햄버거 버튼에서 뒤로 화살표로, 당신이있는 목적지에 따라 그래서 정말로 도움이되는 패턴들 그 것들이 동기화되어 있는지 확인하십시오 마찬가지로 아래쪽 탐색의 경우 설치 프로그램을 호출하기 만하면됩니다

NavController로 설정 호출 여기에서 양방향 동기화를 다시 시도하십시오 그래서 당신이 아래의 nav에서 물건을 클릭하는 것에 따라, 그래프를 변경하고 올바른 전환을 수행합니다 물질적 지침에 근거하여, 앱 간을 이동하면서 별도의 버튼이 있다면 실제로 하단 탐색 메뉴에서 선택한 항목을 업데이트합니다 그래서 이것은 우리에게 많은 힘을줍니다 미리 빌드 된 구성 요소를 사용하고 있습니다

다른 팀이 제공 한 것입니다 모든 사용자 정의 UI가 있습니다 그래서 그 시점에서, 우리는 정말로 갈 필요가 있습니다 NavController가 실제로 당신에게주는 것을 더 깊게 살펴보십시오 그리고 아주 간단한 경우 버튼이 있습니다

당신은 어딘가로 가고 싶습니다 우리는 편리한 메소드를 가지고있다 OnClickListener를 탐색하십시오 당신은 당신이 가고 싶은 곳의 ID를주고, 어떤 대상, 어떤 작업을 트리거 할 것인지, 우리는 당신을 위해 모든 일을 할 것입니다 자, 아마도, 이것은 아마도 조금 마법 적이기 때문일 것입니다

그래서 당신은 그것을 조금 풀 수 있습니다 이 경우 다른 확장 방법을 사용하고 있습니다 보기에 그래서 NavController에 의해 만들어진 모든 뷰에서, 실제로 nav 컨트롤러에 대한 참조를 얻을 수 있습니다 findNavController를 호출함으로써, 예상대로, 해당 nav 컨트롤러를 사용하십시오

Navigate를 호출합니다 목적지의 ID로 이동하면됩니다 또는 귀하의 그래프에있는 행동 그게 전부 야 커버 아래에,이 Navigate는 실제로 많은 일을하고 있습니다

그래서 NavController는 우리가 탐색하는 탐색기와 대화하고 있습니다 그리고 파편들에 대해서 우리는 단편 네비게이터와 이야기하고있었습니다 우리가 제공합니다 그리고 그 항해자는 너에 관한 모든 것을 알고있다 탐색이라고합니다

네가 우리에게 준 때문에 네가 갈 조각이 뭔지 알아 너의 클래스 이름 그리고 모든 조각 트랜잭션을 빌드 할 것입니다 너를 위해서 그것은 Add to Back Stack을 호출 할 것입니다

그것은 당신이하는 모든 일을 할 것입니다 정보를 네비게이션에 넣으라고 말씀하셨습니다 그래프 그래서 당신이 팝 업했다면, 그것은 가고 있습니다 그런 모든 것들을 할 수 있습니다

전환은 모두이 코드 줄에 있습니다 그리고 그것 모두는 프로그래밍 방식으로 결정될 수 있습니다 – 이 방법에 추가 옵션을 추가 할 수 있습니다 미리 결정한 사항 네비게이션 그래프의 일부로 하지만 많은 장소에서 실제로는 탐색이 아닙니다 권리? 다음 출처로 전달할 정보가 있습니다 그러기 위해서는 정보 묶음을 전달해야합니다

여기에서는 문자열과 int를 전달합니다 우리는 안드로이드 KTX에서 우리의 좋은 도움이 번들을 사용하고 있습니다 그리고 그것은 작동합니다 괜찮아 이것은 많은 일에 정말로 유용합니다

그러나 똑같은 시점에서 그다지 안전하지는 않습니다 여기에 실수를한다면, 당신은 무엇을 할 것입니까? 그래서 우리는 이것을 훨씬 쉽게 만들고 싶습니다 세르게이가 우리가 한 일에 대해서 이야기 할거야 세르게이 바실리 네크 : 네, 우리가지었습니다 Safe Args Gradle Plugin이라고하는 무언가 그리고 그것은 당신을 조금 도와 줄 것입니다

그러나 우선, 우리가 해결하려고하는 것을 보자 그리고 우리의 예를 들어 봅시다 실제로 탐색하려고하는 도움말 조각 화면 이름 인수를 전달해야합니다 그리고 선택적으로 카테고리를 전달할 수 있습니다 정수형입니다

전화 사이트로 돌아가 봅시다 음, 우리 조각에서 우리는 모든 것을 올바르게 만들었습니다 우리는 스크린을 통과했으며 적절한 유형을 가지고 있습니다 우리는 범주를 통과했습니다 적절한 유형도 있습니다

하지만 실제로, [INAUDIBLE] 동안 다른 [INAUDIBLE] ,, 당신은 화면 이름을 전달하는 것을 잊을 수 있습니다 런타임 예외가 발생합니다 그리고 나 잘못하지 마라, 고치는 것은 매우 쉽다 그러나 그것은 짜증나게 느낀다 자바 스크립트 개발자는 무엇입니까? 왜이 컴파일 시간 검사를합니까? 나도 몰라

그래, 우리가 결정 했어, 좋아, 이제 우리는이 네비게이션 그래프를 가지고있다 네비게이션에 대해 모두 설명해 보겠습니다 목적지의 주장을 포함하여 XML에서 어떻게 보이는지 봅시다 그리고 그것은 매우 간단합니다 우리는 인수 이름, s-type을 추가로 지정합니다

지정된 기본값으로 그것은 당신의 주장이 선택적이라는 것을 의미합니다 그리고 이것으로 우리는 툴링을 만들 수 있습니다 일단 행동을 취하면 이 단편 또는 다른 행동이나 활동으로 이어지며, 우리는 당신이 적절한 주장을하고 그것을 확인하도록 할 수 있습니다 이제 어떻게 보이는지 살펴 보겠습니다

우리의 Gradle 플러그인과 같습니다 이제 탐색하기 위해이 특수 객체를 사용합니다 번들에 ID를 전달하는 대신 내부적으로 주제는 동일한 ID 및 동일한 인수를 통합합니다 그러나 그 객체를 얻으려면 HomeFragmentDirection 클래스를 사용합니다 그것은 당신을 위해 생성됩니다

방향 이름 접미사를 더한 프래그먼트 이름을 제안합니다 그리고이 클래스에는 정적 메서드가 있습니다 이 대상에 대해 정의 된 모든 작업에 대해 그리고 이러한 정적 메소드는 필수 인수를 통과시킵니다 그래서 우리의 경우, 그것은 우리에게 가정 논쟁을 전달하게합니다 그리고 나중에 선택적으로 나중에 설정할 수 있습니다

당신의 다른 추가적인 주장들 그리고 모든 것이 타입 안전합니다 그 후 수신 측은 매우 간단합니다 당신은 그들이 당신을 위해 생성하는 [비천 성]을 가지고 있습니다 그것은 args 클래스입니다

그래서 우리의 경우 HelpfragmentArgs입니다 그리고 그것은 당신의 주장을 모두 가지고 있습니다 당신이 조판 방식으로 정의한 것입니다 그리고이 비교적 작은 삶의 개선으로부터, 우리는 더 깊은 곳으로 간다 IAN LAKE : 네

그래서 딥 링크는 전통적으로 무언가입니다 Android가 가장 오랫동안 지원해 왔습니다 따라서 활동에 의도 필터를 추가 할 수 있습니다 딥 링크뿐만 아니라 웹 URL을 인수 할 수 있습니다 알림 및 사물에 매우 유용합니다

앱에 다시 연결하는 것과 같습니다 그러나 이것은 훨씬 더 복잡해집니다 당신은 더 복잡한 애플 리케이션을 얻을 당신이 어떻게 이런 것들을 구조하고 어떻게 말하는지와 같이, 좋아요, 통보를해야합니다 실제로 얻는 데 필요한 모든 코드는 무엇입니까? 내 응용 프로그램의 올바른 위치에 넣고 올바른 종류의 패스 여기에 정보가 있습니까? 탐색을 위해 일류 시민의 깊은 연결 고리 우리의 구조에서

실제로 두 종류의 딥 링크가 있습니다 명백한 종류 – 그래서 이것들은 알림, 앱 단축키, 앱 위젯, 새로운 액션 및 슬라이스, 당신이 만들고 일반적으로하는 것들입니다 계류중인 의도 이 앱은 다른 앱으로 전달하는 모든 것입니다 또는 말하기를 시스템에, 나는이 특정 장소로 ​​가고 싶다

내 앱에서 사물의 암시 적 측면은 웹 URL 주변에 더 많이 있습니다 및 맞춤 구성표 URL 그래서 이것들은 당신의 앱을 실행시키는 다른 앱이 될 것입니다 그리고 우리는 이들 모두를 네비게이션 용으로 처리합니다 명시 적 딥 링크의 경우 특정 클래스가 있습니다

NavDeepLinkBuilder라고합니다 그리고 인생의 유일한 목표는 딥 링크입니다 네비게이션 그래프의 특정 목적지로 이동 ID로 그러나 그것은 모든 일을 할 것입니다 말하기는 쉽지만 조금 더 어렵습니다 실제로 모든 것이 시스템에서 작동하는지 확인하십시오

그러나 NavDeepLinkBuilder를 만들면, 당신은 맥락으로 그것을 창조한다, 당신은 그것을 준다 당신의 그래프, 목적지, 당신이 가지고있는 모든 논쟁 그러면 Create Pending Intent를 호출 할 수 있습니다 그리고 우리는 여기서 모든 일을하고 있습니다 올바른 합성 백 스택을 생성하려면, 그래프 내에서 그리고 둘 다 있다면 여러 액티비티, 부모 액티비티도 사용합니다

그리고 우리는 그것을 함께 전달하고 올바른 의도로 올바른 장소에 도착할 때 당신은이 의도를 유발합니다 그런 다음 알림을 통해 전달합니다 당신은 실제로 이것보다 더 많은 것을 할 필요가 없습니다 모든 올바른 행동 암시 적 딥 링크의 경우 – 이것들은 다시 웹 URL에 대한 링크입니다

권리? 이 경우에, 뭔가가있는 대신 프로그래밍 방식으로 생성 한 탐색 그래프에 포함하는 정보입니다 여기에 딥 링크 요소가 추가됩니다 우리가 그래프에 인수와 액션을 추가 한 것처럼, 이들은 단지 깊은 링크 일뿐입니다 물론 비주얼 에디터에서 우리 모두를 할 수 있습니다 대상에 대한 속성의 일부로 앱과 마찬가지로 간단합니다 : uri

그리고 당신은 우 리를 전달합니다 자, 이것은 정적 인 uri입니다 이것은 지루하고 바보입니다 그리고 그들이하는 하나의 URI 만 가지고있는 많은 앱이 있습니다 그래서 우리는 물론 와일드 카드를 지원합니다

따라서 와일드 카드로 *를하고 싶다면 완전히 지원됩니다 목적지에 대한 인수를 작성하려면, 실제로 중괄호를 사용할 수 있습니다 그러면 URL을 구문 분석하고 해당 값을 추출합니다 너의 args을 위해 너에게 그들을 준다

다시 같은 종류의 안전한 args, 이제 당신은 URL에서 직접 얻을 수 있습니다 그리고 재사용 할 필요가 없습니다 당신은 이미 그것이 무엇을 해야하는지 알고 있습니다 마찬가지로 두 가지를 결합 할 수도 있습니다 좀 더 복잡한 패턴을 만들고 싶다면, 완전히 할 수있다 우리는 또한 자동 검증을 지원합니다

앱 링크를 사용하여이 동음 이의어를 건너 뛰는 경우 화면 우리는 당신이 같은 종류의 일을 할 수 있는지 확인하기를 원했습니다 네비게이션도 사용하고 있다면 여기에서는 HTTP, HTTPS를 중단했다고 가정합니다 그래서 우리가 여기에서하는 일은 실제로 둘 다하고있는 것입니다

우리는 HTTP, HTTPS를 말하고 있습니다 자, 서버가 모두 HTTPS라고 가정합니다 하지만 URL을 실제로 제어 할 수는 없습니다 다른 앱도 여기에 포함됩니다 어쩌면 그들은 실수로 귀하의 URL에서 S를 가져 갔을 것입니다

우리는 여전히 그것들을 모두 지원하기를 원합니다 그래서 우리는 이것을 단지 편리한 방법으로 사용합니다 하나 대신 두 줄을 사용하는 대신 물론 사용자 정의 체계에서도 작동합니다 그래서 당신이 특별히 설정 한 자신 만의 계획이 있다면 앱의 경우 딥 링크에 첨부 할 수도 있습니다 이제 가장 중요한 부분은 우리가 공구 공간을 가로 질러 일했다

그래서 네비게이션 에디터 외에도, 우리는 또한 명시 적 합병 팀과도 협력했습니다 따라서 하나의 탐색 그래프 요소 만 추가하면됩니다 그래프를 가리키는 매니페스트의 활동, 그래프의 모든 딥 링크 그러면 올바른 의도 필터로 확장됩니다 우리는 당신을 위해 모든 것을 만들겠습니다 Android Studio에서 Manifest Merger보기로 이동하면 네비게이션 파일에서 정확한 라인을 볼 수 있습니다

그 의도 필터를 생성했습니다 그래서 이것은 우리가 이제는 하나의 진리를 가지고 있다는 것을 의미합니다 내비게이션 그래프에서 이것이 꺼내지 않을 거라는 걸 알아라 당신이 기대하는 것과 동기화 할 수 있습니다 당신이 논쟁을 바꿀 때 그것은 동기화되지 않을 것입니다

XML 파일의 이름 이 모든 것은 일을하는 중심적인 장소 중 하나입니다 우리는 이것이 훨씬 쉬워 진다고 생각합니다 기본적으로 모든 암시 적 딥 링크 종류의 사례 물론 우리는 이것이 ActionView URL 인 모든 작업을 수행합니다

웹 URL의 경우와 동일합니다 선에 직접 추가 된 것을 볼 수 있습니다 그리고 그들 중 다수가 있다면, 그것은 실제로 당신에게 정확히 어떤 라인을 말할 것입니다 여러 그래프가 연결된 경우 다른 활동으로, 그들은 모두 잘 작동합니다 그래서 다른 주제 중 하나는 모든 아키텍처 구성 요소에서 정말로 중요합니다

테스트 중입니다 네비게이션 테스트는 매우 어렵습니다 그리고 이것은 우리가 가고있는 어떤 것입니다 알파 기간 동안 계속 살펴보아야합니다 그리고 우리는 여러분의 의견도 모두 정말로 원합니다

하지만 네비게이션에서 테스트를 생각하는 것에 대해 토론하고 싶었습니다 세상은 그렇게 보일 것입니다 따라서 목적지 사이의 모든 링크가 내비게이션을 통과 한 경우 테스트하기가 훨씬 쉽습니다 고립 된 목적지 권리? 각 대상을 자체적으로 테스트 할 수 있습니다

그런 다음 발신 에지를 테스트하거나 들어오는 논쟁과 다룰 필요가없는, 오, 그것은 실제로 오른쪽 조각 거래를 했나요? 네비게이션 컨트롤러에서만 테스트 할 수 있기 때문에 수평 그래서 이것은 우리가 가고있는 어떤 것입니다 더 많은 시간을 보냅니다 어제 조각난 이야기에서 우리는 실제로 정말로 조각 자체를 만들기 위해 말했어 훨씬 더 테스트 가능합니다

그래서 일종의 패키지 거래입니다 우리는 Navigation Controller에 테스트를 구축하려고합니다 그러나 또한 시험 할 수있는 목적지를 건설하는 것을 시도한다 그래서 지금 당장 뭔가를하는 데 관심이있을 것입니다 에스프레소 테스트를하고 테스트하고 싶습니다

오, 내가 뭔가를 탐색 할 때, 그것은 올바른 장소로 이동합니까? 글쎄, 우리는 실제로 Add-on Navigator navigate 리스너를 가지고 있습니다 그래서 실제로 그것을 NavController 's에 연결할 수 있습니다 항해자와 콜백을해라, 오, 이 버튼을 클릭하면 올바른 위치로 갔습니까? 그래서 이것은 우리가 꽤 성공적으로 찾은 한 가지 방법입니다 테스트 물건에서 물건을 완전히 블랙 박스 분명히 NavController를 삽입하려면 또는 다른 방법을 사용하십시오, 그것들은 또한 완벽하게 유효한 방법입니다 설정하는 것

오늘 당신은 무엇을 가지고 놀 수 있습니까? 그리고 당신은 무엇을 가지고 놀 수 있습니까? 당신은 이틀이 걸렸습니다 당신은 그것을보아야 만합니다 권리? 알파 100-alpha01입니다

우리는 버그 수정의 긴 활주로를 제공하고 있습니다 및 개선 사항 그리고 그것은 정말로 2 개의 주요 인공물, 항해 조각 (탐색 런타임 종속성 포함) 전이 의존성 및 또한 NavHost 조각과 조각 네비게이터 조각 목적지를 사용해야합니다 내비게이션 UI 의존성뿐만 아니라, 이러한 정적 메서드가 있습니다 그리고 탐색을위한 모든 의존성에 대해, 우리는 Kotlin을 사용한다면 대시 KTX 버전을 가지고 있습니다

그래서 우리는 정말로 코 틀린을 만들려고 노력했습니다 네비게이션 세계에서 일류 시민, 특히 몇몇 것들을 위해서 프로그래밍 방식의 그래프를 작성하는 경우처럼 구성 네비게이션 전체를 읽고 있다고 서버의 그래프, 우리는 Kotlin DSL을 가지고있다 Kotlin 확장 프로그램의 일부로 훨씬 쉽게 사용할 수 있습니다 니가 코 틀린을 쓰고 있다면

그래서 할 일이 많아서 루카스 이야기를 할거야 우리가 갈 곳에 대해서 루카스 버그 스톰 : 네 한 메모, Android Studio 32 미리보기가 필요합니다

Canary 14가 이것을 사용했습니다 그리고 그것을 다운로드하고 사용해보십시오 거기에 좋은 것들이 많이 있습니다 그래서 이것은 분명히 될 것입니다 아키텍처 구성 요소의 핵심 요소 그러나 JetPack 전반적인

따라서 JetPack을 사용하여 우리가 취한 동일한 접근 방식을 취할 것입니다 아키텍처 구성 요소 빈 종이처럼, 우리는 Android 개발자 경험이 무엇을 원합니까? 그리고 훨씬 더 광범위하게 적용하십시오 탐색은 결국 일부가 될 것입니다 기본 경험의

그래서 우리가 안정되면 새로운 프로젝트를 만듭니다 Android Studio에서 기본적으로 네비게이션 편집기에서 시작하고 꽤 위대한 세상이어야합니다 JetPack을 지금 사용해 볼 수 있습니다 지금 당장은 훨씬 좋은 소개가 있습니다 안드로이드 개발의 모든 주요 부분이 무엇인지

따라서 램프를 사용하는 것이 훨씬 쉽습니다 그리고 우리는 시간이 지남에 따라 이야기를 확대하기를 고대하고 있습니다 당신이 갈 수있는 더 많은 대화가 있습니다 Android KTX 및 페이징에서 페이징, 특히, 정말 멋진 깊은 라이브러리입니다 너와 함께 묶어서 너를 위해 많은 것을 해 JetPack의 다양한 아키텍처 구성 요소 네가 그렇게한다면 나는 너를 격려한다

당신보다 더 많은 것들을 가진 목록보기 주어진 시간에 기억을 유지할 수있다 이 페이징 토크에 정말로 가고 싶습니다 그리고 우리는 당신의 피드백을 원합니다 먼저이 세션에 대한 귀하의 의견을 기다리고 있습니다 그러나 더 중요한 것은, 우리는 여러분의 의견을 원합니다

네비게이션 구성 요소에 우리가 알파에 착수하는 이유는 우리가 이렇게 생각하기 때문이 아닙니다 정말로 시험받지 못했고 시험받지 못했습니다 우리는 실제로 이것을 시험해 보았습니다 하지만 우리는 알파 우리는 많은 피드백을 받기를 원하기 때문에 API를 잠그기 전에 커뮤니티의 베타로 전환하십시오

그러니 당신이 그것을 시험해 볼 수있는 좋은 시간입니다 당신에게 맞는 것을 알려주십시오 무엇이 우리에게 알려주지 않고 직접 우리와 대화 또는 우리의 공공 이슈 추적자에 우리는 당신의 의견을 듣고 싶습니다 귀하의 의견은 정말 중요했습니다

이 여행의 모든 ​​지점에서 확실하게 우리가 올바른 문제를 공격하고 있다고 올바른 솔루션을 제공합니다 그러니 시험해 보시고 어떻게 생각하는지 말해주십시오 그리고 고마워 [박수 갈채] [음악 재생]

The Components of Material Design (Android Dev Summit '18)

[음악 재생] CAMETON KETCHAM : 헤이 제 이름은 카메론 케 um입니다

나는 Material Design Components 팀 또는 MDC Android 그리고 뉴욕시 사무실에서 일합니다 GAUTHAM SAJITH : 내 이름은 Gautham Sajith입니다 MDC Android에서도 작업합니다 저는 샌프란시스코에 있습니다

CAMERON KETCHAM : 그리고 우리는 조금 이야기 할 것입니다 머티리얼 디자인 컴퍼넌트 (Material Design Components)와 앱 테마에 대해 알려드립니다 이렇게 빨리, 우리가 토론 할 것입니다 Material Design의 간단한 역사, Material Theming 머티리얼 디자인 구성 요소를 사용하여 색상, 유형, 및 Shape 하위 시스템, 이러한 하위 시스템 적용 방법 우리의 석방 과정으로, 그리고 조금 기여하고 있습니다 이렇게 빨리, 재료 디자인 도서관의 간단한 역사

머티리얼 디자인은 2014 년에 처음 발표되었습니다 그리고 디자인 도서관도 없었습니다 그런 다음 1 년 후인 2015 년 I / O에서 Google이 마침내 디자인 지원 라이브러리를 발표했다 재료에 대한 많은 코드를 가져 오는 데 도움이되었습니다 다음을 포함한 특정 구성 요소에 대한 설계 탐색 드로어, 플로팅 동작 버튼, 스낵 바, 등등

그러나 아직도 그다지 그렇게 많지 않았습니다 그리고 올해 I / O에서 우리는 Material Theming을 발표했습니다 보다 큰 엔지니어링을 목표로 그것 뒤에 팀 따라서 우리는 많은 구성 요소를 구현하는 중입니다 Material Design spec을 기반으로합니다

그래서 재료 Theming Material Design의 원래 문제점은 무엇입니까? 글쎄, 그것은 디자인 시스템의 훌륭한 초기 버전이었습니다 그것은 많은 경우에 효과가있었습니다 그러나 브랜드의 표현으로는 부족했다 그래서 여기에 이메일 앱의 예가 있습니다

다른 모든 앱과 비슷합니다 Material Design을 사용합니다 이메일 앱이라고해도 과언이 아닙니다 내 의견으로는 여기에 사물의 예가 있습니다

Material Theming으로 할 수있는 일 앱을 눈에 띄게 만들 수 있습니다 그리고 우리는 약간의 세부 사항에 들어갈 것입니다 이렇게 빨리, 어떻게 theming 작동합니까? 기본적으로 Material Theming은 시스템입니다 우리가 당신을 돕기 위해 디자인 한 당신은 당신의 애플 리케이션을위한 독특한 디자인 글꼴, 색상 등의 몇 가지 사항을 결정하면됩니다

모양 등등 그리고 이것은 사용할 수있는 Material Design 스케치 플러그인입니다 디자인 아이디어를 만드는 데 도움이 될 것입니다 앱을 개발하는 데 사용할 수 있습니다 해당 도구에 대한 자세한 정보는 material

io를보십시오 우리가 한 몇 가지 물질 연구가 있습니다 Material Theming의 예를 보여줍니다 그리고 당신은 그것들 모두가 아주 다르게 보임을 볼 수 있습니다 그리고 이것들이 material

io에 훨씬 더 많이 있습니다 GAUTHAM SAJITH : 멋지다 이제 어떻게해야하는지에 대해 이야기 해 봅시다 자료를 사용하여 실제로 시작하기 구성 요소 라이브러리 이 시나리오를 상상해보십시오

이 이야기를 통해 몇 번 돌아 오십시오 당신은 당신이 만든 상당히 평범한 앱을 가지고 있습니다 바로 직선 AppCompat에서 그리고 팀 메이트가이 재 설계를 요청합니다 머티리얼 디자인 스펙을 사용합니다

그럼 어떻게 할 건데? 따라서 귀하는 지원 라이브러리 디자인에 대해 잘 알고있을 것입니다 패키지,이 v28 버전, 우리 도서관을 사는데 사용할 수 있습니다 그리고 이것을 사용할 수 있습니다 그러나 더 이상 업데이트되지 않습니다 따라서 conductgoogle

android 소재를 사용해 보셔야합니다 라이브러리, 안드로이드 X 주목할 사실 하나 행동 안드로이드 지원 및 행동을 사용할 수 없습니다 Google Android 패키지가 함께 제공됩니다

따라서 Android X로 전환하려면, 개발자에게 멋진 리팩터링 도구가 있습니다 안드로이드 사이트 그러면 앱을 리팩터링하는 데 도움이됩니다 그런 다음해야 할 일은 우리의 Material Themes를 사용하고 있습니다 그래서 우리는 기존에 상응하는 주제를 제공합니다 AppCompat 테마

그리고 이러한 테마는 다양한 속성을 제공합니다 모양, 색상, 유형 테마 중 일부를 수행하는 데 도움을줍니다 우리가 얘기 할거야, 사용할 수있는 기본 스타일은 물론 모든 구성 요소에 걸쳐 예를 들어, 귀하의 테마가 AppCompat Light에서 확장되면, 전환하기 만하면됩니다 themematerialcomponents

light 그리고 당신은 우리의 모든 속성을 가져야합니다 뿐만 아니라 우리의 모든 구성 요소 스타일 제가 언급했듯이, 많은 새로운 속성들이 있습니다 우리가 소개 할 것입니다

우리 구성 요소를 사용하려고하면 이러한 속성이 정의되지 않은 경우, 당신은 런타임에 Theme Enforcement Error를 얻게 될 것입니다 스타일은 테마에서 이러한 속성을 찾기가 쉽습니다 그리고 그것들이 존재하지 않는다면 그것은 런타임에 충돌 할 것입니다 그래서 이것에 대한 해결책은 우리의 테마를 사용하는 것입니다 그것은 당신에게 모든 속성을 줄 것이다

전체 주제로 전환 할 준비가되지 않았다면 꽤 아직 – 당신은 속성을 얻고 싶습니다 스타일들 중 – Bridge 테마라고 불리는 것을 사용할 수 있습니다 그리고이 브릿지 테마가하는 일은 그들이 당신에게 제공하는 것입니다 스타일링을 수행하는 데 필요한 모든 속성 그러나 그들은 당신에게 어떤 기본 스타일도주지 않습니다

따라서 구성 요소 스타일을 하나씩 사용하도록 선택할 수 있습니다 전환 할 준비가되었습니다 예를 들어 Bridge 테마에서 확장하는 경우, BottomAppBar 스타일을 사용하도록 선택하려는 경우, 기본 BottomAppBar 스타일을 정의 할 수 있습니다 당신의 주제에 그런 다음 모든 BottomAppBars 머티리얼 구성 요소 스타일을 얻습니다

CAMERON KETCHAM : 이제 우리는 단지 몇 가지 새로운 구성 요소에 대해 조금 이야기 할 것입니다 Material Theming을 통해 우리는 몇 가지 새로운 것을 소개했습니다 BottomAppBar와 같은 BottomAppBar는 탐색 및 키 동작을 표시합니다 모바일 화면 하단에 있습니다 한 손으로 만하는 사람들에게 좋은 것은 무엇입니까? 엄지 손가락을 사용하여 장치와 상호 작용합니다

꽤 간단합니다 코디네이터 레이아웃을 사용하여 BottomAppBar 간의 모션 플로팅 액션 버튼이 있습니다 여기서는 BottomAppBar에 대한 간단한 XML 만 있습니다 할 수있는 일 중 몇 가지 FAB의 수직 오프셋을 설정합니다 FAB 크래들 여백을 설정할 수도 있습니다

FAB와 BottomAppBar 사이의 거리입니다 둥근 모서리 반경뿐만 아니라, 이는 BottomAppBar가 FAB를 충족시키는 모서리입니다 스크롤 할 때 BottomAppBar 숨기기를 사용할 수 있습니다 그리고이 정렬 모드를 설정할 수도 있습니다 자동으로 FAB에 애니메이션을 적용합니다

네비게이션하는 경우 유용합니다 다른 조각이나보기 사이 시각적 인 차이를주고 싶다 서로 다른 화면 사이 이미 툴바를 사용하고 있다면, BottomAppBar를 사용하면 쉽게 시작할 수 있습니다 도구 모음에 대한 지원 작업 표시 줄을 설정하는 경우, BottomAppBar 대신 설정하십시오

그리고 다른 모든 것은 같은 방식으로 작동합니다 그러나 On Menu Item을 사용할 수도 있습니다 Listener를 직접 클릭하십시오 BottomAppBar에 있습니다 GAUTHAM SAJITH : 우리는 또한 버튼의 개조 된 버전 소재 버튼 호출

스타일을 훨씬 단순하게 만들기 위해 개편되었습니다 따라서이 Material Button 구성 요소를 XML에 넣으면, 스타일이 지정된 버튼을 얻을 수 있습니다 그러나 전체 테마를 사용하는 경우, 실제로 XML에서 Button 태그를 사용할 수 있습니다 그리고 우리는 Custom View Inflation이라고 불리는 것을합니다 이 태그는 재료 버튼으로 자동 팽창됩니다

꼬리표 그런 다음 비활성화 된 상태를 설정할 수 있습니다 이 버튼에 그리고 모든 주들이 이관 할 것입니다 색상이 전송됩니다

이 버튼에 아이콘을 설정할 수 있습니다 아이콘 속성뿐만 아니라이 아이콘을 설정하면 스타일 그리고이 스타일은 선택 사항입니다 그러나 그것은 패딩을 약간 조정할 것입니다 단추에 대한 시각적 균형을보다 균등하게 달성 아이콘이있을 때

속성을 사용하여 아이콘 크기를 변경할 수 있습니다 개요 단추 스타일을 설정할 수 있습니다 우리가 사용하는 기본 스타일 중 하나입니다 이 헤어 라인 윤곽선 단추를 얻으려면이 단추를 제공하십시오 버튼의 배경색을 설정할 수 있습니다

배경 색조 속성을 설정합니다 여기에 색상 상태 목록을 제공 할 수 있습니다 따라서이 경우 버튼이 활성화되어 있으면 보라색으로 표시됩니다 사용 중지되면 회색으로 표시됩니다 다른 속성을 설정할 수 있습니다

획 너비, 획 색상, 코너 반경을 사용하여 스타일을 지정합니다 아이콘 전용 버튼 만 만들 수도 있습니다 이 경우 아이콘을 설정합니다 아이콘 패딩을 0으로 설정하는 것뿐만 아니라, 버튼의 중앙에 아이콘이 표시됩니다 또한 콘텐츠 설명을 설정하고 있습니다

이 버튼에 그래서 텍스트가 없으므로 접근성 측면에서, 콘텐츠 설명을 설정해야합니다 그래서 사람들은 버튼의 내용을 알게 될 것입니다 버튼에 리플 색상을 설정할 수도 있습니다 예를 들어 여기에 자주색 리플을 설정하면, 버튼에 적용됩니다

색상 상태 목록이나 16 진수 값을 여기에서 설정할 수 있습니다 보시다시피 버튼 위에 보라색 잔물결이 있습니다 하지만 알파가 이미 내재되어 있기 때문입니다 리플에 녹색 버튼 상단에 자주색 리플이 있습니다

그리고 이들은 몇 가지 예입니다 이 라이브러리에서 제공하는 다른 구성 요소 중 우리는 여러 종류의 칩을 가지고 있습니다 채우기 및 개요가있는 텍스트 필드가 있습니다 스타일, 암호 표시 및 숨기기 기능 및 문자 계수기 그런 다음 매우 맞춤 설정할 수있는 탭 레이아웃이 있습니다

게다가 CAMERON KETCHAM : 좋습니다 이제는 테마에 대해 조금 있습니다 MDC는 Android의 기본 테마에 크게 의존합니다 테마 및 스타일이 작동하는 방식을 간단하게 다시 살펴 보겠습니다

XML의 뷰에 직접 적용된 것은 먼저 사용됩니다 여기에서 속성을 변경하면 단일보기를 변경하십시오 스타일을 업데이트 할 수도 있습니다 따라서 스타일에 속성을 설정하면 이 스타일은이 스타일을 사용하는 모든보기에 영향을줍니다 스타일에 정의되지 않았거나 스타일이 설정되어 있지 않은 경우, 기본 스타일로 돌아갑니다

그래서 여기에서, 당신이 길을 바꾸고 싶다면 전체 구성 요소 그룹이 보입니다 기본 스타일을 설정할 수 있습니다 마지막으로 속성이 다른 곳에 정의되지 않은 경우, 테마를 살펴볼 것입니다 Material Theming이 정상적으로 작동하는 방식 최상위 수준의 속성 집합이 있습니다 당신은 타이포그래피, 색, 모양 등등

또한 모든 구성 요소의 기본 스타일입니다 그러나 더 세분화 된 제어가 필요한 경우, 당신은이 층들 중 어느 곳에서나 연결할 수 있습니다 단일보기의 색상 만 변경하고, 또는 특정 구성 요소 전체의 색상 만 표시 할 수 있습니다 여기에 우리의 Chip 스타일 라이브러리 예제가 있습니다 테마 속성을 참조하는 몇 가지 값을 정의합니다

그리고이 디자인의 힘은 사실에서 나온 것입니다 우리 도서관의 다른 스타일들이 참고할 수있는 것들 이 같은 속성 여기에 Button의 예제가 있습니다 그리고 이것들 둘 다 같은 모양의 외관을 가지고 있습니다 이것은 작은 컴포넌트 모양 모양입니다

즉, 우리가 룩을 업데이트하고자한다면 이 모양에 대한 우리의 응용 프로그램의 느낌 – 이 작은 구성 요소들에 대해서는 우리가해야 할 모든 것 이 속성을 테마의 한 위치에서 업데이트합니다 그리고 우리는 당신에게 그것을 조금하는 방법의 예를 보여줄 것입니다 각 테마 속성의 효과는 무엇입니까? 불행히도, 그것은 완전히 간단하지 않습니다 우리는 의미있는 방식으로 테마 속성을 적용하려고합니다 그러나 그것은 확실히 가능합니다

서로 다른 색상의 값을 선택합니다 같이 잘 어울리지 않을 수도 있습니다 아마 각 구성 요소에 대해 materialio를 확인해야합니다 어떻게 반응하는지 볼 수 있습니다

그러나 가능한 또 다른 간단한 것은 – 당신이 할 수있는 또 다른 간단한 해결책, 잠재적으로 디버그 테마를 만드는 것입니다 엉뚱한 값을 다른 속성으로 설정합니다 그리고 사물이 어떻게 보이는지보십시오 예를 들어 BottomAppBar 페이지가 있습니다 material

io 사이트에 있습니다 컨테이너 자체가 표면이라는 것을 알 수 있습니다 아이콘은 On Surface입니다 그리고 우리는 어떤 속성들에 대해서 이야기 할 것입니다 밖을 내다 볼 수있을뿐만 아니라 수정할 수 있습니다

다음 섹션에서 따라서 서브 시스템을 테마로합니다 우리는 현재 3 개의 테마 서브 시스템 인 Type, Color, 및 모양 그리고 이것들은 당신이 개발자로서, 앱을 테마로 조정해야합니다 다행히도 대부분의 사람들은 텍스트 출현에 익숙합니다

그러나 우리는 Material Theming, 테마 속성을 사용하여이 텍스트를 참조합니다 형세 다음은 툴바 예제입니다 이는 스타일이 아닌 Headline Six 속성을 사용합니다 직접

그리고 Body 1 속성을 사용하는 사본이 있습니다 이들은 우리가 정의한 유형 속성입니다 그래서 당신이 당신의 주제에서 이것들을 오버라이드한다면, 앱의 스타일과 모양을 설정할 수 있습니다 색상은 또 하나입니다 그리고 아마도 AppCompat Color에 익숙 할 것입니다

기본 및 색상 악센트 Material Theming의 경우, 우리는 더 넓은 범위의 색상을 가지고 있습니다 색상을보다 잘 제어 할 수 있습니다 앱의 다른 부분에 대해 확장 된 팔레트 색상의 의미 론적 이름입니다 Color Theming에서 작동합니다

맨 위에는 기본, 기본 변형, 2 차, 2 차 변형 그것들은 모두 브랜드 컬러입니다 그것들은 당신이 일반적으로 주제가되어야하는 것들입니다 앱 스타일 배경, 표면 및 오류 색상도 있습니다

스타일을 지정할 수 있지만 꼭 그렇게 할 필요는 없습니다 그리고 나서, On Primary, On Secondary– 색상의 변형에 관한 것 – 그들이 그릴 때 접근 가능해야한다 다른 색상 위에 그래서 예를 들어, On Primary는 원색 위에 그려 질 것입니다 따라서 위에 표시된 텍스트가있는 경우 기본 배경색은 기본 색상이어야합니다

이것들은 우리가 정의한 색상 속성입니다 새로운 것을 많이 볼 수 있습니다 우리는 AppCompat에서 나온 일부를 재사용하려고했습니다 그리고 우리는 우리가 사용하는 안드로이드 컬러 배경을 가지고 있습니다 그냥 일반 Android입니다

그 속성의 버전 모양은 당신이 테마로 할 수있는 또 다른 하위 시스템입니다 그리고 모든 것은 MaterialShapeDrawable에서 발생합니다 그래서 우리는 MaterialShapeDrawable 형상 가능한 구성 요소의 배경으로, 단추, 카드, FAB, BottomAppBar, BottomSheet, 칩, 등등 그리고 그것이 작동하는 방식은 모서리 및 코너 처리입니다

그래서 우리는 가장자리와 모서리 처리가 있습니다 둥근 모서리와 절삭 모서리에 대해 정의 된 거의 모든 버튼 또는 상호 작용 가능한 구성 요소입니다 당신이 찾을 수있는 그러나 당신은 언제나 당신 만의 것을 만들 수 있습니다 여기 코 틀린 코드의 예가 있습니다 둥근 모서리 처리를 정의합니다

그리고 그것을 MaterialShapeDrawable에 설정합니다 모든 것에 둥근 모서리를 적용하는 것 그리고 XML 버전도 있습니다 그래서 XML로하고 싶다면 우리는 Shape Appearance라는 새로운 속성이 있습니다 그리고 Text Appearance와 비슷합니다

여기에있는 속성은 코너 패밀리와 모서리입니다 크기 그리고 이것은 반경이 24dp 인 둥근 모서리로 설정됩니다 그리고 개별 구석을 무시할 수 있습니다 여기서는 왼쪽 상단을 재정의하는 것입니다

자르고 오른쪽 하단 구석에 구석 크기가 0입니다 XML에서도 동일한 작업을 수행 할 수 있습니다 한 가지주의해야 할 것은 우리가 Shape Appearance 여기에 오버레이, 기본적으로 동일한 것입니다 우리는 단지 속성을 정의한다 우리가 재정의하려는 따라서 테마 오버레이와 비슷합니다

즉, 소재가 버튼 자체는 기본적으로 모양 모양을 이미 가지고 있습니다 그리고 여기, 우리는 단지 좌상단을 설정하고 있습니다 오른쪽 상단 모서리가 0이되도록 dp로 자릅니다 다른 모든 것은 스타일에서 상속됩니다 버튼의 Material Theming의 핵심 아이디어 중 하나는 앱에 일관성을 부여합니다

그래서 우리는 이러한 모양 매핑을 정의했습니다 이들은 서로 다른 구성 요소 그룹입니다 앱의 일관성있는 모양을 유지하는 데 도움이 될 수 있습니다 모양을 통해 표면을 연결하여 느낌을 느낄 수 있습니다 따라서 작고, 중간이고, 큰 구성 요소가 있습니다

그리고 이것들은 당신이 당신의 테마에 설정할 수있는 속성입니다 따라서 모든 작은 구성 요소를 다시 정렬하려면 잘라낸 오른쪽 구석이나 다른 것을 가지고 있다면, 그렇게 할 수 있습니다 여기에 내가 말했던 것처럼, 우리는 작은 컴포넌트 스타일을 재정의하고 있습니다 그래서 우리는 작은 외양을 재정의했습니다 테마의 작은 컴포넌트 모양 모양 우리 스타일로

그리고 여기, 우리는 우상을 세울 것이다 그리고 우리는 여기에 부모를두고 있습니다 그래서 다른 모든 것을 상속 받게됩니다 다른 부분의 둥근 모서리 그림자는 우리가 언급하고 싶은 것입니다

볼록한 모양에 대해 기본 표고가 지원됩니다 API 21 이상을위한 롤리팝 사용 하지만 우리는 그림자를 모두 오목한 15의 API로 백 포트하고 있습니다 일반적인 경우의 볼록한 모양, 둥근 모서리 또는 절단 모서리뿐만 아니라 BottomAppBar의 경우 이것은 내부에 컷 아웃이 있기 때문에, 네이티브 쉐도우를 얻지 못할 것입니다 그래서 우리는 그라디언트로 그림자를 가짜로 만듭니다 GAUTHAM SAJITH : 이제 우리는 우리의 테마 서브 시스템에 대해 조금 들었습니다

앱에 실제로 적용하는 방법을 살펴 보겠습니다 다시이 시나리오로 돌아옵니다 이 AppCompat 앱을 적용하고 싶다고 가정 해 보겠습니다 이러한 테마 하위 시스템 중 그래서 우리는 무언가를 건설 할 것입니다

저렇게 조금 생겼어 그리고 분명히, 자신의 앱을 만들 때, 이보다 훨씬 더 아름답고 응집되어 보일 것입니다 그러나 우리는 우리만큼 많은 손잡이를 조정하고 있습니다 우리가 만든 기능의 일부를 보여줄 수 있습니다 그래서 당신이해야 할 첫 번째 일은 AppCompat Light No Action Bar 테마를 사용하는 경우, 머티리얼 구성 요소 테마로 전환 할 수 있습니다

이 경우 Bridge 테마를 사용하고 있음을 알 수 있습니다 이러한 구성 요소를 사용하기로 선택하기 때문에 하나씩 하지만 일반적으로 전체 테마, 일반 테마, 다리를 시험해보기 전에 먼저 어떻게 보이는지 보아라 테마 그러니 가장 먼저하는 일은 당신은이 테마 색 속성을 설정합니다

그래서 당신이 이미 알고있는 기존의 것들 중 일부 색상 1 차 및 색상 2 차입니다 그것들은 여전히 ​​존재합니다 그런 다음 새로운 테마 색 속성 중 일부 (예 : 색상) 1 차, 2 차, 컬러 서피스 및 컬러 서페이스 또한 설정됩니다 이 Color Secondary가 실제로 어디에도 나타나지 않습니다 귀하의 애플 리케이션에 아직,하지만 그렇게됩니다

다음으로 우리가하고 싶은 일은 머티리얼 버튼을 얻는 것입니다 그래서 우리는 AppCompat 버튼을 사용하기 전에 그리고 나서 테마에 Material Button 스타일을 설정하면, 모든 버튼이 머티리얼 버튼으로 바뀌어야합니다 XML 태그를 변경할 때 앞에서 언급했듯이, 전체 테마를 사용하고 있다면, 이 인플레이션은 자동으로 발생합니다 따라서 실제로이 XML을 전혀 변경하지 않아도됩니다

우리는 다른 기본 스타일들을 가지고있다 우리가 여기에 제시 한 것 모든 구성 요소에는 기본 스타일이 있습니다 테마로 설정할 수 있습니다 일반적으로 구성 요소 이름과 스타일에 불과합니다

예를 들어, 카드 스타일을 설정하려면, 테마에 Material Card View Style을 설정합니다 그리고 나서, 우리는 카드보기를 변경해야합니다 이 경우 XML의 Material Card View로 이동하십시오 그리고 나서 우리는 몇 가지 속성을 적용 할 것입니다 이 카드들에

예를 들어, 카드 높이, 스트로크 색상, 및 획 폭 그리고 그것은 모든 카드에 표시됩니다 기본 스타일을 설정하기 때문입니다 모든 카드는이 기본 스타일을 봅니다 그리고 기지를 바꾸고 싶다고 해

모든 버튼의 스타일 당신은 당신 자신의 Button 스타일을 정의하고 그것의 부모를 설정할 것입니다 기본 스타일 중 하나 인 아웃 라인 버튼으로 그러면 모든 단추가 개요 단추로 변경됩니다 이제 모든 버튼에 모양 테마를 적용 할 수 있습니다 그래서이 모양을 정의 할 것입니다

모양 모양 버튼 스타일 그리고 그 버튼 스타일에서는 오른쪽 모서리를 자르고 왼쪽 모서리를 설정하려면 반올림 그리고 코너 크기를 설정합니다 그리고 이제, 당신은이 화살 모양의 버튼을 가지고 있습니다 또한 Shape Appearance Overlay를 사용하여이 작업을 수행 할 수 있습니다

버튼에는 기본적으로 둥근 모서리가 있기 때문입니다 당신은 둥근 것을 설정할 필요가 없습니다 왼쪽 모서리 따라서 모양 모양 오버레이를 사용하는 경우, 당신은 변화하고있는 것을 설정할 수 있습니다 정상적으로 적용됩니다

그리고 나서, 우리는 아이콘 버튼을 갖고 싶다고 말합니다 이 아이콘 버튼 스타일을 정의 할 수 있습니다 패딩과 분 너비를 원하는대로 설정하십시오 그리고 이것을 XML로 직접 Button에 적용하고, 아이콘 및 컨텐트 설명을 설정할 수 있습니다 그리고이 공유 아이콘 버튼이 있습니다

그 공유 텍스트 버튼 BottomAppBar로 전환 할 수도 있습니다 그래서 BottomAppBar를 설정해야합니다 당신의 주제에 스타일 그런 다음 XML 레이아웃에서 최상위 앱 표시 줄을 제거하십시오

이 BottomAppBar를 여기에 추가하십시오 플로팅 액션 버튼을 추가 할 수도 있습니다 떠있는 동작을 추가하여이 BottomAppBar에 넣습니다 버튼을 레이아웃에 추가하십시오 그런 다음 Layout Anchor를 설정합니다

BottomAppBar의 ID를 가리키는 특성 이 FAB에는 AppCompat의 청록색이 있습니다 우리가 기본 부동 작업을 설정하지 않았기 때문입니다 버튼 스타일 한 번 설정하면 이제 그걸 볼 수 있습니다 컬러 보조 및 컬러 보조를 사용합니다

그리고 리플 효과도 있습니다 그런 다음 우리 카드의 내용에 대해 텍스트 스타일을 적용 할 수 있습니다 모든 텍스트를 Color On Surface, 이전에 있었던 것보다 우리는 소재 테마를 사용하려고합니다 오버레이, 잠시 후에 얘기하겠습니다

하지만이 소재의 테마 오버레이는 거의 해당 구성 요소의 모든 내용에 대한 테마를 설정합니다 따라서이 경우에는 Color Primary라는 텍스트를 설정합니다 Tertiary에서 텍스트의 색을 설정합니다 그래서 소재 테마 오버레이, 당신 Android 테마에 대해 들어 보셨을 것입니다 그것은 뷰의 하위 섹션을 스타일링 할 수있는 방법입니다

계층 그리고 이것의 한 가지 일반적인 사용법은 스타일에 있습니다 앱에서 어두운 색의 툴바라고 말하면됩니다 Android 테마의 단점은 기본 스타일에서는 작동하지 않습니다 예를 들어, 모든 카드 스타일을 지정하려면, 당신은 정말로 안드로이드 테마를 설정할 수 없습니다

따라서 소재 테마 오버레이는 속성입니다 우리가 정의한 것은 구성 요소가 지원하는 것입니다 기본 스타일로 작동합니다 그래서 이것을 기본 스타일로 설정할 수 있습니다 귀하의 구성 요소

그리고 구성 요소의 하위 뷰를 주제로 삼으십시오 마지막으로 TextAppearance 테마를 적용 해 보겠습니다 이전에는 제목에 하드 코딩 된 텍스트 모양이있었습니다 스타일 이제 우리는 새로운 TextAppearance로 전환 할 것입니다

속성 그리고 비슷하게, 본문도 마찬가지입니다 그리고 나서, 우리는 이것을 약간의 스타일에 적용 할 수 있습니다 예를 들어, Headline Six 예를 들어 코믹 샌즈가되기 위해서는 변경할 수 있습니다 앱에서 Headline Six를 사용하면 다음과 같이 보입니다

그렇다면 왜이 일을하는 데 문제가 있습니까? 최상위 속성을 사용하는 데 어려움을 겪는 이유 당신의 스타일 전반에 걸쳐? 이유가 뭐야? 그리고 일반적으로 우리는 이렇게합니다 앱 전체를 스타일링 할 수 있기를 원한다 이러한 최상위 속성 예를 들어, 팀원이 당신에게 다가 갔다고 말하십시오 "어이, 우리 브랜드의 색깔이 바뀌고있다 그래서 실제로 우리는이 블루스 대신이 적갈색을 원합니다

우리가 가진 것 "이라고 말했다 당신이해야 할 일은 이러한 최상위 색상 속성 중 하나입니다 그리고 당신의 전체 앱이 다시 열립니다 마찬가지로, 어두운 테마 또는 가짜 어두운 테마를 원한다면 일종의, 당신이해야 할 일은 변화입니다 이 두 가지 다른 색상 속성

그리고 구성 요소는 모두 적절하게 응답해야합니다 그리고 다른 모양의 앱이 있습니다 CAMERON KETCHAM : 이제 우리는 조금 이야기 할 것입니다 맞춤 구성 요소 및 만든 일부 구성 요소에서 스타일을 사용할 수 있습니다 방법에 관하여 진짜로 불가사의 한 아무것도 우리 구성 요소는 테마를 사용합니다

모든 기본적인 Android 테마입니다 따라서 구성 요소에서도 사용할 수 있습니다 기본 스타일을 만들어야합니다 그 기본 스타일 속성 전달하기 생성자에 입력하고 스타일 속성 가져 오기를 사용하십시오 그럼 그걸 살펴 봅시다

여기에는 테마 및 일부 속성에 대한 정의가 있습니다 여기에서는 기본 스타일 속성을 만듭니다 그것을 우리의 테마로 설정하십시오 그래서 우리는 내 사용자 정의보기 스타일을 가지고 있습니다 그리고 우리는이 widget

mycustomview 스타일로 설정합니다 우리는 우리 테마의 어딘가에서 정의했습니다 따라서 이것은 사용하는 모든 구성 요소가 이 내 사용자 정의보기 – 또는 이러한 내 사용자 정의보기는 기본적으로이 스타일을 사용합니다 또한 스타일을 지정할 수 있습니다 몇 가지 다른 속성

그리고 생성자에서 이들을 사용할 필요가 있습니다 다음은보기에 대한 생성자의 예제입니다 여기에서는 기본 스타일을 사용합니다 우리는 전에 만들었습니다 그리고 우리는 이것을 여기에 전달하여 그 밖의 아무것도 설정되지 않은 경우 기본 스타일을 선택할 수 있습니다

그런 다음 스타일 속성 가져 오기를 시작합니다 그리고 우리가 방금 만든 스타일러스를 전달합니다 원래의 스타일 속성뿐만 아니라 생성자에 전달됩니다 마지막으로 대체 스타일 인 속성을 찾기위한 최후의 수단으로 사용될 수 있습니다 그리고 나서, 그것들을 읽으십시오

이것이 구성 요소가 작동하는 방식입니다 그래서 당신은 분명히 스스로 할 수 있습니다 또한 사용 사례에 맞게 시스템을 확장하십시오 경우에 따라 더 많은 속성이 필요한 경우처럼, 당신은 그것들을 분명히 추가 할 수 있습니다 그것은 당신의 부분에 조금 더 많은 작업일지도 모른다

스타일을 업데이트해야하기 때문에 당신이 가진 모든 구성 요소 이러한 속성을 참조하기 위해 사용하는 경우, 우리가 작성한 구성 요소 그것들을 참조하지 않을 것입니다 그러나 당신이 그것을 필요로한다면, 당신은 확실히 그것을 할 수 있습니다 다음은 속성의 예입니다 그냥 만들어서 자신의 스타일로 정의하십시오 그런 다음 참조하십시오

테마에 정의한 다음 그것을 스타일이나 다른 곳에서 참조하십시오 그리고 지금, 우리의 과정에 대해 조금 있습니다 우리는 몇 가지 릴리스를했습니다 10은 7 월에 나갔다 – 7 월 20 일에 삭제되었다

그리고 그것은 잠시있었습니다 그러나 이제 Android X Jetpack 리팩터링 마무리로, 우리는 더 자주 석방 할 수 있습니다 지원 라이브러리에 묶여 있지 않기 때문입니다 그래서 우리는 우리의 방출을 가속화하려고 노력하고 있습니다 그리고 마침내 우리는 1

1 알파 1 10 월 31 일 잘라 그리고 우리는이 일을 더 자주하려고 노력하고 있습니다 적어도 한 달에 한 번 11 Alpha는 타입 테마, 컬러 테마, 우리가 말한 다크 테마 이것에 대해, 많은 버그 수정과 성능 향상 개량

향후 출시 될 예정인 내가 말했던 모양 주제를 가지고있는 것 11 Alpha에서는 Shape 테마 서브 시스템이 존재하지만, 실제로 구성 요소 중 어느 것도 응답하지 않습니다 그 주제 속성에 아직 그러나 다음 릴리스에서는 반드시 있어야합니다

우리는 대화 상자, 하단 시트 메뉴, 그런 종류의 것들이 모두오고 있습니다 그리고 문제를 제기하고 제출하는 한, GitHub은 코드가있는 곳입니다 따라서 당신이보기에 흥미있는 경우에, 그냥 GitHub에가 모든 코드를 살펴볼 수 있습니다 그것은 오픈 소스입니다

또한 GitHub에서 지침을 확인할 수 있습니다 버그 리포트를 제출하는 방법 우리는 무엇이 가장 잘 작동하는지 알아 내려고 노력 중입니다 지금 당장은 버그보고를하고 있습니다 이 issuetracker

google buginizer 구성 요소 그러나 우리는 다른 방법을 찾고있다 우리가 작업하고있는 것을 더 분명하게하기 위해서입니다 커뮤니티와 더 많은 것을 통합하려고합니다 여기 몇 가지 리소스가 있습니다

Materialio 사이트는 특히 Android 섹션에서 훌륭합니다 확실히 불화에서 우리를 확인하십시오 우리와 채팅하는 데 관심이 있다면, 또는 우리가 홍보를하도록 돕는 데 관심이 있습니다 – 무엇이든을위한 아이디어 와서 우리와 채팅하십시오

Stack Overflow에 태그가 있습니다 따라서 구현에 대해 질문이있는 경우, 너는 거기에 무엇인가 물어볼 수있다 우리는 그것을 지켜보고 있으며, 우리는 이에 응할 것입니다 그리고 우리는 몇 개의 코드 랩을 가지고 있습니다 이 GitHub 페이지에서 해당 코드 랩에 대한 링크를 찾을 수 있습니다

그리고 그것은 꽤 많이 있습니다 와줘서 고마워 GAUTHAM SAJITH : 감사합니다 [박수 갈채] [음악 재생]

Deep Dive into Android Studio Profilers (Android Dev Summit '18)

[음악 재생] 안녕, 모두들 Android Studio Profilers에 대해 자세히 알고 싶습니다

세션 나는 데이비드 허먼이야 SHUKANG ZHOU : 저는 Shukang Zhou입니다 우리는 프로파일 러의 엔지니어입니다 Android Studio의 팀 그래서 우리가 실제로 그것에 들어가기 전에, 우리는 당신에게 모든 개요를주고 싶었습니다

이 이야기에서 무엇을 기대할 것인가 높은 개관에서 오는 것의 종류 대신에, 대신에 우리는 좀 더 집중적으로 집중할 것입니다 우리가 당신이 더 나은 것을 얻을 수 있다고 생각하는 몇 가지 특징들 모든 코드베이스에서 처리하십시오 우리는 또한 길을 따라 몇 가지 팁과 트릭을 버릴 것입니다 우리는 실제 응용 프로그램 인 Santa Tracker를 프로파일 링합니다

Santa Tracker는 Google의 앱입니다 사용자는 자신의 코스에서 산타를 추적 할 수 있습니다 크리스마스 이브에 전세계 이 앱에는 게임과 몇 가지 다른 추가 기능이 포함되어 있습니다 그들은 매년 새로운 앱을 출시합니다

우리는 다음 중 하나를 사용하려고합니다 GitHub에서 공개적으로 사용 가능합니다 마지막으로, 프로파일 러에 관한 두 가지 대화를 말씀 드리고 싶습니다 Google I / O에서 올해 한 번, 더 높은 수준의 프로파일 러를 말한, Android Studio의 새로운 기능 소개 프로파일 러 32

그리고 안드로이드 게임 개발사에서 또 하나 Summit, 게임 프로파일 링에 대해 그 이야기는 좀 더 초점을 맞추고 있습니다 성능, 원시 코드, 관련 도구, 그런 것들 YouTube에서 해당 동영상을 찾을 수 있습니다 이 온라인을보고 계시다면 동영상 설명에 해당 동영상 링크가 포함되어 있습니다

이하 프로파일 러에 대해 처음 배우는 분이라면 – 너는 단지 호기심이 많다 여기에 아주 간단한 개요가 있습니다 Studio Profilers 기능이 나뉩니다 4 개의 메인 프로파일 러, 하나는 CPU, 하나는 메모리, 하나는 네트워크 용이고 다른 하나는 배터리 용입니다

또한 이벤트 프로파일 러가 있습니다 항상 당신이 물건을 볼 수있는 상단에 탭, 키보드 이벤트, 화면과 같은 사용자 이벤트 회전 및 라이프 사이클 이벤트 – 그래서 당신이 파편 일 때 활동이 시작되고 중지됩니다 어쨌든, 그 정도면 충분합니다 데모로 뛰어 들어 봅시다 SHUKANG ZHOU : 좋아, 데모를 시작 해보자

먼저이 버튼을 한 번 클릭하여 앱을 시작할 수 있습니다 프로파일 러를 시작하십시오 오늘은 Android Studio를 사용하고 있습니다 34 Canary 3, 그것이 우리가 가지고있는 것 중 가장 최신이기 때문입니다

이것은 Canary 릴리즈이기 때문에 아직 안정적인 릴리즈는 아닙니다 그래서 몇 가지 버그가있을 수 있습니다 흥미로운 일이 오늘 일어나면 우리와 함께하시기 바랍니다 우리가 오늘 사용하고있는 app 인 Santa Tracker, Java 코드 만 들어 있습니다 따라서 Java 응용 프로그램은 오늘날의 대화의 초점이 될 것입니다

따라서 프로파일 러에서 볼 수 있듯이, 우리는 4 개의 프로파일 러, CPU, 메모리, 네트워크 및 에너지를 가지고 있습니다 그 중 하나를 클릭하면 더 자세한 데이터를 얻을 수 있습니다 해당 프로파일 러에서 CPU 프로파일 러로 건너 뛰십시오 여기서는 CPU 프로파일에서 볼 수 있듯이, CPU 사용률과 스레드 상태를 볼 수 있습니다

언제 알려주는 것이 유용할까요? 귀하의 응용 프로그램은 CPU를 기반으로합니다 두 개의 관련 스레드를 검사하는 경우 한 가지 트릭이 있습니다 이리– 원하는 방식으로 스레드를 재정렬 할 수 있습니다 코드의 어느 부분에 대한 추가 데이터 정보를 알고 싶습니다 실행 중인지, 실행 중인지, CPU 기록이 필요합니다

그리고 조금 더 많은 공간을 갖도록하겠습니다 여기에서 볼 수 있듯이 4 종류의 CPU 녹화 첫 번째로가 봅시다 그것은 샘플 Java 메소드입니다 이것에 대한 간단한 녹음을 시작합시다

따라서 이러한 유형의 CPU 기록 중에, Java 가상 머신을 주기적으로 다른 모든 자바 쓰레드의 콜 스택을 수집한다 귀하의 프로세스에서 그런 다음 스택을 표시합니다 이 부분에서는 녹음의 세부 사항입니다 그리고 녹음이 완료되면, 녹음 전체 자동으로 선택됩니다

더 자세히 살펴보고 싶다면, 선택 영역 확대 (Zoom to Selection)라는 버튼이 있습니다 그래서 그것을 클릭하면 전체 화면을 채울 것입니다 그리고 녹음의 하위 범위를보고 싶다면, 마우스를 사용하여 선택할 수 있습니다 전체 녹음을 다시 선택하려면, 여기서 작은 시계 아이콘을 클릭 할 수 있습니다 그리고 때로는 매우 특정한 점을보고 싶을뿐입니다

이 경우이 영역에서 한 번 클릭 할 수 있습니다 여기에서 자동으로 항목을 선택합니다 이제 여기서 호출 스택을 살펴 보겠습니다 그리고이 범위를 선택합시다 그게 더 재미 있을지도 몰라

보시다시피, 프로파일 러는 오렌지색 안드로이드 플랫폼의 비용을 색상으로 표시 자바 언어에서 파란색으로, 그리고 그것은 또한 코드 및 라이브러리 코드를 녹색으로 색칠하십시오 그래서 코드에서 어떤 메소드가 필요한지 알고 싶다면 실행중인 경우, 당신은 녹색 물건을 찾고있을 것입니다 그래서 여기서 우리는 여기에 녹색 물건을 볼 수 있습니다 그리고 여기에서 볼 수 있으면 onDraw 메소드입니다 빌리지 뷰 클래스에서

그리고 쉽게 볼 수있는 것처럼 코드베이스를 보면, 방문 [비 숙주]는 구름을 그릴 책임이 있습니다 이 화면에 있습니다 샘플링에 대해 이야기하고 싶은 또 다른 점은 이 녹음 유형에 대해 몇 가지 맞춤 설정을 할 수 있습니까? 따라서이 Edit Configuration 항목을 클릭하면, 이 더하기 기호를 클릭 할 수 있습니다 사용자 정의 된 CPU 구성을 작성할 수 있습니다 이 샘플 Java 메소드 기록 유형의 경우, 샘플링 간격을 변경할 수 있습니다

대부분의 샘플링 기술이 진행됨에 따라, 샘플 수집 빈도가 높을수록 데이터가 대표성을 갖습니다 그러나 이로 인해 더 많은 오버 헤드가 발생합니다 때로는 유스 케이스에 따라, 여러 번 시도해 볼 수도 있습니다 달콤한 자리를 찾기 전에 우리가 보았 듯이 샘플 Java 메소드 높은 수준의 그림을 얻으려면 매우 유용합니다

실행중인 코드의 일부 다른 시나리오에서는 원하는 경우 더 작은 영역에 집중하기 위해, 두 번째 유형 레코딩, 추적 Java 메소드, 더 흥미로울 것입니다 그래서 다른 사례를 모으게하십시오 따라서 이런 유형의 CPU 기록에서, Java Virtual Machine은 매번 데이터를 수집하고 있습니다 실행이 메소드에 들어가거나 메소드를 종료 할 때

따라서 더 많은 데이터가 수집됩니다 예를 들어, 실제로 시도하고 이해하려는 경우 정확히 내 코드에서 어떤 메소드가 실행 중인지, 나는 녹색 물건을 여기에서 찾을 것이다 그리고 많은 것들이 있다는 것을 알 수 있습니다 그리고 확대하고 싶을 수도 있습니다 따라서 WASD 키를 사용하여 확대 할 수 있습니다

따라서 W가 확대됩니다 보시다시피, 열쇠입니다 S가 축소됩니다 D가 오른쪽으로 이동합니다 A가 왼쪽으로 이동합니다

따라서 게이머라면 이미 알고있을 것입니다 확대하면 계속 확대 할 수 있습니다 이 녹색 물건이 무엇인지 알기 위해 그래서 여기에서 우리는 이것을 보았습니다 우리가 방금 전에 본 것입니다

Village View의 onDraw 메소드입니다 그들은 구름을 그리는 책임이 있습니다 여기는 Snowflake View 클래스의 onDraw 메서드입니다 이 모든 눈송이를 그릴 책임이 있습니다 주위에 떠있다

그리고 가까이서 보면 아주 작은 초록색 선이 많이 있습니다 이리 따라서 확대 할 수 있습니다 추가로 확대 할 수 있습니다 따라서 이것이 onDraw 메소드임을 알 수 있습니다

Snowflake 클래스에서 이것은 또한 눈송이 반에서 온 것입니다 이것은 또한 Snowflake 클래스의 것입니다 그래서 당신은이 수업이 정확히 어떤 것인지보기를 원할 것입니다 그래서 여기를 마우스 오른쪽 버튼으로 클릭하면 메뉴를 볼 수 있습니다

소스 코드로 이동합니다 그래서 당신은 여기에서 볼 수 있습니다,이 Snowflake 수업에서, 이 onDraw 메서드에서 우리는 속도에 대한 계산, 각도에 대한 계산, 크기에 대해서 그런 다음 원을 그립니다 그러면이 스크린의 모든 눈송이가 이 메소드가 실행됩니다 그래서 우리는이 방법에 대한 많은 호출을보고 있습니다

따라서 볼 수 있듯이 Java 메소드를 추적하십시오 그 여부를 확인하는 데 매우 유용합니다 메소드가 실행되었습니다 메소드가 실행되는 빈도를 확인하는 것도 유용합니다 내가 여기서 이야기하고 싶은 또 다른 것 여기 네 개의 모자에 관한 것입니다

첫 번째 차트는 콜 차트입니다 우리가 말했듯이 콜 차트는 CPU 기록 중 모든 호출 스택을 나타냅니다 그래서 왼쪽에있는 것들 – 자, 전체 범위를 선택합시다 당신은 그것을 볼 수 있습니다 그래서 호출 스택은 왼쪽을 보여주고, 이 녹음에서 처음으로 발생합니다

오른쪽의 것들은 나중에이 녹음에서 일어날 것입니다 프레임 차트에서 호출과 비슷합니다 스택,하지만 그것은 거꾸로입니다 그래서 뿌리는 바닥에 있습니다 또한 식별 된 호출 스택이 여기에 집계됩니다

따라서 메소드의 총 시간을 보는 것은 매우 쉽습니다 실행되었습니다 위에서 아래로 [INAUDIBLE]은 (는) 정확히 동일한 데이터를가집니다 프레임 차트로 It7s은 다른 시각으로 나타납니다

그럼이 견해에 대한 좋은 점은 당신은 시간에 따라이 방법들을 정렬 할 수 있습니다 따라서 저장 시간은 실행 시간입니다 이 방법 자체로 자식은 서브 루틴에 의해 실행 된 시간입니다 이 메서드에 의해 불려갑니다

그리고 전체 열은이 둘의 조합입니다 상향식은 발신자에게 전화 스택을 위쪽으로보고 있으며, 기본적으로 메서드에서 다른 함수로 를 호출 여기에서 매우 유용합니다 확장하면 매우 유용합니다 이 메소드가 호출 된 곳을 보려면, 이 메소드가 실행되었을 때 실행 된 시간 특정 호출자가 호출합니다

그리고 세 번째 유형의 CPU 기록이 있습니다 즉 샘플 네이티브 함수 – C 또는 C ++ 함수 여기 또 다른 짧은 추적을 해봅시다 그리고 당신이 기억한다면, 나는이 응용 프로그램, 산타 트래커, Java 전용 코드가 들어 있습니다 따라서 호출 스택은 호출 스택을 가정하고 이 녹음 유형으로 수집 별로 흥미롭지 않습니다

대부분 시스템 호출입니다 그들 중 일부는 안드로이드 프레임 워크 네이티브 코드를 사용합니다 그러나 앱에 기본 구성 요소가있는 경우, 이 유형의 녹음은 매우 편리합니다 추적 시스템이라고하는 또 다른 유형의 CPU 기록이 있습니다 우리의 부름에 그러나 내가 그 세부 사항에 들어가기 전에, 나는 Dave에게 데모를 돌려 줄 것이다

데이빗 허먼 : 훌륭합니다 따라서 CPU 기록은 매우 유용합니다 그러나 때로는 정확한 기능이 있거나 어쩌면 단지 분석하고자하는 몇 가지 기능 그리고 기록하기에 조금 부정확합니다 앱에서 녹화를 중지 한 다음 확대합니다

그것을 검색하십시오 다행히도 우리는이를 위해 매우 간단한 솔루션을 제공합니다 그리고 이미 코드를 추가했습니다 그럼 그것에 대해 이야기 해 봅시다 따라서 디버그 클래스는 실제로 Android API의 일부입니다

그리고 디버그 클래스와 그 메소드의 많은 부분 사실 Android API에있었습니다 이 두 가지를 포함한 첫 번째 버전부터 시작 메소드 추적 기능이하는 일 시스템에 추적을 요청하는 것인가, 당신이 제공 한 파일 이름으로 저장하고, 그것을 넣는다 나중에 장치를 뺄 수있는 폴더에서 검사합니다 정말 좋지만 Studio 프로필러에서는 우리는 너의 등을 맞았다

우리는 당신을 위해 모든 일을 할 것입니다 따라서 수동으로 수행하는 경우, 당신은 아마도 당신이 선택한 이름에 대해 매우 조심해야 할 것입니다 그리고 여러 개의 흔적을 남기고 있다면, 고유 한 이름을 선택하면 서로를 덮어 쓰지 않았다 이 경우 Studio에서 이름이 표시되지 않습니다 우리는 그것에 대해별로 신경 쓰지 않습니다

그래서 당신이 원하는대로 부르세요 여기, 녹음을하기 시작합니다 이 함수를 중심으로 그래서 내가이 경우에 대해 궁금한 점은, Santa Tracker에는 City Quiz라는 활동이 있습니다 그리고 City Quiz는 디스크에서 파일을로드합니다 그것은 대개 정말로 좋은 것입니다, 얼마나 오래 걸릴지 알고 싶다면, 의심스러운 일이라면 어쩌면 그렇지 않을 수도 있습니다

우리는 한번 살펴 보겠습니다 그러나 내가 언급하고 싶은 한 가지는 이 시작 메소드 추적 함수를 호출 할 때, 그것은 당신의 코드를 추적하고 있습니다 이것은 더 비싸고 정확하며 상세한 것입니다 그래서 나는 아주 조심 스러울거야 나는 많은 양의 코드 주위에서 이것을하지 않을 것이다

그냥 그것이 걸리지 않도록 예상보다 오래 걸릴 수도 있습니다 좋아, 실제로 시티 퀴즈에 들어가 보자 여기 아래 있습니다 무슨 일이 일어나는 지보십시오 자,이 일을하기 전에, 네가 여기서 눈을 떼지 않으면 안되

세션 패널에 그리고 당신은 Play를 누르십시오 It7s는 안으로 달릴 것이다 그리고 자동으로 기록됩니다 나는 아무것도 할 필요가 없었다 정말 끝내주는 군

다시 돌려 보내 줘 여기에서 볼 수 있듯이 새로운 것은 없습니다 이것은 바로 Shukang이 전에 당신에게 보여준 것입니다 그것은 또 다른 흔적입니다 그러나 당신은 그것을 스스로 기록 할 필요가 없었습니다

나는 이것이 좋은 순간이라고 생각한다 내가 말한 라이프 사이클 이벤트 이야기 시작 부분 보시다시피, 우리는 여기에 하중을 가하고 있습니다 우리는 이전 활동을 떠났습니다 이제 우리는이 새로운 활동에 들어갑니다

마우스를 활동에 올리면 다음과 같이 볼 수 있습니다 Android Studio 33의 경우, 그 시간 동안 활성화되어 있습니다 그래서 그것은 당신에게 유용 할 수 있습니다 하지만 여기 있습니다

우리는 여전히이 공간에 있습니다 우리가 실제로 활동에 들어가기 전에 또 다른 멋진 기능이 있습니다 이 필터 버튼을 보여 드리겠습니다 필터 버튼을 누르면 검색 창이 나타납니다 나는 그것을 입력 할 수 있습니다

이제 JSON에 대한 readLiteral 함수 그럼 그걸 타이핑 해 보겠습니다 이제 여기에서 알아 차릴 수있는 한 가지 내 콜 차트의이 부분이 희미 해졌습니다 여기 모든 부분은 어둡지 않습니다 그들은 여전히 ​​정상적인 색깔입니다

그러니 내가 확대 할 수 있는지 찾아 보겠습니다 그래서 거기에 우리가 간다 그래서 우리는이 readLiteral 함수의 일부 인스턴스를 볼 수 있습니다 기본적으로 내 기능이 정확히 일치하면 굵게 표시됩니다 함수 중 하나를 호출하는 함수 인 경우 또는 간접적으로 그 기능으로부터 불려지는 경우, 색상은 동일하게 유지됩니다

그리고 그렇지 않으면 흐려질 것입니다 그리고 get을 정렬하는 것이 정말 유용합니다 얼마나 많은 시간을 가졌는지에 대한 좋은 개요 함수에 코드 사용하기 당신이 걱정하는 것과 대 주의를 기울일 필요가 없다 모든 CPU 세부보기가이를 지원합니다 그래서 화염 차트에는 이와 비슷한 디밍이 있습니다

하향식 및 상향식은 해당 기능을 제거합니다 희미 해졌다 그래서 당신이 어떤 종류의 방법을 조사하려고 시도한다면, 너는 정말로 그걸 좁히고있어 필터 옵션을 시도하십시오, 보고있는 것에 집중할 수 있는지 확인하십시오 이제 여기서주의해야 할 마지막 사항은 우리가 한 모든 흔적들이다

그 위에 마우스를 올려 놓으면 여기에 저장 버튼이 있습니다 따라서 실제로 추적을 내보낼 수 있습니다 그렇게하면 동료에게 줄 수 있습니다 그것을 버그에 붙여라 그런 유용한 것들

누군가가 추적 파일을 제공하거나 파일을로드하는 경우, 여기 더하기 버튼을 눌러로드 할 수 있습니다 파일에서 괜찮아 그래요 좋아요 SHUKANG ZHOU : 이제 이야기 할 것입니다

마지막으로 기록한 CPU 기록 유형, 추적 시스템이 호출합니다 이 기능을 사용하면 시스템 호출을 추적 할 수 있습니다 Android 32에 도입되었습니다 세분화 된 시스템 이벤트를 수집합니다

이는 앱 성능과 관련이 있습니다 따라서 앱이 시스템과 상호 작용하는 방식을 조사 할 수 있습니다 리소스가 시스템 추적이됩니다 그래서 한 가지, 다시 말해서 클릭하여 확대 / 축소 버튼을 사용하고 있습니다 여기에 아주 쉽게 볼 수 있습니다

내가 여기서 너에게 보여주고 싶은 한 가지는 – 내가 너에게 보여주고 싶은 첫 번째 일 이 스레드 상태보기에 있습니다 따라서 범위를 클릭하면 해당 선택 항목이 다시 확대되고, 여기를 클릭하겠습니다 [알아들을 수 없는] 여기에서 볼 수 있듯이 마우스를 사용하거나 마우스를 올려 놓거나 당신은이 스레드 상태가 실행 가능하다는 것을 알 수 있고, 실행되고, 실행 가능 해져서 다시 뛰게됩니다 보시다시피, 우리는 모든 CPU 스케줄링을 수집하고 있습니다 조작

따라서이 수준의 세부 사항에서는 매우 쉽습니다 스레드가 차단되는시기를 정확하게 파악할 수 있습니다 스레딩 문제가있는 경우 유용 할 수 있습니다 추적 시스템 비용을 사용하여 보여주고 싶은 또 다른 점 느린 UI jank를 조사하는 것입니다 너무 느린 UI 렌더링은 일부 사람들이 jank라고 부른 것으로, 아시다시피, 그것은 [INAUDIBLE] UI입니다

작업은 두 단계로 이루어집니다 첫 번째 단계는 주 스레드에서 발생합니다 그것은 화면에 무엇이 있는지를 결정합니다 레이아웃과 [INAUDIBLE]을 (를) 포함하여 그것은 모든 UI를 실행하여 무엇을 결정합니다 요소 (예 : 앱의 모든보기 클래스) 그래서 메인 쓰레드가 무엇을 생성했는지, 그들은 원시 렌더 스레드로 전달됩니다

렌더 스레드는 어떻게 그리는지를 알아낼 것입니다 그런 다음 표면 핑거 시스템으로 전달 될 것입니다 프로세스 및 실제 하드웨어 도면을 수행합니다 그래서 그 배경을 제공합니다 그래서 우리는 프레임 영역 아래에서 볼 수 있습니다

우리는 메인 스레드를 나타내는이 메인을 가지며, 렌더링은 렌더링 스레드를 나타냅니다 그래서 조금 축소 시키십시오 여기서 볼 수 있습니다 이것이 첫 번째 단계입니다 그리고 이에 해당하는 두 번째 단계가 여기에 있습니다

부드러운 UI를 목표로 삼고 있다면 – 초당 60 프레임의 부드러운 애니메이션, 이것은 프레임 당 약 16 밀리 초입니다 그래서 두 단계가 결합되었습니다 16 프레임 미만이어야합니다 프로파일 길이가 그보다 길면 프로파일 러 해당 프레임을 빨간색으로 표시합니다 알다시피, 이것은 느린 것입니다

따라서 더 많이 축소하면 많은 프레임을 볼 수 있습니다 오늘은 모두 빨간색이라고 생각합니다 즉, 모든 사람이 초과한다는 의미입니다 16 밀리 초 임계 값 한 가지 요소는 에뮬레이터를 사용하는 것입니다 에뮬레이터가 시스템과 상호 작용하는 방식 때문에, 더 많은 빨간색 프레임을 보게 될 것입니다

우리의 실제 장치보다 오늘 이야기하기 전에 나는 다른 흔적을 수집했다 실제 물리적 장치를 사용합니다 그리고 그 추적을 파일로 내 보냈습니다 그리고 이제 그 흔적을 가져 와서 보여주고 싶습니다

Dave가 전에 말했듯이이 더하기 기호를 사용할 수 있습니다 추적을 가져 오려면 그 흔적이 있네 시스템 호출을 추적 할 때, 시스템 전체의 이벤트가 수집됩니다 따라서 제공자에게 당신이보고 싶어하는 과정

그래서 우리는 산타 추적자를보고 싶습니다 그리고 아시다시피, 시스템 관점에서 볼 때 리눅스는, 모든 프로세스 또는 모든 스레드, 귀하의 이름 15자를 초과 할 수 없습니다 그래서 이것이 실제로 santatrackerdebug 어떤 이유로 시스템은 이것이 이름이라고 생각합니다

따라서이 항목을 선택하면이 추적을 가져 오게됩니다 여기 실제 장치에서 볼 수 있습니다 대부분의 프레임은 회색으로 표시됩니다 이는 16 밀리 초 임계 값 미만임을 나타냅니다 그리고 프레임의 so6e는 빨간색에 있습니다

그것들은 그 문턱을 초과하기 때문입니다 프로파일 러가 어떻게 알 수 있을지 궁금해 할 수 있습니다 이 단계가 오래 걸리나요? 그것은 추적 지점에서입니다 Android 플랫폼 엔지니어는 일부 중요 업무에 건물 추적 점 추가 Android 시스템에서 여기 예제는 메인 스레드를 클릭하면, 이 이벤트는 여기서 추적 이벤트에서 표시됩니다 그래서 내가 여기 zoo6하면, 당신은 이것을 볼 수 있습니다

이들은 Choreographer doFra6e라고하는 추적 이벤트입니다 이것이 우리가 방금 이야기 한 첫 번째 단계입니다 UI 렌더링에서 그것은 주 스레드에서 발생합니다 렌더 스레드를 클릭하면 drawFra6e라는 이벤트가 있음을 알 수 있습니다

이것이 두 번째 단계입니다 그리고 다른 사람이 있음을 알 수 있습니다 추적 포인트 그들은 모두 syste6을 구축하고 있습니다 그래서 그들은 모든 안드로이드 폰에서 이용 가능하며, 그들이 건물이기 때문에

타이밍 정보를 얻는 데 매우 유용합니다 일부 특정 작업 실제로 추적 지점을 가질 수도 있습니다 여기에서 데모 할 것입니다 그래서 오늘 – 그래서 여기, 우리가 정상에 들어가면 응용 프로그램 의이보기로 돌아와서, 우리는 구름이 있습니다

우리에게는 눈송이가 있습니다 나는 6y 코드가 얼마나 오래 그것들에 합류하는데 소비되는지를 알고 싶다 구름 때문에 나는 마을보기로 간다 따라서 onDraw 메서드가 있어야합니다 그래서 방법의 시작 부분에, 나는 계기를 추가합니다

추적 beginSection, 당신은 문자열을 제공해야합니다, 섹션의 이름입니다 메소드 끝에서이 추적 이벤트를 종료합니다 눈송이의 경우 Snowflake View로 이동합니다 다시 말하지만, onDraw 메서드에 있어야합니다 섹션 이름을 지적하고 싶습니다

당신은 6 개의 이름을 골라야합니다 감각을 통해 언제인지 알 수 있습니다 당신은 CPU 녹화를하고 있습니다 그래서 우리는 Snowflake Android Dev Su66it을하고 있습니다 2018 오늘날의 데모에서는 이것이 의미가 있습니다

이제 수동 계측을 추가했습니다 그래서 나는이 응용 프로그램을 다시 작성하고 다시 프로파일 링합니다 따라서 빌드를 기다리는 동안 궁금해 할 수 있습니다 두 가지 방법이 얼마나 오래 걸리는지 알고 싶다면, 왜 추적 Java 메소드를 사용하지 않습니까? 잠깐 얘기하고있는 그 종류의 CPU 녹화? 그래서 나는 추적 자바 방법이 매우 강력하다고 말할 것이다 사용하기가 매우 쉽습니다

하지만 상당한 오버 헤드가 있습니다 Java Virtual 실행이 시작될 때마다 머신이 데이터를 수집하고 있습니다 메소드 및 메소드 실행이 메소드를 종료 할 때마다 호출됩니다 그래서 자주 호출하는 방법이 많다면, 그 오버 헤드는 신속하게 합쳐져 매우 비싸게됩니다 6 가지 계기를 사용하는 경우, 예를 들어 추적 API를 사용하는 것처럼, 데이터 수집시기와 장소를 완벽하게 제어 할 수 있습니다

따라서 현명하게 사용하면 오버 헤드가 훨씬 줄어 듭니다 결과적으로 수집 한 데이터 더 정확해질 것입니다 그럼 우리가 가진 도구를 검증 해 봅시다 따라서 CPU 프로파일 러로 이동하십시오 추적 시스템 호출 추적을 수집합니다

그리고 여기, 우리는 zoo6에서 안무가 doFra6e, 우리는 다시이 사건을 봅니다 이것은 모든 UI를 담당하는 주 스레드에서 온 것입니다 집단 동물원을 계속 가면 볼 수 있습니다

이것이 방금 추가 한 프레임, Village View입니다 클라우드에 합류했습니다 그리고 이것은 Snowflake View, ATS 2018입니다 그것은 눈송이에 합류하는 책임이있는 물건입니다 따라서 트레이스 시스템을 사용하여 CPU 기록을 호출하는 방법입니다

따라서 systrace라는 비슷한 도구에 대해 들어 보셨을 것입니다 그래서 실제로 내 Google 동료 [INAUDIBLE] 어제 systrace에서 번개 이야기를했다 그래서 매우 강력한 도구입니다 하지만 systrace의 학습 곡선 Android Studio Profiler보다 조금 가파르다 따라서 사용자는 자신의 필요에 가장 적합한 도구를 선택할 수 있습니다

OK, 이는 추적 CPU 기록 용입니다 나는 Dave에게 다시 데모를 넘겨 줄 것이다 알겠습니다 CPU 프로파일 러를 뒤로두고 뛰어 넘다 메모리 프로파일 러에 연결하십시오

우선, 나는 모두의 관심을 끌어 들이고 싶다 이 할당 추적 풀다운에 여기에 간략히 기록한 안드로이드 스튜디오 30에서, O 이상을 사용하여 Android 기기를 타겟팅 할 때 우리가 한 일 모든 단일 할당에 대해 호출 스택을 수집합니까? 귀하의 앱이 만든 것입니다 우리는 그것을 사용하는 것이 매우 편리 할 것이기 때문에 그것을했습니다 그 역사를 가지고 있습니다

그러나 일부 사용자는 프로필러 그들의 애플 리케이션을 늦추고 있었다 우리가 조사한 후에, 그것은이 특징으로 밝혀졌습니다 그래서 Android Studio 33부터는, 우리는 이제 이것을 구성하는 옵션을 제공합니다 내가 여기 가서 보도록하겠습니다

그래서 우리는 아무도, 샘플을 채우지 않았고, 가득 차있었습니다 None은 기능을 비활성화하고, Full은 기능을 활성화하고, 샘플링 된 할당의 하위 집합을 수집합니다 그 종류의 당신에게 app7s 메모리가 어떻게 일반적인 모양을 제공합니다 행동은 실제로는 실적에 영향을 미치지 않지만 완전한 사람만큼이나 이제 Full이 앱에 영향을 주는지 여부 또는하지 않을 수 있습니다 호스트 컴퓨터에 의존 네가 뛰고 있든, 너 뛰고있어 장치 또는 에뮬레이터 타겟팅 또는 코드 작성 앱 코드에 많은 소규모 할당이있는 경우 산타 트래커처럼 그렇게 느려질 수 있습니다

하지만 기능을 가지고 놀아 보는 것이 좋습니다 나는 여기서 전진하고 Full을 켤 것이다 I76 여기에 살거야 그래서 내가 Full을 켜면, 이 할당 표시기가 나타나기 시작했습니다 나는 재미있는 일들을 원해

이제 장치를 회전시켜 보겠습니다 나는 너를 거기에 붙잡을지도 모른다 다시 회전하십시오 저기로 돌려 놓으세요 자 이제 살펴 보도록하겠습니다

그래서 내가해야 할 일은 바로 드래그하는 것뿐입니다 나는 모든 것을 볼 수있을거야 할당 및 할당 취소 그 범위에서 일어난 일 정말 가벼운 방법 일 수 있습니다 당신의 기억이 무엇을하고 있는지 빨리 알 수 있도록 정렬하십시오

할당 및 할당 해제 횟수가 있습니다 그래서 때로는 심지어 메모리 누수를 발견 할 수도 있습니다 그러는거야 그리고 다른 좋은 점은 아마 이걸 가지고 있다면, 너는 다른 일을하고있어 당신은 실제로 제 시간에 돌아가서 범위를 선택할 수 있습니다

여전히 당신의 기억에 어떤 변화가 있는지 봅니다 이제 저는 여기서 다시 나가서 다시 되돌릴 것입니다 그리고 할당량이 표시됨을 알게 될 것입니다 그것은 빈 원을 그리며 추적을 멈추었다 샘플링 모드를 수행하면 절반으로 채워진 원이 생깁니다

이제이 오브젝트들을보고, 한번 클릭하면, 현재 할당 된 모든 것을 볼 수 있습니다 또한 할당 된 위치도 포함됩니다 이것은 코드베이스에서 핸들을 얻는 데 매우 유용합니다 이 주위를 클릭하고 다른 개체가 어디에 있는지 볼 수 있습니다 에서 오는

그것이 말하게되면, 도움이되지 않을 수도 있습니다 왜 메모리 누수가 발생했는지, 왜 내 기억을 고수하고있다 당신이 그 정보를 얻고 싶다면, 여기서이 아이콘으로 가야 해 이것이 힙 덤프 아이콘입니다 힙 덤프를 클릭하십시오

그래서 제가 여기서 실제로하려고하는 것은 당신에게 알려주는 것입니다, 누출 된 활동이나 조각을 찾지 못했습니다 산타 트래커 애플 리케이션에서 그래서, 전체 공개, 나는 하나 추가했습니다 그리고 내가 한 것은 메모리 누수를 추가 한 것입니다 이 펭귄 수영 게임 여기에

그러니 실제로 실제로 활동에 들어 가자 그것을 남겨주세요 실제로 다른 힙 덤프를 수행하게하십시오 좋아, 그래서 우린 덤프 뭉치를 얻을거야 여기에 정보

그래서 저는이 활동의 ​​일부분을 알고 있습니다 수영 조각이라고합니다 CPU와 마찬가지로 필터 버튼이 있습니다 그리고 나는 다른 모든 물체를 걸러 내고, 그리고 그것을 발견한다, 긍정, 충분히,이 수영 조각 아직 살아있다 클릭하면 활성 인스턴스가 선택됩니다

여기에서 많은 일이 일어나고 있습니다 약간의 설명을하기 위해 잠시 시간을 할애합니다 한발 뒤로 물러나서 그것을 흡수하기 위해 잠시 시간을 내 보자 그래서이 깊이 아이디어가 무엇인지 설명하고 싶습니다 따라서 모든 Java 메모리를 상상해보십시오

이 힙에있는 가비지 수집기로 정리할 수 있습니다 특정 Java 객체가 있습니다 이 원 밖에서 살다 이러한 것을 GC 뿌리라고합니다 새 스레드를 만들면 기본적으로 이 특별한 GC 루트를 만든다

또는 정적 변수는 GC 루트의 인스턴스입니다 그래서 일어나는 일은 당신이 스레드에서, 그 클래스가 생성하는 클래스의 인스턴스를 생성한다 다른 클래스의 인스턴스이며, 차례 차례로 등등 근본적으로 당신이하고있는 일 너는이 긴 사슬의 사슬을 만들고있다 그 사슬의 각 항목은 더 나아가서 GC 루트의 깊이

이제 사이클에 문제가 없다는 소식을 들었을 것입니다 가비지 컬렉터에게 나는 너를 가리킬 수있다, 그리고 너는 너를 가리킨다 너는 나를 다시 가리킨다 그러나 우리가 모두 도달 할 수 없다면, 그것은 모두 가비지 수집기에서 제거됩니다

따라서 주목할 사항 중 하나는 힙 덤프를 가져갈 때입니다 너는 무서운 양의 것을 볼지도 모른다 내 인스턴스를 붙들고 있지만 많은 인스턴스는 무해합니다 이들 중 상당수가 잠재적으로 단순한 사이클입니다 그리고 당신이 알 수있는 한 가지 방법은 항상 사실이 아닙니다

하지만 좋은 경험적 방법입니다 깊이가 자신의 깊이보다 큰 경우입니다 왜 그런지 설명해 드리겠습니다 그래서 가비지 콜렉션 루트가 당신을 가리킨다 고 상상해보십시오 하위 인스턴스를 만듭니다

그리고 당신이하는 일 중 하나는이 포인터를주는 것입니다 그래서 그것은 당신을 가리키고 있습니다 그건 아주 흔한 일입니다 여기, 나를 다시 가리킨다 너는 내 자식이야

하지만 네 부모가 누군지 알지 그럼 내 깊이가 가고 있다는 뜻이야 이 포인터의 깊이에 추가됩니다 그래서 이것이 이러한 깊이의 일부인 이유입니다 여기에 당신이 문제가 아니라는 사실을 알게되면 여기에 주목하게됩니다

깊이 열에 이러한 항목이 몇 가지 있습니다 여기서 깊이는 비어 있습니다 그건 실제로 아무런 의미가 없다는 것을 의미합니다 모든 가비지 수집에서 현재 이들에 도달 뿌리 그래서 결국 정리 될 것입니다

지금은 힙 덤프에 나타나지만, 당신은 그것에 대해 걱정할 필요가 없습니다 그냥 무시하십시오 매립 된 것만 큼 좋습니다 우리가 이것을 조금 이해할 수 있도록, 구체적인 예를 들어, 나는 실제로 이 코드를 보게 될 것입니다 우리 메모리 누출의 원인

우리의 깊이는 1입니다 이 아이템의 깊이는 2입니다 이것은 어딘가에 있습니다 점수보기 클래스의 인스턴스가 있습니다 그리고 그 스코어 뷰 클래스에는 share라는 변수가 있습니다

ClickListener, 값은 me입니다 이제 수영 조각을 살펴 봅시다 그리고 getScore 뷰를 검색 할 것입니다 그래서 전에, 내가 이것을 보았을 때, 나는 노력했다 코드를 살펴 보겠습니다

나는 어떤 방법이 있어야한다고 말했다 저를 지적하는 점수보기를 얻을 것입니다 그리고이 getScore 뷰 메소드가 있습니다 내 수영 조각 안에 내가 그것에 뛰어 들면, 네가 보게 될 것은, 네, 우리는 하나를 만들고이 포인터를 전달합니다

그래서 거기에주기가있는 이유가 설명되어 있습니다 나는 그것에 대해 걱정할 필요는 없지만 최소한 왜 그것이 힙 덤프에 나타나는지 설명합니다 이제이 $ 0 기호가 많이 있음을 알 수 있습니다 여기서 뭐하는거야? 왜냐하면 당신은 그것을 많이 볼 것이기 때문입니다 당신은이 포인터가 무엇인지를 모두 알고 있습니다

하지만 당신이 내면의 계급이라면 – 당신이 중첩 된 계급이라면 외부 클래스의 필드에 액세스 할 수 있어야합니다 그것이 작동하는 방식은 컴파일러입니다 합성 변수를 생성합니다 그리고 이것을 호출하는 대신에, 이것을 취했기 때문에, 그것은이 $ 0이라고 부릅니다 그래서이 0 달러는 내 범위에서 벗어난 한 수준입니다

그리고 언제든지 내부 클래스를 만들 수 있습니다 그것의 외부 클래스에 대한 참조를 가지며, 또는 클로저, 익명 클래스 인스턴스를 만들거나, 그것은 그것을 가질 것입니다 따라서 코드에서 모두 람다를 사용한다면, 또는 익명 클래스를 사용하면 이 0을 많이 봅니다 이 값은 깊이가 0이므로 GC 루트임을 의미합니다 그건 정말 의심 스럽네

그럼 소스로 건너 뛰자 지금 바라건대 내가 이것을 볼지도 모르겠다 오, 나는이 장기 실행 과제를 썼다 보시다시피 정적 클래스는 아닙니다 그것은 최종 수업입니다

따라서 정적이 아니라면 참조를 붙잡을 것입니다 부모 클래스에 그게 여기서 일어나는 일입니다 그리고 저는 오랫동안이 장기적 과제를 말할 수 있습니다 나는 그것을 만들었지 만 그것을 취소하는 것을 잊었다

여기에 대해 살펴 보겠습니다 그래, 물론, 나는 그것을 주석으로 남겨 뒀다 아무 이유없이 거기에서 주석을 풀어주세요 그리고 다시 시작합시다

이제 우리가 할 일은 저장되었는지 확인하겠습니다 우리는 거기에 갈

지금 우리가 할 일은 재부팅입니다 사실이 수영 조각이 풀려 났는지 확인하십시오 시선을 사로 잡는 것 중 하나 당신이 메모리 누출 사냥을하고있을 때 정적 변수 또는 싱글 톤 클래스 수업을 들었거나 직접 등록하는 학생 청취자와 함께,하지만 그것을 제거하는 것을 잊지, 또는 어떤 이유에서든 이러한 내부 클래스 중 하나 멈추지 않을지도 모른다 그리고 활동을 계속하고 있지만 여전히 활동 중입니다 종료하려고합니다

여기서 프로파일 링하고 있습니까? 예, 우리는 여전히 가고 있습니다 그리고 내가 언급하고 싶은 또 다른 것 항상 쉬운 일은 아닙니다 당신은 항상이 명백한 범인을 가질 수는 없습니다 그래서 그 경우에, 당신이가는거야 하고 싶은 것은, 나는 말할 것이다

코드를 알아 내려고 노력하십시오 내가 말했던 것들을 찾는다 가자 들어가서 들어 가자 그리고 내가 이야기하는 동안 여기서 나가겠다

그리고 만약 당신이 그것을 청소 했더라도, 당신이 그것을 찾지 않아도 힙 덤프를 통해 힙 덤프 여전히 진리의 원천이 될 것입니다 그것은 여전히 ​​그 일이 될 것입니다 당신의 기억이 실제로 되찾아진다는 것을 보장합니다 그래서 나는 여기에 가서 다시 돌아갈거야 메모리 프로파일 러에 저장합니다

가비지 수집기를 클릭하겠습니다 따라서 이러한 쓰레기 수집 이벤트에 주목했을 것입니다 자동으로 하단에 예를 들어 거기에는 많은 것이 있습니다 그 때 가비지 컬렉터 자체적으로 수집하기로 결정했습니다

그러나 가비지 컬렉션 버튼을 클릭 할 수도 있습니다 수동으로 실행되도록합니다 이제 우리는 여전히 조각을 여기에서 볼 수 있습니다 깊이가 실제로 있는지 봅시다 그래서 당신이 볼 수 있듯이, 조각 조각 여전히 나타나고 있습니다

나는 긴장 할 수있다 어떻게 된 거예요? 그러나 여기서 깊이 란은 비어 있습니다 모든 것이 단지 기본적으로 기다리고 있습니다 가비지 컬렉터에 의해 픽업됩니다 가비지 컬렉터를 몇 번 더 누르면됩니다

제가하고 싶은 한 가지 트릭은 전화를 돌리는 것입니다 그런 다음 다시 회전하십시오 Android 휴대 전화를 돌릴 때마다 즐거운 일이 많이 있습니다 우연히 있다 가비지 컬렉터에게 일이 진행되고 있다고 알려줍니다

그래서이 경우 여기에 또 다른 힙 덤프를 실행 해 봅시다 우리가 수영 조각이 있는지 정말 잘 수집 드럼 롤이 붙어 있었으면 좋겠어 그리고 너 거기 간다 그것은 사라 졌어요

그래서 내가 빨리 이야기하고 싶은 마지막 것 당신이 힙 덤프를보고 있다면, 항상 메모리 누출을 반드시 찾아 다니는 것은 아닙니다 밖을 내다 보는 몇 가지 주요 수업을 알지 못할 수도 있습니다 그래서 얕은 크기와 보존 된 크기의 개념이 있습니다 그래서 얕은 크기는 어떤 클래스의 단일 인스턴스의 크기입니다 그게 할당되었습니다 유지 된 크기는 보유하고있는 모든 것입니다

그래서 네가하고 싶은게 사냥이야 너의 얕은 크기를 분류하고, 너의 유지 한 크기를 분류하고, 그게 있는지 알아보기 위해 조사 할거야 그곳에는 의심스러운 기억들, 또는 어쩌면 당신은 당신의 디자인을 정리할 수 있습니다 이전에 메모리를 일부 제거하십시오 어쨌든, 그건 우리 데모 끝이야

Shukang 등을 맞댄 그것 슬라이드로 가자 SHUKANG ZHOU : 좋습니다 요약하자면, 오늘 데모에서 우리는 CPU 프로파일 러와 메모리를 사용하도록 표시 프로파일 러를 사용하여 코드베이스에 대한 더 나은 이해 산타 트래커 애플 리케이션의 그리고 솔직히 말해서, Dave와 나는 그것에 대해 많이 모른다

우리가이 이야기를 준비하기 전에 그리고 우리는 또한 우리가 프로파일 러를 사용하여 성능 문제를 진단하십시오 또한 프로파일 러를 사용하여 이 응용 프로그램의 성능 앞서 말했듯이 네트워크와 에너지도 있습니다 Android Studio의 프로필러

그러나 불행히도, 우리는 오늘 그것을 감당할 시간이 없습니다 따라서 온라인 문서 및 협의를 참조하십시오 더 배우기 그래서 우리는 당신이 우리의 데모에서 몇 가지 트릭과 팁을 배웠 으면 좋겠습니다 오늘

접근 할 때 유용하게 사용되기를 바랍니다 귀하의 사이트에서 귀하의 Studio Profiler로 귀하의 코드베이스를 우리의 대화에 참석해 주셔서 대단히 감사합니다 [박수 갈채] [음악 재생]

Drawn out: how Android renders (Google I/O ’18)

[음악 재생] 안녕하세요 우리 이야기에 오신 것을 환영합니다

"그려진 것 – Android가 UI를 렌더링하는 방법 " 그것은 거의 다른 것으로 불 렸습니다 우리는 그것을 이것을, 그리고 몇몇 행정부에서 위치가 실제로 가고 있다고 결정했다 "앱을 최적화하는 방법 Top Rendering Performance "또는 뭔가 그 얘기가 아니 었습니다

다행히도, 우리는 그것을 다시 바꿨습니다 ROMAIN GUY : 아직도 그렇지 않습니다 CHET HAASE : 대신에, 우리는 당신에게 어떻게, 사실, 물건이 작동합니다 나는 쳇 하세입니다 나는 안드로이드 툴킷 팀 출신이다

Romain Guy : 나는 Romain Guy입니다 저는 Android 프레임 워크 팀에 있습니다 나는 실시간 그래픽을한다 CHET HAASE : 그것은 오늘날 우리가 이야기하고있는 것과 같습니다 그래서 우리는 이전에이 버전의 버전을 제공했습니다

우리는 우리가 끝난 줄 알았다 그리고 나서 우리는 충분한 것들을 깨달았습니다 어쩌면 시스템 내부에서 바뀌었다 이 일을 다시하고 우리가있는 곳을 볼 시간이었습니다 이것이 우리의 시도입니다

가자 그래서 우선, 렌더링이라는 단어가 있습니다 그게 무슨 뜻이야? 일반적으로 그것을 명확히하기 위해 지방을 녹이는 것을 의미합니다 그것은 우리가 오늘 이야기 할 내용이 아닙니다 대신, 우리는 실제로 선회하는 과정에 대해 이야기하고 있습니다

버튼과 체크 상자와 같은 모든 것들 화면의 모든 것을 픽셀 단위로 사용자가 볼 수있는 그리고 많은 일들이 진행되고 있습니다 우리가하는 많은 세부 사항이 있습니다 우리는 오직 오늘부터 이것을 40 분 안에하십시오 그러나 우리는 그 길을 따라 많은 세부 정보를 덤프 할 것입니다 그래서 우선, 나는 너를 데려 갈거야

~을 통해 색깔의 무리가 될 것입니다 상단에 도트가 표시됩니다 이야기의 나머지 부분에 대한 시각적 단서의 종류 그래서 저는 일종의 걸음마 단계를 밟을 것입니다 정보의 흐름에서 일어나는 일생의 화면의 픽셀까지 내려갈 수 있습니다 우리는 안무가라고 불리는이 물건을 가지고 있습니다

보통 60 초에 한 번 찰 때, Vsync라고합니다이 간격은 다음과 같습니다 프레임이 동기화되고 있습니다 버퍼가 화면에 나타납니다 우리가 많은 정보를 처리 할 좋은 시간입니다

그 정보의 렌더링 처리 그 결과로 Vsync 연산을 얻습니다 Java SDK 영역으로 보내졌으며 우리는 UI 스레드를 사용하고 있습니다 그리고 갑자기 우리는 입력 이벤트를 처리해야합니다 속성의 변경 사항을 트리거합니다 우리는 또한 모든 애니메이션을 실행합니다

그래서 우리는 속성 값을 변경합니다 다시 말하지만, 레이아웃 및 무효화와 같은 일이 발생할 수 있습니다 우리는 전체 통과 통과를 측정합니다 그들이 얼마나 큰지 알아 내기 위해서, 그것들을 실제로 배치하는 것입니다 어디로 가야하는지, 그리고 그 다음에 그려야합니다

일단 모든 정보가 완료되면, 해당 정보의 결과를 동기화합니다 렌더링 스레드라고 불리는 것에 이르기까지 그리고 렌더링 스레드가 그것을 받아서, 좋아, 글쎄, 나는 이것들을 실행하려고합니다 나는 기본적으로 이것을 돌릴거야 모든 정보의 기본 버전으로 우리는 Java 레이어에서 제작 한 다음 GPU에서 버퍼를 얻으려고 할 때, 그래서 나는이 정보를 쓸 곳이있다

그리고 나서이 모든 GPU 명령을 실제로 발행 할 것입니다 저기있는 OpenGL 같은 것들 그리고 나서 저는 말할 것입니다 좋아요, 이제는 버퍼를 바꿀 때가되었습니다 그런 다음 GPU로 넘깁니다

그리고 그래픽 시스템은 합성이라고하는 것, 우리는 오늘이 단계의 대부분에 대해 이야기 할 것입니다 그래서 합성은 생각합니다 우리는 전에 결코 설명하지 못했습니다 그래서 우리는 약간의 세부 사항을 들어갈 것입니다 안드로이드 렌더링 아키텍처의이 부분에 대해서

그럼 작은 색 점들 화면 상단에 주목할 것입니다 우리는 몇 가지 예를 거쳐 과정을 진행하고 있으며, 우리는 이것을 더 잘 이해할 수 있습니다 예제를 말하면, 여기 간단한 예제가 있습니다 따라서 사용자가 있다고 가정 해 봅시다 사용자가 항목을 클릭하면 나는이 굉장한 RecyclerView 응용 프로그램을 썼다

그 모양이 정확히 같습니다 나는 그것이 스크린 샷이기 때문에 그것이라는 것을 안다 내 멋진 응용 프로그램에서 그것에는 아이템이 잔뜩 들어있는 RecyclerView입니다 사용자가 하나를 클릭하면이 놀라운 일이 발생합니다

그것은 배경에 임의의 색상으로 변합니다 그것은 믿을 수 없다 나는 너에게 근원을 줄 수 있었지만 나는 모른다 그것은 꽤 복잡합니다 네가 이해할 수 있을지 확신 할 수 없다

여기 내 놀라운 데모 응용 프로그램을위한 놀라운 레이아웃이 있습니다 ConstraintLayout이 있습니다 내부에 RecyclerView가 있습니다 그런 다음 런타임에 채 웁니다 그 안에는 무작위적인 물건들이 잔뜩 있어요

이 것에 대한 뷰 계층 구조 기본적으로 이렇게 보입니다 실제로, 그것은 기본적으로 이와 같이 보이지 않습니다 그것은 정확히 이것과 같습니다 그래서 당신은 DecorView에서 내려갑니다 LinearLayout과 FrameLayout이 있습니다

나는 왜 우리가 깊은 둥지를 틀고 있는지 정확히 알지 못한다 하지만 뭐든간에 역사 우리는 거기에 행동 바에 대한 것들을 잔뜩 가지고 그게 정말 중요하지 않습니다

우리가 여기서 염려하는 것은 콘텐츠 계층 구조에서 실제로 무슨 일이 일어나고 있는지, 그것이 응용 프로그램에 영향을 줄 수 있기 때문입니다 그래서 우리는 내용 FrameLayout, 우리는 ConstraintLayout을 가지고있다 바깥쪽에는 RecyclerView를 감 쌉니다 그리고 나서 모든 항목 구체적으로 이들은 다음과 같은 항목입니다

그것들은 유일한 것들이기 때문에 화면에 있습니다 실제로 측정되고 배치되고 그려집니다 그래서 어떻게됩니까? 이 예제를 실행하고 우리가 처음부터 끝까지 간 모든 흐름을 통해 사용자가 클릭하면 Vsync 작업이 실행됩니다 그것이 전송되고 입력 단계에서 입력을 처리합니다 우리는 이것이 클릭이라는 것을 알게됩니다

나는 여기에 몇 가지 세부 사항에 광택을 쓰고있다 사실, 우리는 먼저 다운이 있다는 것을 알아 차릴 것입니다 그런 다음 위로 올라간 다음에 클릭으로 처리됩니다 우리가 결국은 당연한 것으로 받아 들여 여기를 클릭하여 처리 할 것입니다

이 항목에서 클릭 끝나는 방법 내가 가지고있는 놀랍도록 복잡한 예에서, 그 안에 배경색을 설정합니다 이 항목에 임의의 색상을 지정하십시오 그것이 내가이 방법을 무작위로 호출 한 이유입니다 viewjava에서 설정된 배경색으로 전송됩니다

배경에 색상을 설정하는 물건을 잔뜩합니다 drawable, 그리고 나서 결국 호출 이 메소드는 invalidate라고 불린다 무효화는 프로세스입니다 실제로 뷰를 다시 그리지는 않습니다 View Hierarchy에 무엇인가를 알려주는 과정입니다

다시 그려야합니다 그래서 클릭이 발생합니다 그것은 아래쪽에있는 항목에서 발생합니다 그 두 번째 아이템 – 당신은 녹색으로 둘러싸인 것을 보았습니다 우리는 약간의 무효화 메소드가 있습니다

그걸 부름 받았고 기본적으로 나무 위로 걸어 간다 나무 위로 줄곧 일련의 메소드를 호출합니다 뷰는 다시 그려야한다는 것을 알고 있기 때문에, 하지만 실제로 그 정보를 전파해야합니다 계급을 따라 올라간다 그래서 그때 우리는 앞으로 모든 것을 다시 그릴 수 있습니다

그래서 무효 심판을 계층 구조의 맨 위로 불러옵니다 결국 그것은 거대한 수업으로 끝납니다 우리가 ViewRootImpljava를 호출했다고하자 거기에이 무효화 자식 메소드가 있습니다

그리고 그것은 기본적으로 좋아, 나는 순회 일정을 잡아야한다 알았어, 누군가 정보를 가져 왔어 어딘가에서 무효화 됐어 즉 나중에 트래버스 코드를 실행해야합니다 이 과정이 끝나면 순회는 일을하는 과정입니다

실제로 필요한 모든 단계 해당 프레임을 렌더링합니다 구체적으로 말하자면, 보기가 얼마나 큰지, 레이아웃 – 뷰의 위치와 크기를 설정하고 뷰를 그립니다 이 모든 것을 순회라고합니다 그래서 우리는 순회를 계획했습니다 그것은 나중에 일어날 것입니다

그리고 나중에 시간이 지금이다 그래서 같은 프레임에서 우리는 traversal 코드로 끝납니다 이 performTraversals 메소드에서 그것은 PerformDraw를 할 것입니다 PerformDraw는 무승부를 요구합니다

메소드를 핵심 뷰에 추가하면됩니다 모든 방법으로 전파됩니다 그리기 방법은 실제로 최적화에서 끝납니다 허니 콤에서 다시 구현 한 Get DisplayList를 호출합니다 따라서 DisplayList는 렌더링을 저장하는 구조입니다 정보? 버튼 코드의 작성 방법을 보면 또는 일반적으로 코드보기, 그래픽 명령 호출 DrawBackgrounds, DrawDrawable, DrawLine, 도대체 무엇이

그러나 이것들은 DisplayList의 연산으로 끝납니다 이는 이러한 작업을 나타내는 간결한 방법이며, 뿐만 아니라 작업에 대한 매개 변수도 제공합니다 그래서 Get DisplayList를 호출합니다 사실 장식보기는 변경되지 않았습니다 그래서, 글쎄요, 저는 변하지 않았습니다

하지만 확실히 내 아이를위한 DisplayList를 얻을 수 있습니다 그리고 나무 아래로 내려 가면서, 그것이 항목 2에 도착할 때까지, 그리고 그것은 말합니다, 오, 나는 변했습니다 무효가 나를 불렀을 때, 뭔가를 유발해서 내가 다시 새겨 져야한다는 것을 알았습니다 그래서 Get DisplayList 실제로 끝납니다 뷰를 그리는 호출로서 재생성됩니다

자체 디스플레이 목록 자 이제이 onDraw 메서드로 끝납니다 DisplayList에있는 작업으로 끝납니다 DisplayList는이 항목에 대해 기본적으로 rect 정보와 텍스트 정보 – 꽤 기초적인 그리고 기본적으로 DisplayList가 있습니다

전체 계층 구조 그래서 그 자체가보기 자체가 아니 었습니다 하지만 우리는 계층 구조 자체를 가지고 있습니다 이 표시 목록의 계층 구조에서 재생됩니다 줄곧

이제 전체 트리에 대한 DisplayList가 있습니다 그게 우리가 UI 스레드에서해야 할 모든 것입니다 이제 우리는 그 정보를 렌더링 스레드 및 렌더링 스레드 GPU를 실제로 다루는 별도의 스레드입니다 이 작업의 측면 Java 측에서는 모든 정보를 생성했습니다

네이티브 측에서, 우리는 실제로 – 우리는 그 정보를 가지고 GPU로 동기화합니다 동기화 작업이 있습니다 기본적으로 우리는 저기서 핸들을 복사 해 또한 관련 정보를 일부 복사합니다 피해 지역을 복사 했으니 까

그 아이템 2 – 그게 중요하다는 걸 아는 것이 중요합니다 그 틀에서 변한 유일한 것 우리가 아무것도 다시 그릴 필요가 없다는 것을 의미한다 그렇지 않으면 그 지역 밖 그래서 우리는 클립 바운드를 복사 할 것입니다

그래서 우리는 다시 그려야 할 것을 알고 있습니다 이제 최적화를 수행 할 것입니다 비트 맵 업로드 같은 것들 따라서 이것은 프레임의 시작 부분에서 그것을 수행하기에 좋은 시간입니다 그들에게 실제로 그들을 돌려 줄 시간을주세요

길을 따라 텍스처에, 우리는 다른 것들을하고있어 ROMAIN GUY : 여기에 우리가 업로드 중임을 언급합니다 하드웨어가 아닌 비트 맵 하드웨어 비트 맵은 새로운 유형의 비트 맵 구성입니다 Android O에 추가되었습니다 일반적으로, 비트 맵을 가지고있을 때 메모리를 할당해야합니다

자바 측에서 그리고 그릴 시간이 왔을 때, 우리는 GPU에서 비트 맵 복사본을 만들어야합니다 이것은 비싸다 시간이 걸리며 사용하는 RAM의 양이 두 배로 늘어납니다 따라서 Oreo에서 사용 가능한 하드웨어 비트 맵을 사용하면, 당신은 방정식의 Java 측을 유지할 수 있습니다

GPU에만있는 비트 맵을 가질 수 있습니다 따라서이 비트 맵을 다시 수정하지 않을 경우, 이것은 메모리 효율적인 현명한 효율적인 방법입니다 비트 맵의 ​​메모리를 저장합니다 CHET HAASE : 이전에 렌더링 스레드에 대해 언급했습니다 이것은 우리가 롤리팝에서 소개 한 것입니다

해제 GPU 와만 통신하는 별도의 스레드입니다 그것은 네이티브 코드입니다 Java 코드 외부에는 호출이 없습니다 애플리케이션 코드에는 분명히 콜 아웃이 없다

그냥 GPU와 대화합니다 우리는 이것을했습니다 그래서 우리는 여전히 기본적으로해야합니다 우리가했던 것과 같은 일, 미리 렌더링 된 쓰레드, 우리는 모든 DisplayList 정보를 생성합니까? 그 다음 DisplayList 정보를 보냅니다 GPU에

그래서 일련의 직렬하지만 렌더 스레드 원형처럼 물건을 원자 적으로 할 수있다 리플 애니메이션뿐만 아니라 애니메이션도 보여줍니다 벡터 드로어 블 애니메이션으로서 – 렌더링 스레드에서 원자 적으로 발생할 수 있습니다 그래서 일어날 수있는 일 UI 스레드를 정지시키지 않아도됩니다 그리고 그 동안 UI 스레드 유휴 상태 일 때 다른 일을 할 수 있습니다

동기화 후, 유휴 프리 페치 중 일부 작년에 한 RecyclerView에서 일합니다 따라서 스레드가 실행됩니다 우리는 모든 것을 동기화했습니다 우리는 DisplayList를 가지고 있습니다, 피해 지역이 있습니다, DisplayList를 무언가로 바꿉니다 우리가 DLOps라고 부르는 것 – 표시 목록 조작

따라서 중간에 채우기 작업이 있음을 알 수 있습니다 그것이 우리가 녹색으로 변한 것입니다 그런 다음 우리는 우리가 수행하는 최적화가 있습니다 ROMAIN GUY : 여기서 우리는 다양한 최적화 작업을 수행합니다 그래서 예를 들어, 알파 렌더링을한다면 뷰에 Set Alpha를 호출하거나 하드웨어를 설정 한 경우 레이어를 선택하면 그리기 명령을 식별하려고합니다

해당 레이어를 대상으로해야하는 프레임의 시작 부분에서 이동시킵니다 이렇게하면 GPU 내부의 상태 변화를 피할 수 있습니다 매우 비쌉니다 따라서 이런 종류의 최적화를 수행하지 않고, 당신은 끔찍하고 끔찍한 성적을 보게 될 것입니다 GPU 자체가 느려지 기 때문이 아닙니다

GPU가 CPU를 기다리고있을뿐입니다 그것을 지시하기 위해 우리가하고있는 다른 하나, 우리는 당신에게 실제적인 실제적인 예를 보여주기 위해, 재정렬 및 ​​매칭이라고합니다 우리는 모든 작업을 살펴보고, 우리가 목록 항목을 가지고 있기 때문에이 예제에서 볼 수 있습니다 우리는 유사한 많은 작업을 인터리빙합니다

그래서 우리는 직사각형을 그릴 것입니다 그리고 나서 텍스트를 그릴거야 그런 다음 사각형과 텍스트를 다시 그릴 것입니다 그리고 다시 여기에서 우리는 GPU의 상태를 바꾸고 있습니다 여러 번, 대신에 우리는 명령어가 겹치지 않으면 할 수있다

우리는 모든 직사각형을 함께 그릴 수 있습니다 그리고 나서 우리는 모든 텍스트를 함께 그릴 수 있습니다 이것은 재정렬과 매칭의 일부입니다 그리고 때때로, 우리가하는 일은 우리가 말하길, 우리가 사용하는 많은 텍스트를 볼 수 있다면 동일한 색깔 및 동일한 글꼴, 다른 텍스트 불러 오기가 필요하지 않습니다 그것들은 전체 화면을 커버하는 단 하나의 것일 수 있습니다 CHET HAASE : 원본 DLOps를 볼 수 있습니다 채우기 작업을 한 다음 어떤 텍스트를 그리기를 원한다

텍스처 맵이 될 것입니다 글리프 캐시에서 복사합니다 그런 다음 채우기 작업이 있고 그 다음에 더 많은 텍스트와 채우기 그래서 우리는 이러한 모든 작업을 인터리브했습니다 따라서 재정렬 작업 후에, 그러면 좀 더 보입니다

일련의 채우기와 일련의 텍스트 작업이 있습니다 함께 배치 할 수도 있습니다 더 최적이 될 것입니다, 우리는 여기서 볼 것입니다 ROMAIN GUY : Gmail의 예입니다 그래서 그것은 허니 콤 시대에있었습니다

여기서 어떻게 파이프 라인을 수정했는지 알 수 있습니다 렌더링 속도를 늦추고 볼 수 있습니다 Gmail이 그리는 방법을 정확하게 설명합니다 그래서 우리는 많은 목록 항목을 가지고 있습니다 그것들을 정확한 순서대로 그려라

뷰 계층 구조에 코드 순서대로 존재해야합니다 사실은 캔버스에 그린 모든 그리기 호출은 그 명령을 존중해라 불행히도, 내가 말했듯이, 그것은 매우 비효율적입니다 대신에 일괄 처리 및 병합 및 재정렬 한 후, 우리는 이것을 얻는다

특히 모든 별들이 같은 시간에 그려지며, 대부분의 텍스트가 한꺼번에 나타납니다 흥미로운 점은 모든 목록을 그리는 것입니다 항목 배경이 차례로 나타납니다 그래서 좋았어 재정렬이 효과가있었습니다

일괄 처리가 작동하지 않았고 부분적으로 목록이 항목이 약간 겹쳐 있습니다 명령이 겹칠 때 우리는 명령을 하나로 그려야합니다 블렌딩을 존중할 다른 후, 알파 값이 올바른지 확인하십시오 따라서 효과는 실제로 응용 프로그램에 따라 다릅니다 KitKat에서 올바르게 기억한다면, 설정 응용 프로그램은 전체 화면을 그릴 수있었습니다

수십, 수십 개가 아닌 약 6 회의 무승부 요청으로, 뷰 계층 구조에서 볼 수 있습니다 따라서 이것은 우리에게 매우 중요한 최적화입니다 CHET HAASE : 나는 현재의 장치들에 대한이 작업을 생각한다 밀리 초와 같은 것을 저장했다 우리가 가진 것을 깨닫지 못한다면 16 세 안에 모든 것을 할 수 있습니다

그래서 실제로 큰 발전이었습니다 Gmail 덕분에 Gmail이 덜 복잡해질 수있었습니다 종종 다음 프레임으로 밀려 나왔다 그래서 모든 것에 대한 우리의 설명으로 되돌아갑니다 그런 다음 clipReject가 있습니다

그래서 이것은 우리가 피해에 대한 정보를 얻는 곳입니다 지역? 그래서 우리는 두 번째 항목이 화면에 있었는지 알고 있습니다 우리는 우리가 그릴 필요가 없다는 것을 안다 그 밖에는 아무것도 없어 따라서 우리는이 DLOps를 처리하면서, 우리는 기본적으로 버릴 수 있다는 것을 압니다

그 지역 밖에서 그려지고있는 모든 것 그래픽에서는 사소한 불량이라고합니다 따라서 우리는 모든 DLOps를 사소하게 거부합니다 그 지역과 교차하지 않은 이제 우리가해야 할 일은 채우기를 그리는 것뿐입니다 그리고 일부 텍스트와 라인

그래서 우리는 그렇게합니다 이를 수행하는 과정에서 우리는 GetBuffer를 수행 할 수 있습니다 이것은 대개 암시 적 작업입니다 우리는 완충을 요구하지 않는다 GPU 작업을 시작하자 마자, 그러면 GPU가 우리에게 버퍼를 넘깁니다

특히, SurfaceFlinger가 우리에게 버퍼를 건네줍니다 우리는이 명령들을 넣을 수 있습니다 그런 다음 명령을 실행합니다 이것은 일련의 GL 명령입니다 슬라이드에서 볼 수 있듯이 glCommand라고합니다

기본적으로 우리가 무엇을 필요로하는지에 상응합니다 채우기 또는 텍스트 수행하기 – 비트 맵은 줄을 복사합니다 그리고 우리는 버퍼를 교환합니다 그래서 이것은 우리가 말하고있는 것입니다, 우리는 우리의 모든 렌더링 작업 이 프레임을 화면에 표시 할 준비가되었습니다

SurfaceFlinger가 버퍼를 교환하라는 요청입니다 기본적으로, 우리는 버퍼로 드로잉을 마쳤습니다 앞면에있는 것과 이것을 바꿀 수 있습니다 그것을 화면에 표시합니다 한편, SurfaceFlinger에서 우리는 Romain이 가고있는 합성 단계가있다

나중에 많이 이야기하기 하지만 기본적으로 화면의 모든 창을 차지합니다 탐색 막대, 상태 표시 줄, 응용 프로그램의 실제 내용 창 그것은 하드웨어 컴포 지터에있는 모든 것을 결합합니다 그들을 화면에 놓은 다음, 타다 끝났어

그래서 정말 간단한 예였습니다 매우 복잡한 예를 살펴 보겠습니다 이것은 두 단계로 진행될 것입니다 하나, 그래서 우리는 목록을 끌어 올거야 그래서 우리는 그것을 끌고 갈 것입니다, 그리고 우리가 그것을 끌고 갈 때, 우리는 항목을 조금씩 옮길 것입니다

그리고 결국 우리가 계속 움직이면, 우리는 새로운 아이템을 나타낼 것입니다 그래서 우리는이 두 가지 버전을 살펴볼 것입니다 이동 전용 버전이 있습니다 그래서 우리가 그것을 끌어 올릴 때, 새로운 아이템 – 새 항목이 표시되지 않습니다 모든 것이 조금 바뀌 었습니다

우선 우선 처리해야합니다 그래서 우리는 Vsync를 가지고 있습니다 입력 이벤트를 처리 할 시간입니다 그래서 우리는 그렇게하고, 우리는 이런 식으로 끝납니다 RecyclerView의 터치 이벤트에서 잘, 아래 가동이 있었다는 것을 밝힌다

그리고 등록 만하면됩니다 그 일이 일어난 곳 아무것도 처리 할 필요가 없습니다 화면에서 아무 것도 바뀌지 않았습니다 우리는 방금 사용자가 실제로 눌렀다는 것을 등록했습니다

그래서 우리는 그것을 나중에 기록하고 아무런 작전도 없습니다 우리는 우리가 얘기 한 나머지 것들은하지 않습니다 아무것도 바뀌지 않았기 때문에 그들은 드래그를 계속하고 유사한 코드로 끝납니다 그래서 우리는 다음 프레임에서 입력을 처리합니다

우리는 터치 이벤트에서 OK라고 말합니다 오, 이제 우리는 그들이 실제로 움직 였다는 것을 알고 있습니다 우리는 이전 X를 저장했기 때문에 그들이 얼마나 많이 움직 였는지 압니다 우리는 델타를 계산합니다 그리고 이제 우리는 offset top와 bottom이라고 불리는 것을 호출합니다

기본적으로 화면의 모든보기에 대해 우리는 단순히 Y로 그들을 이동합니다 그리고 위쪽과 아래쪽 호출 오프셋 무언가 무효화 방법입니다, 하지만 약간 다릅니다

그것은, invalidateViewProperty 말한다 이것은 우리가 두는 최적화입니다 아마 허니 콤 두 번째 릴리스 또는 무언가 DisplayList 속성 그래서 이전에 DisplayList에 대해 이야기했을 때, 내가 빠뜨린 하나의 뉘앙스가있었습니다 우리는 운영에 관한 정보를 가지고 있습니다 그리고 그래픽 작업을위한 매개 변수

하지만 일부 핵심 디스플레이에 대한 정보도 있습니다 기본적으로 뷰의 속성 인 속성, 번역 속성과 마찬가지로 회전 알파 그리고 이것들은 우리가 필요로하지 않는 속성입니다 변경하려는보기를 다시 렌더링합니다 우리는 단순히 DisplayList 구조 자체에서 그것들을 변경할 수 있습니다

그런 다음 GPU 발행시에 선택됩니다 따라서 우리가 그렇게하는 것이 매우 빠릅니다 따라서보기를 무효화하는 대신 그 모든 것을 모두 다시 그리는 것 우리가하는 말은 번역을 바꾸는 것입니다 이보기의 속성 그래서 우리는 invalidateViewProperty를 호출합니다 그것은 나무 위로 모든 길을 전파합니다

우리는 여전히 최상위 계층에서 어떤 일이 발생 하는지를 알아야하기 때문에, 하지만 훨씬 더 최적의 단계입니다 이렇게되면 일정이 정해진 다 Traversals, 이전처럼 추첨에서, 그것은 performTraversals에서 끝나고, PerformDraw는 이보다 훨씬 간단한 버전을 수행 할 수 있습니다 DisplayList가 실제로 변경되지 않았기 때문입니다

DisplayList 속성을 변경하면됩니다 그것의 내부 그래서 우리는 즉시 그 정보를 렌더링 스레드로 그런 다음이를 실행하여 DisplayList 연산으로 변환 할 수 있습니다 버퍼를 얻는다

기본적으로 모든 것은 이전과 같습니다 두 번째 단계로 가자 그 복잡한 복잡한 예입니다 사용자는 드래그를 계속하고, 드래그 할 때, 하단에 새 항목이 나타납니다 따라서 Vsync는 입력을 처리합니다

우리는 이와 같은 방법으로 끝납니다 우리는 그들이 움직 였다는 것을 압니다 오,하지만 그건 우리가 창조를 촉발시킬 필요가 있음을 의미합니다 그리고 거기에 새 항목의 바인딩 결국이 코드에서 끝납니다

상위 뷰를 추가하십시오 그래서 RecyclerView는 새로운 시각을 갖게 될 것입니다 RequestLayout을 호출 할 것입니다 그래서 RequestLayout은 일종의 무효화입니다 그러나 말하는 대신에, 나는 다시 그려야한다

그것은, 내가 다시 측정하고 relaid 필요가 말합니다 그리고 그것은 모든 사람들에게 영향을 미칠 수 있습니다 그래서 우리는 기본적으로 RequestLayout을 모든 방법으로 전달합니다 무효처럼 나무를 올리십시오 그런 다음 전체 트리에서 측정 및 레이아웃을 수행합니다

거기서 무엇이 바뀌 었는지 보러 그래서 RequestLayout은 부모에서 일어나고, 그리고 그 모든 것이 전파됩니다 그리고 그것은 다시 일정에 잡 힙니다 여행자, 우리 친구 그런 다음 트래버스를 수행하십시오

지금 그릴 물건에 대해 우리는 performMeasure를 할 것입니다 및 performLayout 측정은 기본적으로 모든 의견을 묻습니다 그들이 얼마나 큰 지 알고 싶습니다

그것은 요청입니다 레이아웃이 말하길, 이것은 당신이 얼마나 커질 지에 대한 것입니다 그리고 이것은 당신이 위치 할 곳입니다 그것은 견해와 모든 부모 사이의 협상이다 시스템의 모든 제약 조건에 따라 그래서 우리는 수행을 수행합니다

그것은 기본적으로 측정을 상단에서 호출합니다 그 모든 것이 아래로 전파됩니다 그리고 우리는 모든 정보를 가지고 있습니다 모든 견해가 얼마나 커지고 싶어하는지, 그게 우리가 레이아웃을 계산하기에 충분하다 정보

그런 다음 레이아웃을 트리 전체로 전파합니다 그리고 그 일이 아이템과 부모에게 일어나면 변경된 다음, 실제로 그 항목을 배치합니다 우리는 갈 준비가되어 있습니다 이제 우리는 실제로 물건을 그릴 수 있습니다 모든 것은 이전과 같습니다

여기서 뉘앙스는 단지 레이아웃면이었습니다 중요한 뉘앙스를 제외하고는 우리 모두가 이 RequestLayout과 측정 및 레이아웃에 대한 정보 이 RecyclerView 상황 그러나 RecyclerView는이를 최적화합니다 부모와 자녀에 대해 충분히 알고 있습니다 실제로는 뷰를 상쇄 할 수 있습니다

RequestLayout을하는 대신, 실제로는보기를 이동시킬 수 있습니다 새 항목을 만듭니다 따라서 RecyclerView, 이전 목록보기뿐 아니라 ROMAIN GUY : 이제 우리는 이야기 할 것입니다 우리의 윈도우 컴포지션 인 SurfaceFlinger가, 화면의 모든 창을 합성합니다 이것은 흥미 롭습니다

음, 우선, 뭔가를 배우는 것이 항상 재미 있기 때문입니다 새로운 기술에 대해서뿐만 아니라 이해할 수 있기 때문에 어떤 개념 뒤에 일부 개념 Surface API, SurfaceTexture API, SurfaceView 또는 MediaCodec 그래서 우리가 구성을 이해하기 전에, 우리는 안드로이드에 대한 매우 중요한 개념을 이해해야합니다 버퍼 큐를 호출했다 따라서 이름에서 알 수 있듯이 버퍼 대기열은 우리의 그래픽 버퍼가있는 버퍼 큐에 불과합니다

일반적으로 1 ~ 3 개의 버퍼가 있습니다 내부적으로 다양한 옵션이 있습니다 여기서 우리가 버퍼 큐를 설정할 때, 우리가 원하는 버퍼 수를 요청할 수 있습니다 그리고 매우 중요하게도 버퍼 큐는 두 개의 끝점을 가지고 있습니다 우리에게는 생산자가 있고 우리에게는 소비자가 있습니다

따라서 일반적으로 버퍼 대기열을 사용하는 방법 – 생성자는 dequeueBuffer라는 메서드를 호출합니다 대기열에 있습니다 대기열에서 버퍼를 가져옵니다 이제는 그것을 소유하고 있습니다 그것은 모든 종류의 렌더링을 할 수 있습니다

이것은 픽셀 데이터를 직접 전송할 수 있으며, 그것은 OpenGL을 사용할 수 있습니다, 그것은 캔버스를 사용할 수 있습니다 별로 중요하지 않습니다 OpenGL을 사용하면 기본적으로 마지막에 썰매 버퍼를 호출하면 어떻게됩니까? 그 때 우리는 버퍼 안에 내용을 생성합니다 따라서 제작자가 컨텐트를 제작할 때, 그것은 큐 버퍼를 호출하고, 버퍼에 다시 준다 버퍼 큐에 저장한다

이제 소비자는 다음 버퍼를 잡을 수 있습니다 acquire를 사용하여 대기열에 있습니다 그래서 그것은 획득 버퍼를 호출합니다 큐 내의 최초로 이용 가능한 버퍼 그것은 그것과 관련이있는 것은 무엇이든합니다

그리고 그것이 끝나면, 그것은 release를 호출함으로써 그것을 되돌립니다 그래서 아주 간단한 개념입니다 물론 코드를 보면 모든 헤더 파일과 모든 코드 복잡하다 부분적으로 복잡하다 버퍼 큐의 두 끝점 다른 프로세스에서 살 수 있습니다

그리고 이것은 정확하게 일어납니다 이것은 우리의 곡면 작곡가가 작동하는 방식입니다 따라서 시스템에 창을 만들 때, Window Manager가 있고 SurfaceFlinger가 있습니다 따라서 창 관리자는 효율적입니다 이 시나리오의 제작자 및 SurfaceFlinger 우리의 소비자입니다

그래서 addView에서 Window Manager를 호출하면 – 이 작업은 자동으로 수행됩니다 당신은 토스트를 만들 때 대화를 만들고, 나는 믿습니다 활동을 만들 때 – 내부적으로 우리는 윈도우 객체를 생성한다 이 윈도우 객체는 SurfaceFlinger면에 형제가 있습니다 레이어라고합니다

이름은 조금 혼란 스러울 수 있습니다 그래픽에서는 버퍼와 대기열을 처리해야하기 때문에, 그것이 우리 모두가하는 일이며 우리는 빨리 이름이 없어집니다 그리고 그래픽 팀 – 그게 우리가 생각한 이유야 표면 및 표면 텍스처와 버퍼 큐 및 레이어 및 창 네

그래서 좀 지저분 해 그래서 SurfaceFlinger에 하나의 레이어가 있습니다 그것은 기본적으로 창입니다 레이어가 시스템의 구성 요소입니다 이는 응용 프로그램에 대한 버퍼 대기열을 생성하고 소유합니다

그래서 그것은 버퍼 큐를 생성하고 우리는 애플리케이션에 엔드 포인트를 보내는 방법이있다 서페이스를 만듭니다 따라서 API 중 하나에서 Surface를 볼 때마다 당신은 정말로 버퍼 큐의 프로듀서 끝 점이 있습니다 귀하의 프로세스에서 시스템의 다른 어딘가에 살고있는 또는 일부 다른 프로세스에서 대부분의 시간은 SurfaceFlinger 내부에있게 될 것입니다

이제는 전형적인 유스 케이스로, 애플리케이션 개발자로서 Surface API를 다루려고한다 SurfaceView를 만들 때 따라서 SurfaceView가 작동하는 방식은 자체 표면 인 창입니다 우리가 여기에서 볼 수 있습니다 그럼 우리는 그 표면을 통해 구멍을 효과적으로 잘라 냈습니다

그리고 창 관리자와 SurfaceFlinger에게 물어 봅니다 두 번째 서페이스를 만듭니다 그리고 우리는 그것을 밑으로 밀어 넣습니다 그것들이 같은 창문의 일부인 척하십시오 그러나 그들은 그렇지 않습니다

그것들은 두 개의 다른 표면입니다 그들은 두 개의 서로 다른 버퍼 큐를 가지고 있는데, 그들은 서로 완전히 독립적 일 수 있습니다 따라서 SurfaceView를 사용하면 아마도 OpenGL이나 Vulcan이나 미디어 플레이어를 사용할 것입니다 콘텐츠를 생성합니다 예를 들어,이 경우 OpenGL ES가 있습니다

짐을 뽑아 버릴거야 그것은 약간의 렌더링을 할 것입니다 버퍼를 Surface로 대기열에 넣고, 따라서 버퍼 큐에 저장됩니다 표면 질감을 사용하면 소비자가 OpenGL이됩니다 그래서 텍스쳐 ID를줌으로써 SurfaceTexture를 만듭니다

이 경우 SurfaceTexture가 생성하고 소유합니다 버퍼 큐, 그래서 종종 자신의 프로세스에있을 것입니다 그런 다음 SurfaceTexture를 전달해야합니다 어떤 제작자에게, 그리고 이것을하기 위해, 자신이 엔드 포인트를 작성하고, 서페이스를 만듭니다 SurfaceTexture를 취하는 Surface의 생성자가 있습니다

그래서 당신은 당신의 서피스를 만들고 그것을 보냅니다 다른 응용 프로그램으로 이동 한 다음 OpenGL 코드를 렌더링 할 준비가되면, 그것은 acquire를 호출하여 버퍼 큐에서 버퍼를 가져옵니다 렌더링을 수행합니다 다른 큐의 내부에 버퍼를 생성합니다 완료되면 릴리스를 호출 할 수 있습니다

TextureView는 UI 툴킷의 일부인 위젯입니다 SurfaceTexture의 혜택을 누릴 수 있습니다 이 특별한 경우 렌더링 스레드 우리가 얘기 한 것은 SurfaceTexture의 소비자입니다 당신은 여전히 ​​Surface를 얻는 책임이 있습니다 TextureView에서 그것을주고 당신이 선택한 프로듀서에게

당신은 그것을 멋진 이미지라고 생각할 수 있습니다 정말 효율적으로 업데이트 할 수있는 이미지보기입니다 하드웨어 가속을 사용합니다 최근 몇 년 동안 우리는 당신에게 말 했었습니다 TextureView가 해결책이었습니다

SurfaceView의, 비디오 또는 OpenGL을 통합하고자 할 때 복잡한 응용 프로그램 내에서 렌더링 예를 들어, ListView 또는 CountView 또는 움직이는 모든 것 SurfaceView는 두 개의 다른 창으로 구성되어 있기 때문에, 자연적으로 그렇게 효율적이었습니다 렌더링과 동기화되지 않았습니다 자신의 응용 프로그램의

이 문제는 Android 최신 버전에서 수정되었습니다 그래서 대부분의 시간, 안드로이드의 최신 버전에서, TextureView 대신 SurfaceView를 사용해야합니다 필요한 경우에만 TextureView를 사용하십시오 어쩌면 당신의 다른 견해들 사이에 끼어 있을지도 모릅니다 또는 SurfaceView에서 지원하지 않는 애니메이션을 사용하십시오

CHET HAASE : O 릴리스라고 생각합니다 그건 O– 어쩌면 N 이네 어쩌면 ROMAIN GUY : 둘 중 하나 테스트를해야합니다

CHET HAASE : 우리가 최근에 말한 이유입니다 ROMAIN GUY : 그리고 여기에 다른 제작자들의리스트가 있습니다 및 플랫폼의 소비자 그래서 우리는 SurfaceView와 SurfaceTexture를 보았습니다 OpenGL ES는 제작자입니다

또한 소비자 일 수도 있습니다 Chet가 그 라이프 사이클에서 어떤 시점에서, 우리는 버퍼를 얻는다 렌더링에서 dequeueBuffer를 호출 할 때입니다 thread로 보내고, 이것은 일반적으로, 우리가 첫 무승부를 할 때 마지막에는 eglSwapBuffer를 호출 할 때 운전자에게 우리가 우리의 프레임을 다 끝냈다는 것을 알리기 위해, 실제로 프레임을 생성합니다

다시 버퍼 큐에 넣으십시오 Vulcan, MediaPlayer, 및 MediaCodec 그리고 우리는 플랫폼 전반에 걸쳐 훨씬 더 많은 것을 가지고 있습니다 자, 실제 작곡 그래서 우리는 여러 창을 만들었습니다

각각 자신의 레이어가 있습니다 SurfaceFlinger는 모든 레이어에 대해 알고 있으며, 그리고 SurfaceFlinger는 실제로 디스플레이와 대화하기 위해 하드웨어 작곡가 (Hardware Composer)라고 불리는 것에 대해 이야기합니다 하드웨어 합성기는 하드웨어 추상화 레이어입니다 우리가 GPU 사용을 피하기 위해 사용하기 때문에 화면에 모든 창을 합성해야합니다 이유 중 하나는 배터리를 절약하는 것입니다

그렇게 효율적으로 전력을 소비합니다 하지만 응용 프로그램에 액세스 권한이 있는지 확인해야합니다 기본적으로 GPU의 모든 기능에 적용됩니다 우리는 당신을 멀리하지 않습니다 그리고 과거에는 들었을 수도 있습니다

창 수를 제한해야한다고 당신이 화면에 넣어 그리고 당신은 왜 몇 슬라이드에서 볼 수 있습니다 그래서 우리는 하드웨어 작곡가가 있습니다 효과적으로 하드웨어 블록입니다 멀티플 비트 맵을 사용하면 정말 빠릅니다

화면에서 함께 구성 할 수 있습니다 그리고 우리는 방금 이것에 대해 이야기했습니다 그래서 실제로 작동하는 방법 – 하드웨어 작곡가 정말 일종의 프로토콜입니다 여기에서는 이전 Hardware Composer에 대해 설명하겠습니다 하드웨어 작곡가 1 또는 하드웨어 작곡가 0이라고합니다

나는 항상 혼란 스럽다 우리는 Hardware Composer 2라는 것을 사용합니다 하지만 훨씬 더 복잡해 그래서 나는 그렇지 않다 여기에서 설명 할 것입니다 그러나 그것의 요지는 기본적으로 같은 방식으로 작동합니다

그래서 SurfaceFlinger는 많은 레이어를 가지고 있습니다 하드웨어 작곡가에서 준비를 할 것입니다 그리고 더 오래된 레이어를 Hardware Composer로 보냅니다 모든 계층에서 무엇을하고 싶은지 알려달라고 요청하십시오 모든 하드웨어 합성기는 독점적 인 조각입니다 사용중인 휴대 전화 또는 태블릿의 하드웨어 정보 우리가 쓸 수있는 방법이 없습니다

모든 다른 하드웨어 작곡가를위한 드라이버 저 밖에 그래서 대신, 하드웨어 작곡가의 그가하고 싶은 것을 우리에게 말해 줄 것입니다 따라서이 경우에는 레이어가 있습니다 하드웨어 작성자가 오버레이로 답장합니다 즉, 하드웨어 작성자가 픽셀 형식을 이해하고 있음을 의미합니다

그 창에 대해 그것을 처리 할 수 ​​있다고 알려줍니다 그리고 그 창문을 위해 작곡을 할 것입니다 그래서 우리는 계속 간다 두 번째 레이어에 오버레이가 표시됩니다 세 번째 레이어를 오버레이한다고 말하고 있습니다

그래서 훌륭합니다 즉, 모든 구성을 자동으로 수행 할 수 있습니다 우리를 대신하여 매우 효율적인 방법으로 이제 우리 지도자들은 모두 오버레이와 일치합니다 우리는 세트라고 부른다 이번에는 모든 레이어를 하드웨어 작곡가에게 보냅니다

실제 작곡을 위해, 그리고 하드웨어 작곡가 모든 것을 화면에 보냅니다 이제는 더 복잡한 예입니다 그래서 우리는 많은 수의 레이어를 가지고 있습니다 우리는 준비라고 부릅니다 처음에는 모든 것이 잘됩니다

하드웨어 작곡가는 오버레이라고 말합니다 그것은 그것을 처리 할 수 ​​있습니다 그러나 어떤 이유로, 다음 하나를 위해, 그것은 말한다, 프레임 버퍼 이렇게하면 픽셀 형식을 사용하는 경우에 발생할 수 있습니다 지원되는 것일 수도 있습니다

회전을 사용하여, 그리고 하드웨어 작곡가 알지 못한다 회전을 처리하는 방법 또는 화면에 너무 많은 레이어 또는 여러 가지 이유 그 하드웨어 작곡가에 특유한 것입니다 CHASE HAASE : 이것은 기기에서 훨씬 더 보편적이었습니다 아마 3 년에서 4 년 또는 그보다 더 오래 전에 그래, 맞아

우리는 약 4 개의 하드웨어 레이어를 사용했습니다 네가 사용할 수있는 네 명이야 5 점입니다 네 명이야 그래서 우리는 4 개를 가지고 있었고, Pixel 2에는, 너무 많은 세부 사항으로 들어가기없이, 당신은 기본적으로 7을 가지고 있습니다

그래서 예전보다 훨씬 나아졌습니다 그러나 Pixel 2 XL을 사용하는 경우 두 개의 레이어를 사용합니다 둥근 모서리를 그립니다 그래서 당신은 실제로 7이 없습니다 너는 5 명이있다

실제로 병합 될 수 있기 때문에 실제로 6 개입니다 하드웨어 작곡가 어쨌든, 많은 세부 사항은 정말 복잡 할 수 있습니다 모든 세부 사항을 알 필요는 없습니다 어쨌든이 경우 우리는 하나의 레이어를 가지고 있습니다

하드웨어 작곡가로 바로 갈 수 있습니다 프레임 버퍼로 표시된 두 개의 레이어가 있습니다 그리고 그것이 우리를 위해 어려운 부분이 시작되는 곳입니다 하드웨어에서 처리하지 않는 레이어가있을 때 작곡가, 우리는 그들을 합성하기 위해 GPU를 사용해야합니다 그래서 SurfaceFlinger는 모든 것을 할 수 있어야합니다

하드웨어가 할 수있는 것 그리고 그 상황에서, 우리는 기본적으로, 스크래치 버퍼 – 다른 레이어 – 우리가 알고있는 형식으로 하드웨어 작곡가 수락 할 수 있습니다 그런 다음 사용자 정의 OpenGL 코드를 사용합니다 그 두 계층의 구성을 스스로 할 수 있습니다 그럼, 일단 우리가 그 부분을 다 끝내면, 우리는 두 개의 레이어 만 남았고 우리는 그것들이 Hardware Composer로 보내질 수 있다는 것을 알아라

그래서 그것이 우리가하는 일입니다 우리는 set을 호출 한 다음 화면에 표시합니다 CHET HAASE : 그럼 언젠가 호기심이 생기면, 이 명령은 adb shell dumpsys SurfaceFlinger 명령을 실행할 수 있습니다 ROMAIN GUY : 자본금 S, 자본금 F CHET HAASE : 매우 중요합니다

그리고 그것은 당신이 원하는 것보다 더 많은 정보를 얻게 될 것입니다 그러나 그것이 당신에게 보여줄 것 중 하나 화면의 창에 대한 테이블입니다 현재 그들이 대표되고 있는지 여부 오버레이 또는 프레임 버퍼로 ROMAIN GUY :이 명령을 꽤 실행해야하지만 내부적으로 수많은 최적화가 있기 때문에 신속하게 처리 할 수 ​​있습니다 따라서 레이어가 잠시 동안 화면에 있었다

우리는 그들이 변화하지 않는다는 것을 알고 있습니다 그들의 하드웨어 작곡가가 그들을 붕괴시키고 있을지 모른다 다시 바뀔 때까지 단일 레이어로 그래서 그 명령의 출력은 때로는 조금 있습니다 오해의 소지가 있습니다 결과를 볼 수도 있기 때문입니다

시간에 기반한 최적화 따라서 가장 좋은 방법은 일반적으로이 작업을 실행하는 것입니다 애니메이션이나 무언가를 운영 할 때 화면에서 변경 중입니다 그것은 당신에게 가장 가치있는 정보가 될 것입니다 그래서 우리가 이야기하지 않은 몇 가지 다른 것들

텍스트를 무효화하는 변형을 사용하라고 알려 왔습니다 직사각형 뷰의 일부만 무효화 할 수 있습니다 당신이 다시 칠해야 할 필요가 있음을 알았습니다 이는 구형 Android 기기에서 특히 중요했습니다

대역폭이 극도로 제한 되었기 때문입니다 우리는 소프트웨어 렌더링을 사용하고있었습니다 그리고 우리를위한 GPU 렌더링의 초창기에도, 우리는 꽤 쉽게 GPU를 맥 아웃했다 그래서 그것들은 정말로 중요한 저축이었습니다 더 이상이 작업을 수행 할 필요가 없습니다

심지어 최신 버전의 Android에서도 이 기능이 사용 중지되기 전에 실제로는 시스템에서 무시됩니다 이제 어떻게 될까요? 무효화하거나 무효화 할 때마다 뷰에 직사각형이있는 경우 렌더링 스레드의 전체보기를 재검토하려고합니다 그 유일한 손상된 지역을 재 계산하십시오 그것에 대해 걱정할 필요가 없습니다 그리고 우리가 제거하고있는 이유 중 하나 저축을 위해 더 이상 필요하지 않을뿐만 아니라, 하지만 오류가 발생하기 쉽기 때문입니다

한 번에 하나씩 오류나 반올림하는 것이 쉽습니다 오류 및 화면에 아티팩트를 가져올 수 있습니다 그리고 쳇과 나는 그걸 증명할 수있어 우리가 너무 많은 버그를 링크 시켰기 때문에 API 사용 그리고 프레임 워크 자체에는 여전히 버그가 있습니다 그 주위에

이제는 걱정할 필요가 없습니다 RecyclerView는 이제 프리 페치를 수행 할 수 있습니다 항목의 미리 CHASE HAASE : 예, 우리는 이것을 일찍 언급했습니다 이것은 우리가 지금 나가고있는 승리 중 하나입니다

때문에 별도의 렌더링 스레드를 가지고, 지금, 음, 유휴 시간이 있어요 UI 스레드는 동기화 된 후에 작업이 완료되었습니다 음, 유휴 시간을 생산적으로 사용할 수 있습니다 물건을 가져 오는 것과 같은 다른 일을 할 때 그것은 다음 몇 프레임에서 필요할지도 모른다는 것을 알고 있습니다 로망 가이 : 작곡을 위해서, 내부적으로, 우리는 실제 디스플레이의 개념을 가지고 있습니다

이것은 사용할 수있는 API입니다 예를 들어, 그게 우리가 스크린 샷을 찍을 때 사용하는 것입니다 또는 비디오를 녹음 할 때 또는 우리가 캐스팅 할 때 – 예를 들어 Chromecasting 우리가 효과적으로하는 것은 SurfaceFlinger에게 컴포지션을 수행하지만 직접 표시하지는 않습니다 다른 표면으로

그래서 이것은 표면을 만드는 또 다른 방법입니다 관심이 있으시면 훌륭한 샘플 애플리케이션이 있습니다 GitHub에서 K를 사용할 수있는 Graphika가 있습니다 그것은 그래픽 회원이 썼다 몇 년 전에 팀에

그것은 기본적으로 모든 것을 모아 놓은 것입니다 당신은 SurfaceFlinger, Surface, 미디어 인코더가있는 SurfaceView와 가상 디스플레이가 결합되어 있습니다 이 코드는 매우 흥미로운 코드입니다 색상 변환 Android O에서는 색상 관리, 이것이 우리가 적용 할 수있는 색 변환 중 하나입니다

야간 조명과 같은 것들도 색상 변환입니다 우리는 또한 색맹 시뮬레이션을합니다 그것들은 하드웨어에 의해 처리 될 수 있습니다 특정 상황에서 작곡가, 그리고 그들은 성능 문제의 원인이 될 수 있습니다 예를 들어 잠시 후, 야간 조명 N5X 또는 N6B에서 지원되지 않았습니다

이유 중 하나는 하드웨어였습니다 우리는 색 변환을 할 수있는 드라이버가 없었습니다 그래서 우리는 GPU 구성으로 돌아 가야했습니다 정말 비쌌습니다 배터리를 아프게 했으므로 장치에 기능이 있습니다

그리고 Chet가 말했듯이, 더 많은 세부 사항들이 많이 있습니다 렌더링 파이프 라인에 대해 이것은 단지 매우 높은 수준의 개요였습니다 우리는 과거에 많은 회담을 가졌습니다 더 자세히 설명하는 우리는 예를 들어, UI 렌더링 자체에서, 일괄 처리 및 병합을 어떻게 처리할까요? 그런 종류의 최적화 그래서 당신이 관심이 있다면, 당신은 그들을 참조 할 수 있습니다

그림자 계산은 흥미 롭습니다 나는 우리가 우리가 이야기 한 이야기가 있었다고 생각한다 그 세부 사항의 그러나 렌더링 파이프 라인에 정확히 어디에서 적합합니까? 일종의 영리합니다 그러나 그렇다

더 많이 거기에서 계속하고있다 그러나 잘만되면, 이것은 Android에서 어떻게 작동하는지 일반적인 감각을 제공합니다 ROMAIN GUY : 그걸로 끝났습니다 우리가 거기 멈출거야 고맙습니다

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