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 개발자 사이트에서 사람들이 이해하고, 현재 릴리스, 필요한 작업량, 우리는 집합 적으로 생태계를 발전시킬 수 있습니다 고맙습니다 [음악 재생]

Principles of mobile app design: Delight users and drive conversions – Google I/O 2016

JENNIFER GOVE : 안녕하세요 어떻게 모든이다? 관객 : 좋습니다

제니퍼 GOVE : 좋아 그런 멋진 군중 오늘 내 이야기에 모두와 주셔서 감사합니다 제 이름은 Jenny Gove이고 저는 User Experience Researcher입니다 여기 Google에서

나는 지금 Google에 10 년 동안 이달에 있었는데, 그게 우연이라고 들었는데 [클리핑] 고맙습니다 나는 그것이 우리가 몇 년의 시간과 일치한다고 들었다 I / O 컨퍼런스 개최 그래서 두 주년, 정말 재미 있습니다 그래서 오늘 오후에 우리는 이야기 할 것입니다

훌륭한 앱 개발 및 원칙 수립에 대해 귀하와 공유하고 싶은 모바일 앱 디자인, 그래서 당신은 당신의 사용자에게 훌륭한 경험을 할 수 있습니다 그리고 왜 이것이 중요한가? 글쎄, 중요한 이유는 죄송합니다 각 앱에는 150 만 개가 넘는 앱이 있습니다 우리가 알고있는 상점 거기에는 많은 경쟁이 있습니다

앱이 유용성 결함으로 고통 받기를 원하지는 않습니다 나는 유용성 결함과 사용자 경험 문제를 생각한다 일부 앱의 참여가 부족할 수 있습니다 예를 들어 25 %의 앱과 같은 것을 배웠습니다 때로는 두 번 이상 사용되지 않고 34 %의 앱 11 번 이상 열리지 않습니다

따라서 주변에 이러한 통계가 있습니다 앱 참여 및 재 참여와 관련하여 우리는 그 문제 자체에 대해 많은 연구를하고 있습니다 구글에서 우리가 가지고있는 특정 제품들 그러나 나는 그것이 정말로 우리에게 일하고 있다고 생각한다 우리의 사용자 경험과 우리의 애플 리케이션에서 사용성 문제

그래서 저는 여러분에게 세 가지에 대해 이야기 할 것입니다 남은 얘기들 나는 너에게 경험에 관한 이야기를 할 것이다 최근에 앱을 가지고 있었다 나는 너에게 한 연구에 대해 말할거야

정말 멋진 앱을 만드는 방법을 이해하기 위해 도망 쳤습니다 경험 그리고 저는 몇 가지 원칙을 다룰 것입니다 우리가 온라인으로 발행 한 내용으로 이해할 수 있습니다 앱을 만들기 위해 할 수있는 핵심 사항 더 나은 경험

그리고 그 원칙들 내에서, 나는 너를 위해 많은 자원이있어 뿐만 아니라 그 길을 따라 도울 수 있습니다 그래서 내 이야기 가족과 휴가를 보내고있는 동안 여기에 우리는 플로리다에서 멋진 시간을 보내고 있습니다 저와 저의 파트너이자 아이들입니다

그리고 우리가 휴가를 가기 전에 우리가 머물기 위해 일련의 호텔을 세웠다 그것은 스스로 운전하는 여행이었고 나는 이것들을 미리 예약했다 – 나는 그것을했다 내 노트북에 플로리다에 도착했을 때 많은 호텔이 발견되었습니다 새로운 기술 – 앱을 최대한 활용하기 시작했습니다

구체적으로 – 나에게주기 위해서 나의 여행 중에 정말로 매끄러운 약간의 경험 그들은 내가 체크인 할 수 있도록하는 일을 지금하고 있습니다 내가 도착하기 전에 – 비행기를 타듯이 – 그리고 내가 열 수 있도록 내 방으로 곧장 갈 수있게 해줘 문, 응용 프로그램과 함께

꽤 멋지다 나는이 새로운 것들로 꽤 날아 갔다 그들이 할 수 있었던 일 하지만 내가 휴가를 갔을 때 무슨 일이 있었는지, 체크인 통보가 왔어 내가 뭔가에 일렬로 서있는 동안 이렇게, 테마 파크의 롤러 코스터

그것은 나에게 물었다, 내가 체크인하고 싶어 했느냐? 그리고 나도 나에게 물었다, 나는 자기 자신의 방을 선택하고 싶어했다 또는 나는 그들이 나를 위해 선택할 수있게 했습니까? 음, 내가 예약했을 때 나는 기억한다 텍스트 필드가 있었는데, 나에게 물어 봤어 내가 요청을 받았 더라면 나는 바다가 보였습니다 왜냐하면 저는 다음 호텔에이 아름답고 깨끗한 해변이 있음을 알았습니다

나는 발코니가있는 방을 주문했다 저는이 멋진 경험을 정말로 원했고, 바다를 내려다 보면서 하지만 노트북에서의 경험이 이 앱의 경험으로 바꿀 것입니다 나는 지금 직면했다 나는 그것에 대해 약간 염려했다

그리고 나는 더 나은 기회를 가질 수있을 것이라고 생각했다 내 방을 선택하는 것보다는 그들은 나를 위해 선택합니다 항상 당신 손에 맡기는 것이 더 낫지 요? 그래서 나는 내 방을 선택하기로 결정했다 그들이 나에게 준 것은 휴대 기기에서 꽤 좋았습니다 실제로 효과가있었습니다

나는 그것이보기에 상당히 도전적 일 것 인 것처럼 보인다라는 것을 알고있다 부동산의, 그러나 그것은 아주 잘 작동했다 그들은 분명히 다른 방을 배치했다 그들은 방의 출입 여부를 명확하게 표시했다 하지만 단 한 가지 문제가있었습니다

그리고 그것은 호텔이 어떤 방향으로 향하고 있는지 전혀 몰랐습니다 바다 앞 그래서, 나는 줄을 서 있었고, 알아 내려고 노력했다 어떻게 해결할 수 있을까? 이제 실제로는하지 않은 몇 가지 해결 방법이 있습니다 그 때를 생각해보십시오

Google지도, 어쩌면 Google 이미지를 파악하거나 볼 수도 있습니다 이 경우 호텔은 다소 대칭입니다 그래서, 그것은 매우 까다로울 것입니다 나는 일종의 엄지 손가락 규칙을 사용하기로 결정했다 그리고 내가 생각하기에, 가장 많이 찍은 방을 가진 쪽 아마 바다를 마주하고 있었던 쪽이었다

그래서, 여기 730 방을 선택하기로 결정했습니다 그래서 우리는 호텔에 도착해서 모든 가방을 가져 갔고 너 무슨 일이 일어날 지 알지? 나는 이것 같이 조금 보인 전망을 얻었다 [웃음] 큰 실망 그럼 내가 뭘해야 해? 그런데 나는 다시 모든 길을 가야했다, 다시, 리셉션에 – 나는 내가 생각했다 우회로, 응용 프로그램을 사용하여 – 접수와 이야기

그들은 매우 도움이되었고, lovely 한 호텔이었고, 그것을 고쳤다 나를 위해, 그리고 결국, 우리는 위로 올라 갔다, 다른 마루, 호텔에 들어갔다 나는 전망을 얻었다 그것은 훨씬 더 같았습니다 아름답군, 응? 이것은 실제로 플로리다입니다

바하마처럼 보입니다 정말로, 정말로 멋졌다 그래서 인 – 게스트 서비스는 인간의 개입이 요구되었다 앱이 실제로 제공되지 않았기 때문에 내가 바라는 서비스 너무 잘 했어, 나는 정말로 내가 사용할 수있는이 새로운 기술로 찍은, 그러나 그것이 배달되지 않았기 때문에 그것은 짧아졌다

이 중요한 정보는 나를위한 것입니다 나는지도상의 정보가 필요했다 이 경우에는 바다의 전망이 필요했습니다 약간의 파도 방금 오리엔테이션이 필요했습니다

그래서 나를 위해, 그것은 매우 비판적이었다 이 아름다운 해변에 대한 내 견해, 이 주차장보다 그리고 그것은 훨씬 더 비판적이었을 수도 있습니다 내 휴가에 아주 친애하는 것보다 그것은 클라이언트를위한 이벤트 매니저 예약 일 수 있었지만, 아마 그것은 손님들을 위해 예약 된 사람들이었을 것입니다

결혼식이나 무언가를 위해서 한 가지 교훈은 분명합니다 우리는 개발자와 디자이너로서 전체 흐름을 이해할 필요가있다 우리 사용자가 겪고있는 그리고 그 부분은 부서집니다 이것은 정말로 시원하고 신기술이었습니다

그러나 나는 모든 것을 통해 백 트랙을 정렬해야했다 그 앱이 살 일걸요 날 구해줘 그래서 그 경험을 정말로 이해합니다 처음부터 끝까지

그리고 저는 모바일에서 생각한 것은 그 작은 것들입니다 우리는 우리가해야 할 것을 깨닫지 못한다 그래서 우리가 정말로 이해해야하는 이유입니다 사용자의 관점과 사용자의 경험 그래서, 제 이야기는 그런 것들에 관한 것입니다

그리고 우리가 그들을 어떻게 고칠 수 있는지 내가 너에게 약간의 역사를 알려줄 께 2 년 전, 우리는 많은 경험 특히 모바일 웹의 경우 문제가 많았습니다 사람들을 위해 그래서 우리는 대규모 연구를 수행했습니다

어떤 일이 일어나지 않았는지 이해하려고했습니다 모바일 웹 용으로 올바르게 구현, 우리가 더 잘할 수있는 곳, 우리는 모바일 웹을위한 25 가지 원칙을 발표했다 그것들은 정말로 잘 해냈습니다 사람들은 그것을 일종의 초기 단계로 사용했습니다 더 나은 사용자를 제공하기위한 좋은 방법 모바일 웹에서의 경험

하지만 그뿐 아니라 우리는 사람들이 우리에게 돌아와서 말했습니다 이것은 모바일 웹에 적합하지만 내 앱입니다 내 앱은 어떨까요? 내 앱에 대해 말해 줄 수 있습니까? 그래서 나는 다른 연구를하라는 부름을 많이 받았다 그리고 애플 리케이션에 대한 연구, 그래서 우리가 한 일 이죠 최근에는 연구에서 기본 앱을 살펴 보았습니다

오늘 내가 너에게 선물 할 원리들 그 일의 결과입니다 이 연구에서 우리는 특허를 이해할 수있었습니다 운 좋게 사용자 경험을하게하고, 운 좋게 행복하게 우리는 일부 회사가 더 나은 방법으로 구현 된 것들, 그 특허가 왜 더 잘 작동하는지 이해하십시오 그것들을 당신에게 가져 오십시오

그리고 이것을 잘 이해하는 것이 우리에게 중요합니다 그래서 우리는 원칙에 확신을 가질 수 있습니다 우리가 말하고있는 것, 그리고 너 자신의 제품에이를 구현하는 데 자신감을 가질 수 있습니다 그래서이 연구를하기 위해 우리는 회사와 파트너 관계를 맺었습니다 AnswerLab이라고합니다

그들은 사용자 경험 컨설팅 기반 샌프란시스코 그리고 우리는 그들과 협력하기 때문에 우리가 연구를 원했기 때문에 규모를 조정할 수있었습니다 꽤 큰 규모입니다 모바일에서 100 가지 앱에 대한 상호 작용을 연구했습니다 그래서 이들은 대형 소매점, 소규모 서비스 제공 업체를 통해 우리는 뉴스 앱을 보았고, 우리는 많은 다른 종류를 보았다

식료품 점과 같은 서비스, 여행 서비스, 소매업, 중소기업 우리는이 일환으로 게임을 보지 않았습니다 그것은 의도적으로 이루어졌습니다 왜냐하면 우리는 그것이 약화 될 것이라고 느꼈기 때문에, 또는 희석, 원리 우리는 게임이 아마도 완전히 다른 세트를 가지고 있다고 생각합니다 그걸 제외하고, 우리는 다양한 수직 계열을 조사했습니다

그리고 우리는 샌프란시스코, 시카고, 뉴욕시 이제이 연구에 참여한 103 명의 참가자가있었습니다 그래서 사용성 연구를 위해, 그것은 정말로 크다 그들은 개별적으로 실험실에 들어 왔고, 각각 90 분 동안 따라서 155 시간의 사용성 연구가 가능합니다

그래서, 만약 당신이 밤새도록 그리고 하루 종일 밤새 위로 머물렀다면, 그것은 거의 일주일이 될 것이고, 휴식을 취하지 않을 것이며, 실제로는, 그것은 일주일에 거의 4 주 정도가되었습니다 그래서, 실제로 큰 연구가 있습니다 그래서 우리는이 다른 수직을 커버 할 수있었습니다 그리고이 연구에서 우리는 무엇을 했습니까? 음, 사람들이 연구에 들어갔다 90 분 동안 그들은 정말 6 개의 앱을 사용할 수 있습니다

그것들 각각에 대해 좋은 일을하고 있습니다 그들은 그들과 함께 자신의 휴대폰을 가져 왔고, 그 이유는 우리가 그들을 원했기 때문입니다 전화에 정말 익숙합니다 그리고 우리는 어떤 문제도 원하지 않았습니다 다른 기기이거나 그렇지 않았습니다

뒤로 버튼 또는 그와 비슷한 것에 익숙합니다 그래서 Android는 약 50 %, iOS는 약 50 %를 차지했습니다 그리고 연구에 참여했을 때 우리는 무엇을 했습니까? 그래서, 우리는 다른 작업을하고 다른 시나리오를 설정했습니다 그들을 위해 우리는 그 일을 무언가로 만들기 위해 최선을 다했습니다

그들에게도, 그들이 할 수 없도록, 우리가 부르는 것을, 만족스러운 일을하는 것입니다 가능한 한 빨리 작업을 수행 할 수 있습니다 그들이 할 수있는 한 우리는 그들이 그 일에 관심을 갖길 원했습니다 그래서 우리는 그들이 관심을 갖는 것에 관해 종종 그들과 이야기했습니다

이 예에서 우리는 그들과 대화 할 수 있습니다 좋아하는 음식에 대해 이해하고 이해합니다 먼저 그들로부터 무엇인가, 그 전에 그들이 그것을 주문할 수 있는지를 물어보기 그날 저녁 저녁 그리고 우리는 그들이 큰소리로 말하게했습니다, 사용성 용어로 불리는 것이 무엇인지, 생각대로하는 프로토콜을 사용했고, 우리는 그렇게했습니다 그래서 우리는 그들이 고통의 포인트를 이해할 수 있었다

그들이 다른 업무를 수행 할 때 맞았다 그들이하고있는 일을 어디에서 물건이 원활하게 흘러 갔는지 이해하십시오 그렇게 해본 결과 우리는 데이터를 취했습니다 – 많은 데이터가있었습니다, 당신이 상상할 수 있듯이, 그 많은 유용성 자료 – 우리는 그것을 25 가지 원칙으로 정리했습니다 그래서 이것은 당신이 취할 수 있고 이해할 수있는 것입니다 자신의 앱에 적용 할 수 있습니다

우리는이 원칙들을 6 개의 챕터로 분류했습니다 하지만 내가 그들에게 들어가기 전에, 나는 우리가 실제로이 25 가지를 어떻게 얻었는지 설명합니다 그래서 그것을 25 가지 원칙으로 만들기 위해, 우리는 이것이 넓은 범위의 문제라는 것을 알아야했습니다 우리는 그것을 알아야만했다 상당히 일반적인 문제였습니다

우리는 25 가지 이상의 것들을 만났습니다 앱에서 문제가 있었지만 우리가 가장 큰 문제를 치고 있는지 확인하기 위해, 우리가 더 나은 방법을 구현 될 수있다 승인 그래서, 우리가 가지고있는 다른 장 앱 탐색 및 탐색, 앱 검색, 상거래 및 전환, 등록, 양식 입력 및 유용성 및 이해력 이제 우리는 25 가지 다른 원칙을 가지고 있습니다

하지만 여기서,이 이야기에서, 나는 단지 두 가지 원칙으로 갈 것입니다 각 챕터와 나머지 원칙들 온라인으로 사용할 수 있습니다 나는 또한 당신을위한 자원을 모아 봤다 일부 구현에 도움이되는 당신이 여기서 보는 것들 스크린을 찍을 좋은 시간이 될 것입니다

그것은 당신이 당신 자신의 시간에 들여다 볼 수있는 자원이기 때문에, 더 자세하게 이제 앱 탐색과 탐색부터 시작하겠습니다 따라서이 장은 실제로 사용자에게 내용을 안내하는 것에 관한 내용입니다 그들이 찾고있는, 빨리 그래서 우리는 일련의 핵심 원칙들을 모았습니다

효과적이고 유쾌한 앱 탐색을 만드는 데 도움이됩니다 이제 이들 중 두 가지를 살펴 보겠습니다 따라서 사용자에게 큰 도움이 될 수있는 기능 위치를 자동으로 감지하지만하지 않습니다 위치 기반 작업이 필연적으로 예외없이 현재 위치를 기반으로합니다 우리는 이것을 너무 자주 본 것 같아요

그래서 정말 대단한 일입니다 구현하고 도움을 줄 수있다 사용자가 무언가를 원할 때 끊김없는 경험 위치는 있지만 기본적으로 사람들을 활성화시키는 방법없이 과도하게 적용된 것을 보았습니다 해당 위치를 변경하십시오 그래서이 예에서 누군가 오늘 밤 호텔을 찾고 있습니다

그들이있는 곳 근처의 호텔을 찾고 있습니다 불행히도, 위치를 바꿀 수는 있지만, 그것을하는 유일한 방법은 아마도 설정을 통과하는 것입니다 우리는이 문제를 여행 앱뿐만 아니라, 소매 앱에서도 사용했습니다 우리는 무언가를 찾고 싶어하는 사람들의 유스 케이스를 보았습니다 상점에 있었지만 그 위치는 아마도 부모가 살고있는 곳 근처에서 그 가게 근처에 있었는지 알아 내고 싶었다

부모님 께 그 사실을 알릴 수 있도록 그래서 단지 이것을 제공하는 것입니다, 기본적으로 우리는 우리는 너무 많은 사용 사례를보고 있습니다 시나리오 밖이었습니다 여행에서 우리는 사람들이 나타날 곳을 보았습니다 그들의 교통 수단과 그들이 원했던 호텔 기차역의 다른 쪽 끝에 책을 썼다 라인, 그리고 그들은 지금 호텔을 예약 할 시간이 있었는데, 하지만 그들은 그들이있는 곳에 있지 않습니다

당시 호텔이 필요했습니다 훨씬 더 나은 시나리오는 여전히 사람들이 현재 위치를 사용할 수있게하고, 그러나 그들을 잘 변화시킬 수있는 자원을 제공해야합니다 근본적으로 위대하고 위대한 기술입니다 분명히 당신이 사용하도록 권장하지만, 그것은 과도하게 적용된 종류입니다, 화면의 일부를 사용하지 않고 부동산 사용자가 위치를 변경할 수 있도록합니다 그 자동 감지 위치를 사용하고 싶다면, Google Places API를 사용하면 현재 지원되는 위치를 알아 내려면 우리는 당신을위한 짧은 링크가 있어요

저 재료에 도착하기 위해서 앱 탐색 및 탐색의 또 다른 측면 우리가 애플 리케이션으로 공정한 비트를 본 것은 앱에서 모바일 웹으로 이동합니다 그리고 내가 작성한 방식으로 볼 수 있습니다 이것을하는 것에 문제가 있다는 원칙 그것은 app-to-web 전환이 필요한 곳에, 그래서 그들이 필요한 곳에 마찰이 가해지지 않도록하십시오

그래서 저는 여기 아이디어가 각각의 경우에 정말로 필요하다고 생각합니다 그것을 위해? Google은 여기 Google에서 기술을 만들기 위해 노력하고 있습니다 이 장면을 훨씬 더 부드럽게 만들기 위해 필요한 전환점 그것을하기 위해, 그러나 현재, 우리는 여전히 적어도 일종의 성능 저하를 봐라 그래서, 정말로 당신이 가지고 있는지 모바일 웹으로 사람들을 밀어 넣는다 그들이 지금 앱 경험에있을 때, 그런 다음 마찰이 없도록하십시오

따라서이 예에서 우리는 누군가 누가 비행기를 탑승하는지 이것은 아주 평범한 상황이 될 수 있습니다 사람들이 모바일 웹으로 이동합니다 그러나 우리가 자주 본 것은 단순히 여행 앱에있는 것이 아니라, 다른 시나리오에서도 우리는이 경험을 보았습니다 근본적으로 변한다

그래서 우리는 이런 것을 보았습니다 승인? 그리고 때로는 일어날 수 있다고 생각합니다 팀의 조직 구조 때문입니다 알다시피,이 앱 팀이 모바일 웹입니다 팀, 그리고 그들은 충분히 말하지 않았어, 그렇지? 그래서 저는 몇몇 회사들이 더 좋은 일을하고 있다고 생각합니다

이 팀은 함께 사용자를 계획 할 수있게합니다 경험, 모양과 느낌, 내용 배치 방법에 대해 설명합니다 그런 다음 실제 구현을 분리합니다 다른 플랫폼에서 따라서 더 나은 경험은 회사들은이 점에 대해 정말로 사려 깊다

그리고 그 모습과 느낌을 매우 매끄럽게 만들 수 있습니다 모바일 웹으로 바로 이동할 수 있습니다 안드로이드에서, 우리는 이것에 대해 약간의 연구를하고 있습니다 Chrome Custom이라고하는 몇 가지 기술이 있습니다 살펴 봐야 할 탭

그것은 당신을 활성화 시키는데 정말로 도움이됩니다 툴바 색상 변경, 종료하고 애니메이션을 입력하여 해당 앱에서 이동하는 전체 과정 모바일 웹에보다 원활하게 전달할 수 있습니다 두 번째 장으로 이동하십시오 따라서 앱 검색에서의 중요성 정말로 과소 평가 될 수 없습니다 이제 몇 가지 중요한 검색 구현에 대해 이야기 해 보겠습니다

따라서 검색 필드를 눈에 잘 띄게 표시합니다 우리는 모바일 웹 연구를했을 때 이걸 발견했습니다 검색의 중요성에 대해 따라서 가난한 사례에서 우리는 사람들이 그것을 찾을 것으로 기대하는 장소에서 검색, 그러나 텍스트를 찾기 위해 그것을 어떻게 기대할 것인가가 아닙니다 이리 우리가 본 연구에서 사람들은 수색을 위해 주위를 둘러보고있는 약간의 좌절을 가지고 있었다

때때로 그것은 메뉴 아래에 숨겨져 있었고, 가장 분명한 것 중 하나 인 것처럼 들리지만, 그러나 나는이 연구에서 내가 본 것에 대한 나의 요약이 무엇인지, 개발자와 디자이너가 구현하지 않았다는 것입니다 충분한 검색 필드 영구 검색 필드를 포함해야합니다 검색이 정말로 중요한 부분 일 때 앱에서의 내 경험에 대해 무슨 일이 일어나고 있는지 생각하는 사람들이 많이 있습니다 검색이 중요하다고 생각하지만 그렇지 않습니다

스크린 부동산을 바치는 것이 중요합니다 그러니 앱에서 확인해보세요 현재보다 현저하게 강조해야할까요? 아르? 그래서 우리는 이것에 대한 조언을 Material Design에두고 있습니다 그리고 우리는 지속적인 검색을하고 검색 필드에 넣고, 확장 검색도 있습니다 우리는 유리 모양의 아이콘을 가질 수 있습니다

물론 검색을 위해 확장되었습니다 앱에서 검색의 중요성에 대해 생각해보십시오 그리고 사람들이 얼마나 중요한지는 중요합니다 검색 유형에 대한 결정 구현해야합니다 그리고 구현 세부 사항을 위해, 검색 대화 상자와 검색 위젯이 있습니다

이 링크를 클릭하면 더 많은 정보를 얻을 수 있습니다 필터 및 정렬 옵션은 어떻게됩니까? 대단히 중요합니다 다시 한 번, 우리는 그들이 숨겨져 있거나 일종의 묻혀있는 것을 보았습니다 또는 더 아래로, 사람들은 그들에게 갈 수 없었다 그들이 필요로하는만큼

그것은 우리가 최근에 한 우리 연구가 보여준 것입니다 우리는 그것의 훌륭한 구현을 보았습니다 그러나 아직도해야 할 일이 더 있습니다 셔츠에 대한 결과 242 개, 필터링하거나 정렬 할 방법이 없습니다 따라서, 더 나은 구현은 정말 좋은 클리어 버튼

필터 사람들은 그것을 아주 분명하고 쉽게 볼 수 있습니다 그리고이 예는 의류에 대한 것입니다 이 패널을 모든 올바른 종류로 슬라이드했습니다 그 (것)들을위한 수색 선택권의

그래서 당신은 베스트 매치, 최신 콜렉션, 그런 종류의 것 내가 이런 필터를 보았을 때 한 가지는, 몇몇 회사들은 예를 들어 사이징을 실시하고 있었고, 재고가 없을 때, 그리고 그것은 사람들에게 문제를 일으켰습니다 그들은 그들이 이제까지 할 것인지 알지 못했기 때문에 재고가 그들의 크기가 그래서 여분의 작은 것을 빼앗긴다고 상상해보십시오 그냥 그것이 주식에 없었기 때문에, 사람들 그것이 다시 올지 모르겠다

그보다 나은 경험은 그들을 가능하게하는 것과 같습니다 아마 재고가 언제 돌아 왔는지 알아보기 위해 가입하십시오 그러나 확실히 그것을 보여주고, 그것을 안정된 상태로 보여준다 좋다 그래서 여기에 색과 가격 그리고 또 다른 한가지가 있습니다

나는이 디자인에 대해 좋아한다 필터를 지우거나 필터를 적용한 다음 패널을 닫으려면 맨 위의 별도 수표, 그래서 패널을 닫는 것에 대해 혼란스럽지 않습니다 않습니다 따라서이 주제에 대한 검색을 유지하면서, 사람들에게 검색을 돕는 다른 방법이 있습니다 그 중 하나는 사용자 정의 제안 추가입니다

이는 응용 프로그램의 데이터에서 만들 수 있습니다 그래서 그것은 사람들이 그들의 수색에 정말로 도움이 될 수 있습니다 또 다른 하나는 최근 질의 제안입니다 그래서 모든 기술과 시설 그 검색 경험을 향상시킬 수 있습니다 보다 깊이있는 검색 경험을 통해 생각해보십시오

좋은 주제입니다 상거래 및 전환 따라서 사용자는 앱이 정말 부드럽길 기대합니다 제품을 찾고, 학습하고, 구매하는 경험 그럼 몇 가지를 살펴 보겠습니다

이 연구에서 상거래 및 전환에 대한 정보가 공개되었으며, 전환 경험을하도록 돕습니다 따라서 비교 쇼핑 기능을 사용할 수 있습니다 이 예에서 왼쪽의 여기에 부동산 앱, 여기, 그리고 사람들에게 그냥 그들은 아래로 스크롤하여 볼 수 있습니다 다른 집에서 그들이 좋아하는 것, 그들은 기억에 의지해야하며, 사람들, 우리, 너와 나, 우리는 모두인지 주의자이다 우리는 우리의 두뇌를 그렇게 많이 사용하는 것을 좋아하지 않습니다 그리고 우리는 사용자가 자신의 뇌를 많이 사용하도록 만들고 있습니다

여기, 그들이 물건 등을 보았던 곳을 기억합니다 그러나 우리는 더 잘할 수 있고 그 중 일부는 할 수 있습니다 우리가 본 것은 사람들을 돕기 위해 이런 방식으로 우리는 사람들에게 북마크 아이템을 제공하게됩니다 그들은 그것을 보았습니다 그래서 그들은 그것을 비교할 수있었습니다

모바일에서이 작업을 수행하는 것은 여전히 ​​매우 어렵습니다 그러나 여전히 우리가 할 수있는 모든 일이 도움이됩니다 그래서 저는 여기서 당신을 보여 드리겠습니다 사람들이 비교할 수있게했다 그리고 나서, 당신은 그것이 꽤 제한되어 있음을 볼 수 있습니다, 전화의 크기와 함께,하지만 여전히, 당신은 그 정보를 모으는 것

그것은 그들이 다른 모든 가정을 무시할 수 있다는 것을 의미합니다 걱정하지 않고 침실을 비교할 수 있습니다 그들은 욕실을 비교할 수 있습니다, 가정의 비용, 기타 등등 우리는 이것이 필요하다는 것을 알고 있습니다 연구에서, 우리는 사람들이 이에 대한 대안을 취하는 것을 보았습니다

그래서 소매상에서 사람들이 장바구니에 품목을 추가하는 것을 보았습니다 단지 그들이 같은 장소에서 그들 모두를 볼 수 있도록 그리고 그 일을 생각하는 사용자가있었습니다 다른 사람들이 어려움을 겪었습니다 그래서 우리는 이것이 필요하다는 것을 압니다

비교 및 탐색 경험에 대해 생각해보십시오 앱 내에서 사람들이 필요로하는 것 그런 다음 결제 수단을 쉽게 추가하고 관리 할 수 ​​있습니다 나는 다른 날에이 사실에 대한 가난한 예를 실제로 발견했습니다 내가 물건을 사러 갔을 때였습니다

나는 다시 휴가를 가고 있었다 나는 휴가를 가기를 좋아한다 그리고 나는 예약을하고 있었다 임대 주택 그리고 카드를 업데이트해야 할 시점까지갔습니다

내 머리 속의 나의 모델은 음, 새 카드가 도착했다 이전과 같은 카드 일뿐입니다 그것에 날짜가 새겨졌습니다 내 마음 속에는 내 카드에 대한 내 정신 모델이 있습니다 그것은 같은 카드입니다

그냥 교체가 필요합니다 새로운 결제 수단이 아닙니다 그래서 기존 카드를 편집 할 수있을 것으로 기대했는데, 그러나 그것을 할 수있는 시설이 없었습니다 그래서 나는 개발자의 모델을 이해해야 만했다 새로운 결제 수단을 추가해야했습니다

이 예에서는 그 사람이 그들이 체크 아웃되고있는 지점까지, 하지만 카드를 편집하거나 새 카드를 추가 할 방법이 없습니다 그것은 다른 곳에서도 가능합니다 하지만 우리 대부분은 생각하지 않습니다 글쎄, 나는 아침에 일어나서 생각할 것입니다 해당 앱에서 결제 수단을 관리해야합니다

종류가 별개의 활동입니다 맞습니까? 우리는 필요할 때 그것을 생각하는 경향이 있습니다 우리가 돈을 낼 때 그래서, 여기에 문제가 있습니다 따라서이 예에서는 훨씬 좋습니다

기존 카드를 편집 할 수있는 옵션이 있습니다 새 결제 방법을 추가합니다 여기에 여러 가지 결제 수단을 제공하고 사람들을 유도합니다 매우 깨끗한 형태의 디자인으로, 여기, 사용자가 새로운 신용 카드를 추가하기로 선택한 경우, 원할 경우 카드를 스캔 할 수도 있습니다 그래서 그 경험을 멋지고 깨끗하게 만드십시오

이제 Google에서 제공하는 하나의 시설 Android Pay는 그 중 하나를 선택하는 방법입니다 지불 할 이 아이디어는 사용자에게 매우 간단합니다 사용자가 Android Pay를 통해 원활하게 결제 할 수 있으며, I / O에는 여기에 대한 이야기가 있다고 생각합니다 이 링크에서 더 많은 정보를 얻을 수 있습니다

그래서 등록 등록은 회사 및 개발자에게 매우 인기가 있으며, 그게 그렇게 보였으니까 우리가 사용자로부터 참여를 얻을 수있는 곳입니다 그것은 사용자가 우리에게 맡기는 곳입니다 우리는 오래 전부터 이러한 등록을 제공 한 사실을 알고있었습니다

장벽이 앞에있는 것은 사람들이 도달하기위한 커다란 장애물이 될 수 있습니다 먼저 뭔가를 제공하는 것이 낫습니다 그래서 그들은 그들의 편에서의 참여를 느낄 수 있습니다 회사에 다른 몇 가지가 있습니다

등록과 관련하여 오늘 이야기하고 싶습니다 그래서 우리는 사용자들이 로그인하고 가입하는 데 어려움을 겪고있는 것을 보았습니다 까다로운 일이지, 그렇지? 우리는 종종 사용자가 양식을 작성하는 것을 보았습니다 그들이 제공 되었다면 그들이 가입하기로되어있을 때 서명하고 있었고, 그 반대 아마 우리 모두에게 일어난 일입니다

그래서 우리는 더 나은 경험을 발견했습니다 사람들에게 로그인하거나 등록 할 수있는 옵션이 주어졌습니다 그 단어들은 매우 달랐고, 그것들을 구별 할 수 있었고, 우리는 그들을 올바른 길로 끌 수 있습니다 그래서 그들은 그 혼란에 빠지지 않았습니다 우리는 등록 및 신원에 대한 솔루션을 많이 보유하고 있습니다

Google에서 우리는 전체 ID 플랫폼을 가지고 있습니다 내가 너를 보라고 권하고 싶다 기본적으로 인증 시스템입니다 몇 가지 구성 요소와 다양한 선택 사항이 있습니다 만들다

그래서 이들 중 하나는 Android 용 로그인입니다 사용자가 동일한 자격 증명으로 로그인 할 수 있습니다 그들은 Google에서 사용합니다 전체적인 의도는 그 과정을 더 많이 만드는 것입니다 쉽고 간단합니다

그 이야기는 다른 방법이 있습니다 암호 인증을 마찰없는 경험으로 만드십시오 우리 모두는이 상황에 처해있었습니다 우리에게는 효과가 없으며 모바일에서는 상당히 고통 스럽습니다 비밀번호를 계속 입력하면 작동하지 않습니다

앱에서 더 악화 될 수 있습니다 이 곳이 사람들이 돌려 보내진 곳이라는 것을 알았습니다 모바일 웹에 연결 했지, 그렇지? 그럼, 당신은 다시 그 고리에있어, 그리고 그것은 더욱 악화되고 있습니다 그래서 우리는 하나의 솔루션에 대해 이야기했습니다 사람들이 로그인 할 수있게 해줍니다

우리가 보았던 또 다른 하나는 훨씬 더 대중적이되고 있습니다 지문 입력이고, 우리의 연구에서, 사람들은 이것에 대해 꽤 행복했습니다 그들은이 일을 아주 많이 좋아했습니다 그래서 나는 이것이 좋은 것으로 생각합니다 또한 구현 세부 정보가 더 있습니다

여기서 지원되는 장치에서 지문 스캔을 사용합니다 그리고 Smartlock은 우리의 정체성 시스템의 또 다른 부분입니다 그것은 당신이 자동으로 사용자에게 응용 프로그램에 로그인 할 수있게하고, 그들이 저장 한 자격 증명을 사용합니다 그것은 또 다른 좋은 것입니다 이 연합 신원 조항의 일부 그리고, 만약 당신이 사용자들과 멀리 떨어져 있지 않다면, Sign-in Hints도 있습니다

우리에게 자격 증명 API를 사용하십시오 로그인시 사용자에게 힌트를 줄 수 있으며, 사용자 이름과 이메일 주소 모든 것은 서명 허들과 같은 쉬운 일종의 방식으로 이루어집니다 그래서 폼 엔트리 양식 입력에 대해 디자인에서 이야기했습니다

년과 년 동안 우리는 데스크톱 양식 입력 작업을 많이했는데, 우리가 모바일 웹에 갔을 때, 우리는 다시 모든 것을 다시 배우어야했습니다 그 양식들이 실제로 정말로 작고, 양식을 작성하기 위해 확장해야합니다 항상 앱으로 조금 더 나아졌습니다 우리가 양식을 디자인했기 때문에 모바일 장치의 구매부터

그러나 나는 말하기를 기쁘게 생각한다, 나는 우리가 먼 길을왔다라고 생각한다 그러나 우리 연구에서 보았던 것들이 아직도 있습니다 개선 될 수있다 그래서 저는 이것을 사용자 친화적 인 형태로 분류했습니다 내가 본 것들 중 몇 가지는 여전히 사용자가 자신의 업무에 많은 작업을해야하는 일부 앱

여러 다른 필드에 커서 놓기 그들의 전화 번호, 그리고 이런 것들에 대해서, 사용자 측에서 많은 노력이 필요합니다 또한 양식 필드가 어떻게 나타나는지 보려고 지불하지 않았습니다 사용자에게 문제가되었습니다 그 (것)들을 위해 종류를 분류하는 것은 단단했다 그들이 다음에 채워야 할 것의 그들의 정신 모델 그것들은 좌절감을 일으켰고 확실히 마찰적이었습니다

포인트 더 나은 교전은 여기에서 더 많은 일을하고 있습니다 백 엔드에 따라서 사용자가 휴대 전화에 글을 쓰고 싶어하는지 숫자 사이에 대시가있는 숫자, 숫자 사이에 공백이 있으면 아니면 하나의 긴 필드 일뿐입니다 그리고 그것을 만들어라

그것은 우리를 위해 조금 더 많은 일을한다 개발 측면에서,하지만 그것은 사용자가 훨씬 쉽게 사용할 수 있습니다 그들이하는 일을 이해하고, 오류가 반환되지 않습니다 또한 오류가있는 곳에서도 인라인을 제공합니다 정말 도움이됩니다

여기 앱에는 양식을 현장으로 옮기는 정말 좋은 직장 사용자가 정보를 입력하면 이는 사용자에게 매우 유리한 결과였습니다 따라서 멋진 텍스트 필드를 만드는 방법에 대한 많은 정보가 있습니다 머티리얼 디자인을 통해 서로 다른 측면에 대해 많은 이야기 좋은 양식을 만드는 것 특히 장소에 대해서는 지역 정보 자동 완성 기능을 사용할 수 있습니다

Places API의 일부로 다시, 그리고 이것은 이러한 형태로 채우는 데 정말로 도움이 될 수 있습니다 위치가 필요한 필드 양식 디자인의 또 다른 측면은 키보드와 일치하는 것입니다 필요한 텍스트 입력 이것은 꽤 잘 알려진 일이며, 그러나 우리는 여전히 잘 수행하지 못하는 중요한 앱을 보았습니다

따라서 사용자가 신용 카드에 커서를 올리면 필드에 추가하고 앱에이 항목이 있다면 너는 그것을 조사해야한다, 그것이 옳은 일을하고있는 것인가? 이 예에서는 여기에 올바른 일을하지 않습니다 사용자는이 키보드를 그대로두고, 올바른 키보드를 얻을 수있는 방법이 없습니다 대개는 아니지만, 여기에 숫자 키를 치고 나서 그들은 상단에 숫자가있는 키보드를 갖게 될 것이고, 적절하게 설계하는 것과는 대조적으로, 한 번 커서가 안에 있으면 그 (것)들을위한 숫자 키보드 이렇게 작은 것들, 양식에있는 모든 작은 것들 실제로 추가하고 양식 디자인을 체크 아웃하십시오 이런 식으로 사람들에게 정말로 도움이됩니다

입력 방법 지정에 대한 정보가 있습니다 이 링크에서 찾을 수있는 키보드 유형과 올바른 키보드 그런 다음 마지막으로 유용성과 이해력을 살펴 보겠습니다 이것들은 당신이 할 수있는 작은 것들입니다 우리가 우리 연구에서 보았던 것, 애플 리케이션을 통하여, 사용자들에게보다 자연스러운 경험을 제공합니다

우수한 사용자 경험을 보장하는 데 중요 할 수 있습니다 사용자가 걸려 넘어 지거나 경험을 포기하지 않는 경우, 언제든지 이것은 텍스트 레이블 및 시각적 키 제공에 관한 것입니다 시각적 정보를 명확히하기 위해 그래서 이전에 이것을 보았습니다 제 이야기에서 저는 시각적 인 열쇠가 빠져있었습니다

그 그림 속의 파도가 필요해 호텔의 방향을 이해하는 데 도움이됩니다 이 예제를 보자 몇 순간을 가지고 자신을 결정하십시오 그 아이콘이 나타내는 것이라고 생각하는 것

그들 중 일부는 아마 다른 사람들보다 분명합니다 답을 봐야할까요? 여기에 우리가 간다, 그래서, 그것은 나의 여행, 책, 클럽, 그리고 계정이다 누구가 그 (것)들을 맞았 는가? 나는 아마 계정이 그렇게 나쁘지 않았다고 생각한다 그러나 우리가 본 교훈은 다시, 나는 그것이 지나친 일반화라고 생각한다 우리가주는 규칙은 아이콘이 모호하고, 텍스트 레이블이 꼭 필요합니다

문제는 말하기에 때 아이콘 모호하다 우리 모두는 서로 다른 수준을 가지고있다 이해와 관련하여 너는 내가 생각하기에, 너의 많은 아이콘들 애매하게 될 것입니다 나는 당신에게 모범을 줄 수있다

따라서 필터 아이콘을 알 수 있습니다 이런 식으로 보이니? 그렇게 보편적이라고 생각할 수 있습니다 그것은 아주 다른 방식으로 그려집니다 많은 다양한 앱에서 보편적으로 사람들 사이에서 이해되는 것을 발견하지 못했습니다 그래서 나는 우리가 우리의 수준을 바꿔야한다고 생각합니다

앱의 아이콘 수와 관련하여 설정 라벨이 필요한 사람들, 사람들이 그것을 이해할 것입니다 그리고 이것은 매우 훌륭한 곳입니다 간단한 AB 테스트를 수행하고 레이블 제공 여부와 차이점 레이블을 제공합니다 여기에 구현 세부 정보가 있습니다 단추에 텍스트와 아이콘을 사용하려는 경우

그래서 그걸 가지고 있다면 그리고 라벨을 붙이는 것에 대해 이야기하고, 항상 저를 깨닫게 해줍니다 내 응용 프로그램에 액세스 할 수 있습니다 여기에는 많은 가이드 라인이 있습니다 응용 프로그램에 액세스 할 수 있는지 확인하십시오

그리고 오늘 내가 들어가야 할 마지막 원리 컨텍스트에서 사용 권한을 요청합니다 그래서, 이것은 우리가 Android M으로 가능하게 한 것입니다 하지만 우리는 여전히 상당수의 앱을보고 있습니다 그것을 이용하고 있지 않다 잠시 동안 iOS가 가능할 수있었습니다

지금도 따라서이 예에서 사용자는 다운로드 및 응용 프로그램을 열고 그들은 즉시 묻습니다, 위치를 사용할 수 있습니까? 그래서 아마이 앱은 그들에게 제안되었습니다 다른 누군가에 의해 그들은 오, 이것이 정말 좋은 앱이라고 말했다 당신이 가정 장식에 대해 배우고 싶다면, 그리고 그것은 당신이 살 수있는 몇 가지 정말 멋진 것들을 가지고있어

그러나 우리와 비슷한 방식입니다 문제가되는 등록을 생각 하겠지? 당신이 그것을 앞쪽에 요구할 때 넘어서 오는 장애물입니다 이것은 사용자에게 똑같습니다 개발자들이 말하는 것처럼, 내 위치를 알려주는 것과 같습니다 내가 너에게 다른 것을주지 않기 전에, 그렇지? 사용자는 종종 '아니오'라고 말하려고합니다

그들은 왜 그 이유를 정말로 이해하지 못하기 때문에 그들은 단지 당신의 앱을 둘러보고 싶었습니다 그래서, 그걸하는 더 좋은 방법입니다 안드로이드 M 때문에 지금 할 수 있어요 런타임에 컨텍스트에서이를 수행 할 수 있습니다 이 예에서는 매장을 검색하는 사람들이 있습니다

사용자가 자신의 동기 부여가 있기 때문에 훨씬 나아질 것입니다 권리? 그들은 그 가게를 찾을 수 있기를 원합니다 그 다음에 일어나는 일은 그들에게 더욱 분명합니다 뒤에 오는지도가 있고 그것 묻는다, 위치를 사용할 수 있습니까? 음, 물론 그렇게 할 수 있습니다 권리? 너는 받아 들일 확률이 훨씬 높다

당신이 문맥에서 묻는다면 우리는 이것을 위해 많은 자원을 가지고 있습니다 우리는 작은 비디오와 구현 세부 사항이 있습니다 런타임에 사용 권한을 요청할 수 있는지 여부 그리고 그것은 단순히이 원칙에 불과합니다 왜냐하면 많은 사람들이 그것에 대해 알고 있음을 알고 있기는하지만, 우리가 최근에 공부 한 앱에서 많이 보았습니다

그것이 여기있는 이유입니다 그래서 내가 원칙의 끝으로 나를 데려다 준다 너와 갈거야 각 장을 살펴 보았습니다 이러한 원칙을 온라인에서 더 많이 찾을 수 있습니다

그들은 모두 Google에서 생각할 때 온라인 상태입니다 그리고 여기 당신과 관련된 짧은 링크를 만들었습니다 원칙에 향상된 모바일 사용자 환경 사실 여러 가지 원칙이 있습니다

내가 무엇이 있는지 말해 줄께 모바일 앱 원칙, 새로운 설정 25 가지 모바일 원칙 중 새 집합이 있습니다 소매업을위한 25 가지 원칙 – 웹과 앱 모두입니다 다시 한 번 연구를 했으므로 그 정보는 그런 다음 모바일 웹 원칙이 있습니다 이전에 게시 한 내용, 이미 보았을 수도 있습니다

이 링크의 모든 링크는 동일한 링크입니다 더 자세한 구현 정보가 필요한 경우 모바일 웹 사이트에서 우리의 웹 펀더멘털의 일부이기도하다 사이트 및 그 곳에서 제공 한 특정 링크 추가 개발자 구현 세부 정보를 제공합니다 내가 가기 전에 한 가지 더 이야기하고 싶습니다 연구의 이야기

그래서이 연구에서, 신용 카드 스캔 기능을 구현 한 지불하기 위해서 이제 우리는 연구에서 소수의 사람들이 전에 그것을 사용했고, 그것을 가로 질러 왔고, 그것을 좋아했다 그러나 이것은 상대적으로 새로운 기술이기 때문에, 우리는 그것을 만난 사람들이있었습니다 처음으로 이제 스캔이라는 단어에 대해 생각하면 가장 친숙한 단어입니다

경험, 나는 생각한다, 단어 스캔과 더불어, 내가 식료품 가게에 가서 신용 카드를 스캔 할 때입니다 권리? 그리고 바로 옆에 내 신용 카드를 걸고 있습니다 음, 다른 기계를 통해 퍼팅, 정말, 그게 스캐닝 내가 스캔이라는 단어를 알고있는 또 다른 곳 사진 복사기에 종이 넣고있다 더 오래 전의 일이지만 여전히 스캔, 서로의 위에 뭔가를 가하고

따라서 사용자는이 요청을받습니다 신용 카드 스캔 그것은 스캔이라는 단어를 사용하는 것입니다 그리고 만약 당신이 그들을 번역하려한다고 상상한다면, 종종 가장 먼저 묻는 것은, 우리 카메라를 사용할 수 있을까요? 음, 카메라가 할 일은 무엇입니까? 내 신용 카드를 스캔하는 중입니까? 음, 아마도, 나는 그것을 이해하지 못한다 그래, 그래, 내 카메라를 사용할 수있어

그런 다음 여기에 신용 카드를 보관 해달라고 요청합니다 자동으로 스캔합니다 좋아요, 지시에 따라 놀라지 마시고, 우리는 연구에서 세 사람이 이것을 보았다 그리고 그들은 기다리고 기다렸다 그들은 대단히 실망했다

그들은 지불하는 것이 아주 간단한 방법이라고 생각했기 때문에 그리고 이것은 단지 이해에 관한 것입니다 우리가 사람들에게하고 싶은 것과 사용하고있는 언어 간단하고 사용하기 쉽습니다 불행히도 우리는이 모든 것이 효과가 있다고 생각합니다

아직 작동하지 않습니다 그러나 그것은 말이 맞습니다 그들이하는 일, 그들이 무엇을하도록 지시 받았기 때문에 그래서 다시, 나는 그 시점으로 돌아 간다 사용자를 이해하고있는 앞에서 만든 경험, 끝에서 끝까지

흐름과 고통의 포인트를 이해합니다 정말 중요합니다 네가 경험을 쌓기를 원하기 때문에 당신은 당신의 사용자를위한 정말 좋은 앱 경험을합니다 사용자가 좌절하지 않는 곳, 좌절감의 종류가 아니라 내 앱을 사용한 후에 느낌이 들었고 내 호텔 방까지 갔다

내 창문에서 그 주차장을 봤어 앱 경험을 할 수 있기를 바랍니다 사람들이 인생이 정말로 마찰이없는 것 같은 느낌을 갖게한다 해변의 경치와 더 비슷합니다 그래서 저는 여러분에게 세 차례의 테이크 아웃을 해드 리고 싶습니다

그리고 이것들은 생각할 수있는 세 단계입니다 이 이야기 이후에 대해 앱을보고 앱을 감사합니다 25 가지 원칙에 위배된다 간단히 말해서, 우리는 이러한 경험들 각각에서 무엇을하고 있으며, 그리고 그것을 측정하고 있습니까? 그게 너에게 길고 긴 길을 가져다 줄거야

하지만 앱도 독특합니다 맞습니까? 따라서 주요 사용자 여정을 실제로 이해해야합니다 그 붕괴 지점을 이해하십시오 내 호텔 앱에 내가 제공 한 것 정말 흥분 되긴했지만 내게서 깨진 점들 결국에는 잘 작동하지 않게되었습니다

그리고 나서 마침내, 당신 자신의 사용자 테스팅에 대해 생각해보십시오 Google Ventures의 가이드 사용자 연구를 위해 많은 자원을 제공합니다 실제로 작은 규모의 방법으로 사용자 테스트를 수행하면 당신이 제공 한 좋은 것들을 볼 수 있도록 앱에서 축하하고 고통을 식별 할 수 있습니다 귀하의 애플 리케이션에 포인트, 그래서 당신이 그들을 해결하는 방법에 대해 생각할 수 있습니다 시간 내 주셔서 감사합니다

[음악 재생]

Android Performance: UI (Google I/O '17)

[음악 재생] CHET HAASE : 와우, 미온 한 박수 고맙습니다

크리스 크랙 : 제 이름은 크리스 크레이크입니다 나는 안드로이드 UI Toolkiit에서 일한다 CHET HAASE : 나는 Chet Haas입니다 나는 또한 안드로이드 UI Toolkit 팀에서 일한다 그리고 오늘, 우리는 공연에 관해서 이야기하지 않겠습니까? 우리가 퍼포먼스 토크를한지 얼마되지 않았습니다

그래서 우리는 다시해야한다고 생각했습니다 우리가 공연에 관해서 이야기하기를 좋아하기 때문입니다 올해의 퍼포먼스 토크에서, 우리는 그것을 좀 더 유스 케이스 중심으로 만들고 싶었습니다 렌더링이 어떻게 작동하는지 조금 알려주세요 우리가 만든 변화들 중 일부는 성능 향상을위한 또한 실제로 어떻게 할 것인지에 대한 몇 가지 단계를 거칩니다

jank이 무엇인지 알아보고, 응용 프로그램에서 그것을 수정하는 방법 그러자 UI 성능, 이봐, 너 거기 간다 그래서 우리는 초당 프레임, FPS에 대해 이야기합니다 정말 좋은 통계입니다

무엇을 이해할 수있는 좋은 방법입니다 귀하의 신청서에서 진행됩니다 그러나 실제로 기간에 대해 생각하는 것이 좋습니다 권리? 따라서 초당 프레임 수는 적지 않습니다 솔직히 디스플레이는 초당 60 프레임을 맞고 있습니다

항상 그리고 나서 같은 숫자의 명중을 정렬해야합니다 응용 프로그램에 대한 초당 프레임 수입니다 그러나 기간에 대해 생각하는 것이 좋습니다 각 프레임이 복용하고 있습니다

그 프레임이 실제로 그리는 데 얼마나 걸리나요? 너는 그 창문 안에 들어 가지 않을거야 당신이 너무 오래 적응하지 못하면 따라서 응용 프로그램에서 jank를 수정하려면, 애매한 부분을 고치고 싶다면 언제 당신은 그 목록을 내미는 것입니다 중간에 프레임이 건너 뛰었습니다 사용자가이 janky 동작을보고 있습니다 고정하는 것은 단순히 프레임을 고정하는 것을 의미합니다

너무 오래 걸린다 또한 일관성에 대해 생각하는 것이 좋습니다 60 프레임을 가질 수 있다면 좋습니다 대부분의 경우 초당 하지만 가끔씩, 여러 프레임을 떨어 뜨리는 경우 연속적으로, 그것은 좋지 않다

당신이 정말로 원하는 것은 일관된 행동입니다 그래서 짐을 쫓는 것은 당신이있는 곳을 찾는 것입니다 그것들을 버리고 당신이 그것들에 기여하는 병목 현상을 수정합니다 그럼 시간에 대해 이야기 해 봅시다 앞으로 나아갈 시간을 살펴 보겠습니다

왼쪽에서부터, 오른쪽으로– 미안, 왼쪽에서 오른쪽으로 – UI 공간에서 어떤 일이 일어나는지 살펴보십시오 따라서 이러한 수직 새로 고침 동기화에 대해 생각해 보면, 매 16 및 2/3 밀리 초마다, 일반적으로 일반적인 디스플레이에서 Vsync 요청을 받고 있습니다 권리? 이것은 프레임을 게시하는 하드웨어 종류입니다 화면에 사용자가 뭔가를 볼 때입니다

60 초를 60, 16 2/3으로 나눈 값으로 나눕니다 나중에 필요할 때 수학을 끝낼 수 있습니다 그런 다음 프레임을 각 프레임에 매핑하면 이러한 각 프레임, 이 회색 상자는 게시물을 게시하기 위해 애플리케이션이 수행하는 작업 그 정보를 화면에 표시합니다 이상적으로, 모든 것들은 해당 프레임에 대해 일어날 필요가있는 것은 16 및 2/3 밀리 초 나는 그 말을 그만둬야 해

나는 16 밀리 초를 말할 것이고 너는 그것을 해석 할 수있다 그러나 당신은 원한다 내가 손으로 직접 그린 아름다운 아이콘 화면 맨 아래로 가면 사용자가 볼 수 있습니다 그래서 각각의 수직 동기화에서, 그들은 하드웨어 버퍼가 무엇이든간에보고 있습니다 님이 화면에 게시 중입니다

그래서 그들은 거기에서 그것을 볼 것입니다 하지만 문제가 생기면 렌더링, 프레임 중 하나가 너무 오래 걸리는 경우, 사용자는 그것을 보지 않을 것입니다 그들은 그들이 무엇을 정확히 볼 것입니다 이전 프레임에서 본 것입니다 귀하의 신청서에 너무 오래 걸렸습니다

당신은 프레임을 건너 뛰었습니다 그래서 그것은 jank입니다 그것이 우리가 분석하고 고치려고 노력해야 할 자국입니다 그러니 조금 뒤로 물러나서, 좋아, UI 툴킷에서 실제로 렌더링이 어떻게됩니까? 앱의 관점이 있습니다 당신의 응용 프로그램에서 계속 진행하면 프레임 워크가 실제로 무엇인지 살펴보십시오

너를 대신해서 여기 간단한 코드가 있습니다 나는 계속해서 돌아다 보니, 알았다 그래서 화면에서 볼 수있다 여기로

여기 간단한 코드가 있습니다 우리는이 색깔을 가지고 있습니다 상황이 지금은 밝은 회색입니다 그리고 사용자가이 사용자 정의보기의 중간에 클릭하면, 우리는 색을 바꿀 것입니다 우리는 그것이 필요하다는 견해를 말할 것입니다

무효화하려면 새 색상으로 다시 그리기 따라서 사용자가 화면을 클릭하면 onclick 메서드에 이벤트를 보내고, 우리는 상황을 바꿀 것입니다 그러면 우리는 무효화 할 것입니다 무효화하면 이후에 onDraw가 호출됩니다 일련의 일이 아닙니다

그것은 onDraw를 직접 호출하지 않습니다 하지만 시스템에 알려주면, 다시 그려야합니다 그리고 나중의 호출은 onDraw 메소드로 필터링됩니다 그런 다음 onDraw가 캔버스에 그립니다 그것은 결국 화면에 게시됩니다

UI 툴킷이 제공하는 모든 작업을 통해 너를 대신해서 그래서 플랫폼 관점에서, 무슨 일이 일어나고 있는지 한 줄에 여러 가지가 있습니다 무엇보다도, 주어진 프레임에서, Vsync 요청을 받으면 입력을 처리합니다 따라서 사용자가 클릭 한 경우, 사용자가 스크롤하는 경우 우리가 그 정보를 얻는 곳입니다 그것을 바탕으로 무언가를하십시오

애니메이션이있는 경우, 애니메이션이있는 경우 그 스크롤 목록을 놓아 줘요, 지금은 그냥 뛰어 다니고 있습니다 이벤트를 게시하여 목록으로 업데이트되도록합니다 공간에서 움직이거나, 화면에서 화면을 움직이는 것처럼, 우리는 그 애니메이션 이벤트를 처리합니다 속성을 변경합니다 그게 무효화되어 적절하게 다시 그려 질 수 있습니다

그런 다음 필요한 경우 레이아웃을 수행합니다 따라서 애플리케이션에서 변경된 사항이 사물, 크기 또는 위치를 변경하고, 그것이 우리가 측정하고 배치 할 때입니다 다시 변화해야 할 일, 무효화 및 다시 그립니다 그리고 나서 우리는 실제로 우리가 기록적인 무승부라고 부르는 것을합니다 이것이 이전 슬라이드에서 우리가 보았던 것입니다

onDraw 메서드에서 여기가 네가 무엇이든 할 수있는 곳이야 우리가받은 드로잉 작업을 원한다 내부적으로 저장합니다 캔버스, 새로운 색을 그려보세요

그래서 당신은 우리가 다음에 그릴 수 있도록 후드 아래에서 옳은 일 그리고 마지막으로 렌더링합니다 이것이 바로 우리의 무대입니다 그래서 처음 네 단계에서 모든 것을 할 수 있습니다 코드에서, 또는 표준보기에서, 우리는 그것을하고 있습니다

그리고 우리는 렌더링을 처리합니다 그리고 그것은 기본적으로 변형입니다 우리가 쓴 무엇이든 아래층에서해야합니다 나는 너에게 힌트를 줄 것이다 OpenGL 또는 GPU 명령으로 바꾸고, 그런 다음 우리는 GPU에 보냅니다

우리가 아름답고 빛나는 색채를 보면 몇 가지 다이어그램에서 사용하려고합니다 우리는이 다섯 단계를 가지고 있습니다 그래서 특정 프레임에서 지루한 회색 상자가 있습니다 실제로 다른 단계로 나뉘어져 있습니다 앞의 예제에서, 간단한 애플리케이션 코드에서, 우리는 거기에 모든 단계가 없었기 때문에 레이아웃이 필요하지 않았습니다

우리가 한 모든 일은 색을 바꾸는 것이 었습니다 그래서 우리는 onclick에 대한 정보를 얻었습니다 캔버스 작업의 기록을 그렸습니다 새 색상을 그리고 나서 그 결과로 생긴 렌더링 작업 전형적으로 – 그래, 슬라이드에서 말하는 것처럼

전형적인 어플리케이션에서,보다 일반적인 프레임, 그러면 거기에 모든 단계가있게 될 것입니다 따라서 우리는 일부 입력과 일부 애니메이션을 처리 할 수 ​​있습니다 일부 레이아웃 및 레코드를 작성한 다음 렌더링합니다 그리고이 모든 일들이 연속적으로 일어나고 있습니다 그래서 이것은 작업 순서입니다

실제로 실제로 두 개의 스레드가 있습니다 우리가 렌더링 스레드를 가지고 나온 롤리팝처럼 기술, 이전에 우리가 얘기했던, 우리가 처리하는 곳 모든 응용 프로그램 공간이 계속 진행됩니다 응용 공간에서 처음 네 단계, 또는 UI 스레드에서 그리고 나서 우리는 실제로이 분리 된 실을 가지고 있습니다 렌더링을 처리합니다

그것들은 여전히 ​​연속적으로, 순차적으로, 렌더링 스레드가 무엇을 알지 못하기 때문에 당신이 말할 때까지 렌더링 할 수 있습니다 그러나 렌더 스레드는 다른 것들을 비동기 적으로 수행 할 수도 있습니다 UI 스레드에서 그래서 우리는 원자 애니메이션의 일부를 보낼 수 있습니다 그 동안에 처리 할 수 ​​있습니다

그러나 일반적으로 UI 스레드에서 이러한 모든 작업을 수행합니다 그런 다음이 정보를 렌더링과 동기화합니다 스레드를 생성 한 다음 해당 스레드에 스레드를 렌더링하고, GPU와 대화를 처리합니다 따라서 잘 작동하는 응용 프로그램에서 전형적인, 이것이 스크롤링 또는 핑거링 상황이라고 가정 해 봅시다 응용 프로그램에서 물건이 잘 작동하고, 그리고 비교적 빨리 그릴 수 있습니다

이것은 상황이 어떻게 생겼는지입니다 다시 말하지만, 하단의 아름다운 눈 아이콘, 사용자가 프레임이 발생하는 것을보고, bam, bam, bam, bam, 모든 것이 16 밀리 초의 장벽 내에서 발생합니다 그러나 전형적인 janky 상황에서 갑자기, 뭔가 더 오래 걸렸다 여기에서는 입력 명령이 훨씬 오래 걸리는 것을 볼 수 있습니다 따라서 사용자가 클릭 할 때 비용이 많이 드는 작업 수행되었다

누군가 웹 서비스 호출을했습니다 또는 일반적으로보기를 만들었거나 바인딩했습니다 당신은 비싼 수술을 했어요 우리에게 많은 일을 시켰고, 시간을 밀었습니다 당신이 그 모든 일을 기록하는 데 지출하고 있다고 작업

그런 다음 렌더링 작업이 반드시 미끄러졌습니다 다음 프레임으로 이동하고, 사용자 장벽에 부딪치지 않았기 때문에 그 의견을보고 싶지 않았습니다 그래서 그것은 우리가 고치기를 원하는 재앙입니다 좋아, 움직여 보자 너는 무엇에 관해서 말하는 걸까? 응용 프로그램에 문제가 있습니다

쳇이 묘사 한대로, 지금 어떤 일이 일어날 지 알 것입니다 프레임이 너무 오래 걸리는 경우 우리가하는 과정에 대해 이야기 해 봅시다 de-janking이라고 불리우는 것, 당신의 신청서를 밟는 것, 이러한 문제를 찾아 내고 수정합니다 따라서 귀하의 신청서를 취소하는 첫 단계 release-ish 빌드를 실행하는 것입니다

그래서 저는 그것이 의미하는 바는 make 디버깅을 실행하고 있는지 확인하십시오 디버깅을 사용하여 실행중인 경우, 호는 다른 수표를 추가해야합니다 약간의 시간을 추가 할 수있는 검증 단계 결과를 조금 왜곡하십시오 따라서이를 무시하거나 테스트하는 것이 좋습니다 실제 릴리스 빌드

두 번째 단계는 앱을 시각적으로 검사하는 것입니다 목록을 스크롤하면서, 어떤 깡통이 생기고, 시각적으로 감지하면, 애니메이션을 보면 분명히 앱에서 가장 핵심적이고 중요한 부분부터 시작하십시오 많은 사람들이 기본 스크롤 목록을 가지고 있습니다 시작하기 좋은 곳 당신이 일종의 사람이되면 당신이 방금 볼 수 있다면, 오, 잘, 그것은 나에게 잘 보이지만, 프로필 GPU 렌더링을 사용하도록 설정할 수 있습니다

그리고 너에게이 모든 막대를 줄거야 아래쪽에, 당신에게 말할 것입니다 특정 임계 값을 통과하면 일어나고 있을지도 모르는 것에 관해 당신에게 작은 암시를 줘라, 색상에 따라 온라인에 관한 문서가 있습니다 하지만 진짜 다음 단계는, 그 후, 당신은 어떤 양동이를 보았습니다, 너 오, 그래,이 물건들이 화면에 나타날 때, 또는 UI의이 특정 부분을 처음로드 할 때, 너는 상호 작용이 무엇인지 알아 낸다

그리고 당신이 말한다, 좋아, 다음에 무엇을해야합니까? 음, 다음 단계는 일반적으로 Systrace입니다 Systrace는 SDK에있는 도구이며, 플랫폼 도구 디렉토리에 있습니다 당신은 또한 GitHub에서 꺼낼 수 있습니다 당신은 절대 가장 신선한 버전을 원한다면 그래서 여기에서 우리는 매우 빠른 라이브보기를 할 것입니다

Systrace가 실제로 어떻게 생겼는지를 통해 그래서 이것은 당신이 끌어 올 때 볼 수있는 것입니다 처음으로 Systrace 그래서이 특별한 예에서 나는 내 애플 리케이션에서 RecyclerView를 통해 스크롤 그리고 오, 저 jyy 프레임이 있습니다 나는 시각적 인 말더듬이를 볼 수있다

그래서 나는 그 시간 동안 Systrace를 잡았습니다 그리고 이제 나는 Systrace를 시작합니다 오, 세상에, 여기에 많은 정보가 있습니다 소음이 많습니다 정말보기가 어렵습니다

무엇을보고 있어야합니까? 무엇보다 먼저 할 수있는 일 여기 왼쪽을 볼 수 있니? 알았어, 알았어, 음, 커널이 있고, 잠재적으로 다른 프로세스가 있습니다 내가 뭘할지 알아? 나는 지금 다른 모든 사람들을 무시할 것이다 상단 프로세스까지 아래로 스크롤하겠습니다 지금 당장 볼 수있는 유일한 것 내 패키지, Androidjanktown입니다

사실, 그 이상으로 나아갈 수도 있습니다 여기 왼쪽에서 볼 수 있습니다 이것은 사실, 개별 스레드를 알려줍니다 우리가 신경 쓰는 것 쳇이 말한 것처럼 여기서 중요한 두 개의 스레드입니다

내 응용 프로그램의 UI 스레드와 렌더링 스레드가 있습니다 그래서 나는 더 아래로 스크롤 할 것입니다 내가 볼 수있는 모든 것까지, 화면 맨 위에, 그게 대부분입니다 그래서 매우 높은 수준에서, 그냥보고있는 것입니다 이 흔적에서, 그것에 대해 많이 알지 못하고, 나는 말할 수있다, 좋아,이 추적의 시간은 왼쪽에서 오른쪽으로 간다

가장 왼쪽에 0 초가 있습니다 더 멀리 나아가 그리고 당신이 특정한 세부 사항을 볼 수없는 경우에, 그것에 대해 걱정하지 마십시오 나중에 확대 된 일부 스크린 샷을 보겠습니다 그러나이 매우 높은 수준의 견해에서조차도, 나는 말할 수있다, 제로, 나는 작은 작은 조각을 많이 얻는다

여기,이 작은 맥박 이들은 프레임입니다 큰 확인 그것의 대부분은 믿을 수 없을만큼 일관되게 보입니다 정말 매끄럽게 보입니다

정기적으로 반복됩니다 그러나 여기에는 몇 가지 큰 시각적 우수성이 있습니다 그리고 이것은 종종 드 janking 무엇입니까 이 특별한 뛰어난 프레임을 찾고 있습니다 조사하고 있습니다 여기를 확대하면 시작할 수 있습니다 정확히 틀린 부분을 보면서 주변을 클릭하고 알아낼 수 있습니다

정확히 무엇이 문제인지 그리고 당신이 그것을 볼 수 있도록, 우리는 슬라이드로 돌아가서 당신에게 보여줄 것입니다 특별히 스크린 샷 이것은 간단한 프레임 중 하나입니다 상당히 의미심장하게, 우리가 이전에 보았던 것 매우 빈번하고 매우 규칙적인 펄스처럼

이제 이것들은 매우 좋았습니다 그들은 전에 작은 작은 조각처럼 보였습니다 그러나베이스 라인이 무엇인지 살펴보기 위해 먼저 살펴 보겠습니다 그래서 우선, Systrace에 관한 까다로운 것들 중 하나 여기에 많은 데이터가 있습니다 클릭해야 할 것이 많습니다

하지만 멋진 기능 중 하나는 이러한 UI 스레드의 대부분 구성 요소, 그것을 클릭하십시오, Systrace 당신에게 그것을 설명하려고 최선을 다할 것입니다 따라서이 특정 유형의 UI를 클릭하면 이것은 가장 많이 추적되는 섹션을 의미합니다 이것은 UI 스레드 작업을 나타내는 가장 큰 청크입니다 Systrace UI의 맨 아래에서 클릭하면, 오, 알겠습니다 안무가는 안무가입니다

그리고 사실 여기에서 문서로 연결됩니다 dandroidcom에서 Choreographer가 어떻게 설명되는지 공장 마찬가지로, 내가 드로잉 프레임을 내려다보고 싶다면, 그것은 프레임의 렌더 스레드 구성 요소입니다

그리고 그것을 클릭하면 비슷한 설명을 얻습니다 모든 종류의 추적을위한 많은 기능이 있습니다 Systrace 전체, 특히 UI 및 렌더링 스레드, 가장 관심이있을 수 있습니다 이제 우리가 물건을 클릭 할 수 있다는 것을 알았으니, 우리는 그런 식으로 조금 더 많은 정보를 얻을 수 있습니다 이 프레임이 어떻게 생겼는지 정확하게 살펴 보겠습니다

뭐하는거야? 그래서 우리가 여기서 제일 먼저 보는 것은 애니메이션 콜백입니다 이 버튼을 클릭하면 애니메이션이 표시됩니다 또는 확대하면 볼 수 있습니다 그리고 저는 이러한 방식으로 진행할 것입니다 이 애니메이션은 Chet와 ​​똑같은 애니메이션입니다

전에 그것에 대해 이야기하고있었습니다 그리고 전에 보았 더라면 많은 프레임이있었습니다 그리고 저는 그것이 RecyclerView라고 말했습니다 따라서 RecyclerView에 대한 한 가지 공통적 인 이유가 있습니다 애니메이션 효과를 발휘하고 있습니다

Flinging 애니메이션 자체는 RecyclerView의 실제를 실행합니다 애니메이션 콜백의 일부로 작업을 번역하고 팽창시킵니다 그리고 Chet가 말한 다른 무대 전에는 기록 그릴입니다 RecyclerView 뷰가 유용하기 때문에 무효화, 주위의 미끄러짐 및 그리기입니다 좋아, 우리는 그것이하고있는 일에 대해 약간의 맥락을 얻는다

그리고 실제로이 부분을 클릭하면 애니메이션 안에있는 애니메이션의 이것은 RecyclerView 스크롤입니다 따라서 RecyclerView 스크롤은 실제로 정말로, 정말로 빠르게 여기에 RecyclerView가 최소한의 작업을 수행하고 있기 때문입니다 사실,이 UI가 차지하는 시간을 살펴보면 프레임은 125 밀리 초입니다

훌륭합니다 전체 프레임은 6 개 미만으로 완료됩니다 축하합니다 이제 우리는 조금 더 느린 프레임을 봅니다 이제이 사람은 실제로 끔찍하지 않습니다

그러나 그것이 이전의 것과 어떻게 다른지 살펴 보겠습니다 그래서 우선, 여기에 측정 값이 있음을 알 수 있습니다 그래서 계층 구조의 어떤 것이 레이아웃을 요청했습니다 재평가 됐어 알았어, 알았어

여기 또 다른 것은 업로드 비트 맵입니다 그래서 RenderThread가 비트 맵을 처음 보았을 때 그것을 표시 할 필요가있을 때, 그것은 GPU에 업로드 될 것이고, GPU가 정말 빨리 그릴 수 있도록 OpenGL에 업로드했습니다 이제 첫 번째 업로드는 약간 비쌉니다 나중에 조금 더 얘기하겠습니다 그러나 실제로, 우리가 그것을 보면, UI 스레드 4 밀리 초가 걸린다

전체 프레임 13 미만으로 끝납니다 이것은 문제가되지 않습니다 이건 괜찮아 그러나 이제는 정말 나쁜 것들을 보도록하겠습니다 이것들은 우리가 멀리에서 본 것들입니다

좋아요, 여기서 분명히 뭔가가 일어나고 있습니다 하지만 네가 새로운 사람이라면, 무슨 일이 일어나고있는거야? 무슨 일이 일어나는지 어떻게 알 수 있습니까? 그래서 실제로,이 부분을 클릭하면, RV CreateView, 설명 할 것입니다 이것은 기본적으로 어댑터의 콜백입니다 onCreateViewHolder에 대한 즉, RecyclerView는 새로운보기가 필요합니다

그리고 그것을 창조하고 있습니다 그리고 실제로, 당신이 바로 아래를 보면, 음, 많은 이유, 많은 시간들 이 CreateView 부분을 차지하고, 그것은 팽창하고 있다는 것입니다 특히 복잡한 물건들로 부풀려지다 내 RecyclerView에서 시간이 좀 걸릴 수 있습니다 글쎄, 그건 불행한 일이다

다음 부분 인 onBindViewHolder에서 밀리 세컨드 반 정도 걸립니다 좋지는 않지만 OK, 그럼 어떻게해야합니까? 알다시피,이 UI 스레드 프레임은 약 20 밀리 초가 걸렸습니다 UI 스레드에서 약 274로 합계 안좋아

우리는 분명히 그 틀을 잡을 것입니다 그래서 이것은 실제로,이 과정입니다 네가 통과 할 수있는 사람이야 그러나이 특별한 경우에, 우리는, 우리가 너를 도울 수있는 뭔가 야 지원 lib와 함께

그리고 이것은 우리가 작업 한 기능입니다 정확히 그 목적을 위해 그럼 돌아가서 조금 얘기합시다 RecyclerView가하는 일 따라서 RecyclerView는 기본 지원 lib 구성 요소입니다

콘텐츠의 동적 목록을 표시하기위한 뷰를 동적으로 보여줄 필요가있다 무한 또는 잠재적으로 스크롤하거나 표시 뷰 계층 구조에 첨부 된 것보다 많은 컨텐츠 그래서 나는 무엇을 의미합니까? 글쎄, 네가이 네 가지 항목을 부분적으로 가지고 있다면 RecyclerView에 표시되고, 스크롤을 시작하고, RecyclerView가해야 할 일은이 네 가지를 처리하는 것입니다 특정 항목 실제로,해야 할 일은 그것들을 아주 약간 상쇄하는 것입니다

그것이 우리가 보는 일의 양입니다 그리고 사실, 기억한다면, 첫 번째 RV 우리가 강조했던 두루마리, 그것은 작았 다 RecyclerView가 거의 수행하지 않았기 때문에 사소했습니다 그러나 일단 우리가이 특정한 목록의 가장자리에 도착하면, 음, 무슨 일이야? 이제 우리는 갑자기 일부 양동이를 볼 수 있습니다 이것은 흥미로운 일이 일어나는 프레임이기 때문입니다

처음으로이 목록에는 5 개의 항목이 있습니다 즉 이전에 재활용 할 품목을 얻을 수 없다는 의미입니다 즉,이 메시지 아이콘을 부풀려 야합니다 음, RecyclerView가 작동하는 오래된 방법입니다 이제는 어떤 종류의 단순화 된 버전으로 돌아가 보겠습니다

우리는 Systrace에서 보았습니다 다시 한 번 말하지만, 이것은 추방하는 동안 일어났습니다 우리는 완전히 멋지게 보이는 두 개의 프레임을 가지고 있습니다 짧은 UI 스레드 지속 기간 매우 합리적인 RenderThread 기간 마감일 전에 끝났습니다 그러나 갑자기, 당신은 큰 애니메이션 덩어리를 쳤습니다

우리가 알다시피,이 특별한 경우에, RecyclerView가 생성 및 바인딩 작업을 수행하고 있기 때문입니다 작업 그래서 우리는 여기서 재미있는 것을 보게됩니다 RenderThread가 작동 할 때, UI 스레드는 10 밀리 초 동안 완전히 유휴 상태입니다 이 새로운 프레임이 나오기 전에

플링이 예상되는 것은 어렵지 않습니다 계속할 것입니다 제 말은 애니메이션이하는 일입니다 그리고이 작품을 만들어, 실제로 바로 거기에 맞을 수 있습니다 따라서 RecyclerView Prefetch에서이 작업을 수행합니다

우리는 새로운 아이템을 기대하기 시작했습니다 근본적으로 화면에 올거야 그들로부터 도둑질을했다 깨달음, 오, 그게 많은 일을 할거야 저를 조금이라도 훔치도록하겠습니다

내가 인플레이션하러 가자 일찍부터 우리는 필요에 따라 그렇게 할 필요가 없습니다 그리고 이것은 실제처럼 생겼습니다 이 앱은 똑같은 응용 프로그램의 Systrace입니다 내가 한 모든 일은 지원을 업데이트하는 것뿐이었습니다

lib를 사용하여이 기능을 사용하십시오 갑자기 Systrace에서 RV Prefetch 이벤트가 발생합니다 다시 한번 클릭하면 Prefetch 기능에 대해 설명하고, 그것은 무엇을합니다 그리고 와우, 우리가 꺼낸 13 1/2 밀리 초입니다 다음 프레임의 우리는 일을 훔쳐 막대한 시간을 절약했습니다

그리고 이것은 무언가의 위대한 모범입니다 지원 lib가 한 일이지만 절대적으로 프로세스입니다 당신이 훑어 볼 수있는 자신의 응용 프로그램에 문제가 있습니다 지원 lib는 이런 식으로 모든 문제를 해결할 수 없습니다 하지만 좀 더 프리 페치에 대해 이야기 해 봅시다

그래서 몇 가지주의 사항이 있습니다 항목이 실제로 필요하지 않으면 어떻게됩니까? 항목을 프리 페치하면 어떻게 될까요? 그리고 갑작스럽게, 그 항목 바로 앞에 화면에 올 때, 사용자는 화면을 탭하기로 결정하고, 날뛰다 멈춰? 별똥별을 멈 추면, 당신이 그 물건을 필요로하지 않으면, 뭔가 다른 것이 들어 오면 마지막 순간에 새 데이터가 도착하면 작업을 잘못 수행했을 수 있습니다 그리고 정말로, 괜찮습니다 시간의 999 %, 프리 페치가 진행 중입니다

올바른 결정을 내리기 위해 그 특별한 경우에 약간의 작업을 낭비 할 수 있습니다 그래도 RenderThread가 없다면? RenderThread가 없다면 프리 페치를 시도하지 마시고, 지금부터 시작하십시오 RenderThread가 대다수의 장치에 있기 때문에, 당신은 무료로 대부분의 장치에서 이것을 얻을 수 있습니다 지원 lib의 최신 버전 만 사용하면됩니다 하지만 오래된 장치에서는이 기능이 작동하지 않습니다

그래서 가용성, 이것은 실제로 얼마 전부터 lib v25가 지원되었습니다 그러나 가장 좋아진 사람들을 포함하여 점점 좋아지고 있습니다 26의 최근 베타 버전 이 기능은 기본 레이아웃 관리자에 내장되어 있습니다

그래서 RecyclerView, horizontal, 수직, 무엇이든간에 선형 또는 시차 또는 격자 레이아웃, 너는 단지 이것을 무료로 얻는다 이것은 최신 지원 lib로 업데이트하는 것입니다 그러나 사용자 정의 레이아웃 관리자가있는 경우, 당신이 완전히 관습적인 것을하고 싶다면, 또는 흥미로운 방식으로 하위 클래스 중 하나를 하위 클래스로 만들려면, 당신이 재정의해야 할 수도 있다는 것을 명심하십시오 이 특정 방법은 인접한 프리 페치 위치를 수집합니다 그리고 이것이 당신의 커스텀 레이아웃 매니저에서, 똑같은 동작을 얻을 수 있습니다

그리고 당신은 구현을 볼 수 있습니다 다른 것들의 그리고 Chet의 멋진 글에서 이것에 대해 더 많이 읽을 수 있습니다 RecyclerView에 대한 프리 페치 하지만 조금 뒤로 물러나서 이야기 해 봅시다

음, 뭐라구? 음, 우리는이 특별한 경우를 보았습니다 버스트 작업 부하를 가진 RecyclerView가 jank를 유발할 수 있습니다 그러나 일종의 이야기하고, 뒤로 물러나서, 무엇을 이야기할까요? 역사적으로 Android와 jank의 문제였습니까? 그래서 우리가 생각한 가장 오래된 것들 중 하나 쓰레기 수거입니다 역사적으로 가비지 수집은 중요한 문제였습니다 Android에서 그러나 이것은 플랫폼 꾸준히 개선되고 있습니다

따라서 alloc에 ​​대한 GC는 ART를 사용하여 L에서 본질적으로 고정되었습니다 나는 수백 개의 흔적을 보았다 나는 무엇보다 가장 막강하게 블로킹 GC를 보지 못했다 앱 할당 GC는 큰 문제가 아닙니다

그러나 여전히 런타임은 계속해서 개선되고 있습니다 런타임은 GC에서 더 좋아지고 있습니다 할당 오버 헤드를 낮 춥니 다 OS 쓰레드 스케쥴링, 이것은 특히 흥미로운 것이다 이전 버전의 커널에서, Android의 이전 버전에서 플랫폼은 언제쯤에 나쁜 결정을 내릴 것입니다

귀하의 신청서를 예약하십시오 이것은 특히 N / O에서 크게 개선되어 왔으며, 하지만 유감스럽게도 커널에만 한정되어 있습니다 그래서 그것은 보장되지 않는다는 것을 의미합니다 모든 N 또는 O 장치에 있어야합니다 그러나 확실히 새로운 장치를 찾으십시오

특별히 스레드 스케줄링을보고 있다면, 작업이 실행 중인지 확인하려는 경우 당신이 그것을 원할 때 정확하게 렌더링은 흥미로운 것입니다 나는 많은 부분을 렌더링 할 때 일한다 렌더링, 특히, 하나의 것들 나는 Chet와 ​​Ramon이 수년 전에 이야기했던 것을 기억한다 View Alpha가되었습니다

보자 렌더링이 겹쳐져있다 설정된 레이어 유형의 하드웨어가 있습니다 어딘가에 내가 기억할 필요가있는 다른 콜백들 잘, 우리는 그것을 개선하려고 노력했다

그래서 우리는 Auto-Hardware layer M을 추가하기 시작했습니다 그것을 무료로 받으십시오 M +, 당신은 여전히 ​​Hardware Layer를 사용할 수 있습니다 그 문제를 피하십시오 그러나 우리는 N, 최악의 상황을 개선합니다

비트 맵 업로드는 다른 하나입니다 일찍 일어난 일에 대해 이야기했다 처음에는 비트 맵을 표시 할 때 상당한 지연이 발생합니다 그러나 우리는 N에 새로운 기능을 추가했다 prepareToDraw 비트 맵에서 비트 맵로드 허용 라이브러리를 비동기식으로 작업을 일찍 시작하려면, 그리고 그것은 그들에 의해 채택되기 시작했습니다

이전에 말했던 것처럼 재활용보기 (View Recycling) 기본적으로 다른 일반적인 원인이었습니다 support lib가 크게 향상되었습니다 그래서 25에 추가, 거기에 와서 더 많은 개선 그리고 돌아가서 ART의 녹음을 볼 수 있습니다 더 많은 것을 배우고 싶다면이 I / O의 세션 ART가 해왔 던 일에 대해서

하지만 나는 그 모든 것을 통과하기를 원했다 그게 당신에게 말하는 것 같아서요 플랫폼이 어떻게 개선되고 있는지, 그리고 저크의 유일한 근원이되는 지점에 도착하는 것 귀하의 응용 프로그램에서 당신이 해결할 수있는 것들입니다 자 료의 출처에 대해 조금 이야기 해 봅시다 애플리케이션에서 발생할 수있는 그게 뭔가로 인해 일어날 수 있습니다

앱 내부에서 잘못되었습니다 그리고 그들 중 많은 수가 있습니다 그러나 정말로 빨리 가자 RecyclerView의 문제는 부 풀릴 필요가있는 RecyclerView 관련 문제, 마지막 순간에 그 일을하고, 느슨하게, 아마도 10 밀리 초 이상을 일으킬 수 있습니다 단일 프레임에서의 작업 하지만 RecylcerView에는 다른 미묘한 문제가 많이 있습니다

불필요한 인플레이션을 유발할 수 있습니다 그리고 그것에 대해 조금 더 이야기하십시오 그래서 비트 맵 그림을 UI 스레드에서, 무승부 콜백의 가장 일반적인 이유 중 하나 매우 길다는 것은 당신이 일부 작업을 캐싱하려고 시도하고 일부 내용을 비트 맵에 캐시합니다 그러나 유감스럽게도 소프트웨어 비트 맵으로 그립니다 특히 그것이 어디에 있든 많은 시간이 걸릴 수 있습니다

화면 크기 근처 캔버스 호출, 몇 가지 캔버스 호출, 즉 경로를 그립니다 당신이 당신의 경로에 자주 돌연변이를 일으키고 있다면, 저비용 일 수 있습니다 그리고 우리는 실제로 자신의 길을 벗어났습니다 이들 중 일부를 문서화하십시오 그리고 나는 이것을 언급 할 것이다

하지만 바인더 예제로 빨리 가자 이것이 가장 좋아하는 조사 중 하나이기 때문에 지난 버전의 Android 실적 팀 바인딩 바인더 문제를 찾고 해결했습니다 따라서 Binder는 Android의 IPC 메커니즘입니다 창 관리자와 대화하고 싶다면, 또는 뷰 계층 구조가 창 관리자와 이야기하고 싶습니다 아마 바인더를 통과 할거야

다른 사람의 콘텐츠 제공 업체와 이야기하는 경우, 만약 당신이 표면 튀김과 이야기하고 있다면, IPC를 통해 이야기하는 경우 아마 바인더를 통과 할거야 바인더에는 추적 기능이 있습니다 불행히도, IPC는 종종 매우 비쌉니다 진실을 말하면 실수로 추가하기가 쉽습니다 귀하의 응용 프로그램에

다음은 Systrace의 특정 스크린 샷입니다 계속 진행되는 바인더 트랜잭션이 많은 RecyclerView 스크롤 중에 당신이 그것을 본다면, 바인더, 바인더, 세상에, 그런 다음 UI에서 다른 콜백을 실행 중입니다 스레드, 많은 바인더를 실행합니다 이 모든 것들이 상당히 중요합니다

21 밀리 초 프레임입니다 인플레이션이 없다 절대적으로 오래 걸리는 일은하지 마라 작업을 수행하는 바인더 오버 헤드 일뿐입니다 UI 스레드에서 실제로 수행하면 안된다

그래서 바인더 추적은 전체적으로 많은 도움을 줄 수 있습니다 Systrace의 최신 버전에서는 기본적으로 설정되어 있습니다 그러나 요약하면 많은 이유가 있습니다 그리고 우리는 그들 모두를 문서화했습니다 d

androidcom/vitals 페이지로 이동하면 이 프리젠 테이션에는 많은 자료가 있습니다 코드로 더 깊이 들어간 예제가 많이 있습니다 예제 등등이 웹 사이트에서

그리고 이제 저는 그것을 다시 돌려 줄 것입니다 성능 유지에 관해 이야기 할 Chet에게 앱에서 CHASE HAASE : 나도 지적해야한다 Chris가 지적한 문서는 새로운 것입니다 방금 게시되었습니다 크리스 크랙 : 그래, 수요일

CHASE HAASE : 사이트의 퍼포먼스 문서를 생각하면, 당신은 어쨌든 그것을 확인하고 싶을 수도 있습니다 훨씬 더 자세하고 자세한 정보 그리고 문서화 팀이 일하고있었습니다 Chris와 같은 엔지니어들과 정말 밀접하게 다른 팀은 그 정보를 얻기 위해 이 드 janking 당신을 도울 정말 정확 하 고 깊은 그래서 당신이 어떻게 발견하고 수정할 수 있는지 이야기 해 봅시다

실제로 앱 성능을 유지해야합니다 그것은 네 단계의 종류로 내려갑니다 당신은 생각할 수 있습니다 하나는 사용자 통계를 수집 할 수 있으므로 실제로 통계 문제가있는 곳 자체 추적을 추가 할 수 있습니다

우리가 모든 Systrace를 볼 때주의해야 할 점은 중요합니다 Chris가 보여준 것들, 그것은 샘플링 프로파일 러가 아닙니다 메소드 호출 당 보이지 않습니다 그것은 귀하의 응용 프로그램에서 일어나는 모든 것들이 아닙니다 그것들은 우리가 계측 한 구체적인 흔적들이다

프레임 워크와 플랫폼 코드, 그래서 Systrace에서 볼 수있는 유일한 것입니다 우리가 실제로 플랫폼에 추가 한 흔적입니다 왜냐하면 우리가 흔적을 추가한다면, 그러면 애플리케이션 속도가 느려질 것입니다 그래서 우리는 그것이 실제로 의미가있는 곳에서 그것을 추가합니다 따라서 실제로 추적 기능을 추가 할 수 있습니다

그 방법을 알려 드리겠습니다 잔크 테스트를 추가 할 수 있습니다 따라서 실제로는 연속 테스트가 필요합니다 변경 사항을 구현할 때이를 알 수 있습니다 그리고 애플리케이션의 새로운 빌드를 가지고 있다면, 그리고 당신의 연기는 사라집니다

네가 의존하는 대신 그걸 알면 좋지 않을까? 사용자가 Play 스토어에서 낮은 평점을 받으면 처음 보는 사람은? 어쩌면 당신은 실제로 지속적인 테스트를 가질 수 있습니다 그걸 네가 잡을 수있어 마지막으로 도구를 사용하십시오 그는 Systrace에서 깊이 들어 봤지만 가치가있다 다른 것들에 대해서 생각해 보라

개발 중일 때 일반 도구 상자의 일부 여야합니다 그래서 내가 지적해야 할 것들 중 하나 사용자 통계를 보면 현재 대시 보드의 스크린 샷입니다 실제로는 이론적 인 스크린 샷입니다 우리는 실제로 회색 박스를주지는 않습니다 그건 의미가 없습니다

그래서 이것은 수요일에 플레이 팀이 준 이야기에서 온 것입니다 다양한 측정 항목에 대해 이야기했습니다 이제 대시 보드에 제공 할 수 있습니다 따라서 계산되고 저장되는 메트릭이 있습니다 기기에서 사용자가 선택하는지 여부에 따라 그 안에 업로드 된 다음 업로드 될 수 있습니다

귀하의 응용 프로그램을위한 귀하의 대시 보드에 대한 정보가 될 수 있습니다 그래서 사람들이 실제로 무엇인지 볼 수 있습니다 jank stats를 포함하여 실제 세계에서 볼 수 있습니다 얼마나 많은 프레임이 들어 왔는지, 그것은 이러한 지속 시간 버킷의 히스토그램의 일종입니다 각 레벨에서 얼마나 많은 프레임이 들어 오는지 그 히스토그램의

따라서 응용 프로그램의 용도뿐만 아니라 아이디어를 얻을 수 있습니다 일반적으로하고 있지만, 방금 업데이트 한 경우에도, 그리고 상황이 더 나 빠졌 으면 좋았을까요? 집계되어 표시되는 정보 Play 대시 보드에서 실제로 내부에서 왔습니다 우리는 플랫폼에서 N 릴리스에 주입되었습니다 프레임 메트릭 그리고 그 주변에는 API가 있습니다

그리고 우리는이 것을 매우 낮은 수준으로 컴파일합니다 그러나 당신은 그것에 대해들을 수 있습니다 이 OnFrameMetricsAvailableListener를 구현할 수 있습니다 그리고 프레임 당 콜백 데이터를 얻습니다 각 기간의 지속 시간은 다음과 같습니다

이 개별적인 것들 네가 생각하면, 네가 GPU 프로필 또는 온 스크린 프로파일 러를 완료하고, 우리는 이전에 스크린 샷을 보았습니다 그 모든 정보 정확히 당신이 얻는 기간입니다 FrameMetricsListener에서 입력은 얼마나 오래 걸렸습니까? 애니메이션은 얼마나 오래 걸렸습니까? 프레임의 총 지속 기간은 얼마나됩니까? 따라서 모든 정보를 얻을 수 있습니다

그것을 집계하여 업로드하십시오 당신의 심장 내용을 분석하십시오 우리는 지원 lib의 v26에서 약간 단순화했습니다 따라서 베타 버전에는 지금이 비트가 있어야합니다 따라서 프레임마다 듣고 지속 시간을 확보하는 대신 그리고 나서 그것들을 집계 할 필요가있다

우리는 당신을 위해 그들을 모아 놓았습니다 기본적으로 지속 기간 버킷의 SparseIntArray를 가져옵니다 히스토그램 그리고 다시, 당신은이 물건들을 컴파일하고 집계 할 수 있고, 기기에 저장 한 다음 업로드하십시오 오프라인으로 분석하도록 선택한 서버 따라서 Play 스토어 대시 보드는 귀하를 대신하여, 전체 응용 프로그램 그러나 특정 흐름을 계측하고 싶다면 귀하의 응용 프로그램에서 정말 당신이 중요하게 느끼기에 민감하거나 중요합니다

그런 다음 프레임 메트릭 항목을 사용하여이를 수행 할 수 있습니다 커스텀 트레이싱 – 내가 말했듯이, 모든 트레이스들 크리스가 보여준 Systrace 예제에서 본 우리가 플랫폼에서 가지고있는 표준 추적이었다 하지만 당신은 자신의 흔적을 추가 할 수 있습니다 귀하의 신청서에 그래서 당신은 어떤 것들을 위해 이것을하는 것에 대해 생각해야합니다 당신이 생각하는 것이 더 비쌀 수도 있습니다

당신은 레이아웃을 유발하고 있습니다 너는 그것을 원한다 보기를 바인딩하거나 비싼 물건일지도 모릅니다 거기에 추적을 추가하고 싶습니다 그 시간이 어떻게 될지보고, Systrace에서의 모습

악기를 더 많이 사용할수록, 실제로 보낼 시간이 많을수록 계측 정보를 출력합니다 그렇기 때문에 우리는 방법론 수단을 가지고 있지 않습니다 한편으로는 Systrace에 너무 많은 정보를 원하지 않습니다 왜냐하면 중요한 정보가 손실되기 때문입니다 그러나 실제로, 당신은 실제로 비뚤어지고 싶지 않습니다

계기 호출에 의한 당신의 시간 너가 실제로 만들고있는거야 귀하의 응용 프로그램에 대해서도 마찬가지입니다 그렇게 생각한다면, 반 밀리 초보다 오래 걸릴 것입니다 계측의 오버 헤드 소음에 빠질 것입니다 그러나 그것보다 훨씬 빠른 경우, 당신은 아마 그렇게하고 싶지 않을 것입니다

영구적 인 기준으로 성능 테스트는 항상 그렇습니다 어쨌든 시험을 치르면 좋습니다 네가 실제로 성능 문제를 유발할 때를 알고 있었습니까? 특히 큰 앱과 큰 팀의 경우에 그러합니다 그래서 많은 개발자들이 코드를 쥐고 있다면 공통 코드 기반으로 만들면 좋을 것입니다

문제 발생시기를 자동으로 감지하는 방법 그렇지 않다면 – 개발자가 코드를 쥐고 있다면 귀하의 아키텍처에 익숙하지 않은 또는 귀하의 관행, 그럼 당신이되고 싶어 이전에이를 감지 할 수있다 사용자 수준에서 잡기 그리고 당신은 특히 UI 영역에 대한 테스트 그게 더 중요해, 그렇지? 공통 피드가있는 경우 공통 목록 보기, RecylerView 상황 사람 모든 시간에 들어갈 것입니다 모두가 착륙하는 곳에서 그 코드를 테스트하고 그 코드가 빡빡하게 유지되는지 확인하십시오

사용자 측면에서 데이터를 수집 할 수 있으며, 장치 측 및 앱 측에서는, 및 FrameMetricsAggregator 또는 호스트 측에서도 수행 할 수 있습니다 따라서 이러한 명령 줄 도구 인 dumpsys gfxinfo를 실행할 수 있습니다 그 모든 정보를 얻을 것입니다 Gfxinfo는 다시 똑같습니다

정확히 같은 종류의 다른 견해입니다 이전에 얘기했던 기간 데이터의 GPU 프로파일 링에서 볼 수 있습니다 FrameMetrics 집계에서 그리고 특히, 당신은보고 싶다 서로 다른 백분위 수를 어떻게 처리하는지 앱의 가끔 프레임을 건너 뛰면 아무런 문제가 없습니다

경우에 따라 700 밀리 초의 프레임 저하가 발생하는 경우, 그것은 아마도 큰 문제 일 것입니다 또는 프레임의 10 %가있는 경우 실제로 경계가 누락 된 것은 큰 문제입니다 그러니주의를 기울이십시오 A, 앱이하는 일, 성능이 어떤지 알면 당신이 할 수있는만큼 좋은 성능을 얻으려고 노력하십시오 그러나 시간이 지남에 따라 변화하는 것에주의를 기울여야합니다

해당 앱을 업데이트 할 때 당신이 그것을하는 것처럼 당신이 공연을 잃지 않는다고 마지막으로 도구를 사용하십시오 그래서 우리는 Profile GPU Rendering에 대해 이야기했습니다 개발자 옵션에서 활성화 할 수 있습니다 아주 쉽게, 일들이 어디로 가고 있는지 알 수 있습니다

기기에서 무슨 일이 일어나고 있는지 RecyclerView 나 일반적인 UI가 무엇이든간에 케이스가 있습니다 그 녹색 줄이 중요합니다 초록색 선 위로 가려면, 당신은 16 밀리 초 경계를 놓쳤습니다 그리고 너는 프레임을 꽉 쥐었다 이것은 특히 janky 프레임처럼 보입니다

나는 그들이 거기에 어떤 틀을 만들고 있다고 생각하지 않는다 적어도 일관성이 있습니다 그들은 그들을 위해 그것을 가지고있다 그래서 당신은 장치에서 그렇게 할 수 있습니다 이것은 디버거와 개발자에게 더 있습니다

수준, 일종의 볼 일종의 다시 말하지만, 동일한 정보를 사용하고 있습니다 우리가 가장 낮은 수준에서 컴파일하고, 사용하기 쉽도록 화면에 둡니다 Android Studio에서 몇 가지 새로운 프로파일 링 도구가 출시되었습니다 최신 릴리스에서

그들은 이번 주 회담에서 그 문제에 관해 이야기하고있었습니다 그래서 당신은 YouTube에서 녹음 된 것들을 확인할 수 있습니다 특히이 청중에게, CPU 모니터가 정보를 제공합니다 이 모든 메소드 호출에서 실제로 무슨 일이 벌어지고 있는지 그것은 당신에게 일반적으로 좋은 아이디어를 준다

앱에서 어디에서 실적이 발생하는지, 또한 GPU 모니터는 다시 한번, 얼마나 빨리이 물건을 렌더링하는지 다른 견해, 그리고 당신이 16 밀리 초 경계를 치고 있는지 여부 CHRIS CRAIK : 네, 사실 저는 말하고 싶습니다 이전 도구에 익숙하다면 내장 된 SDK의 일부인 Trace View (추적 뷰) 모니터로, 이것은 똑같은 일을한다 하지만 UI가 훨씬 뛰어나고 훨씬 더 유용하며, 사실, 훨씬 정확한 데이터도 있습니다 지금까지는 훨씬 더 좋습니다

CHET HAASE : 다른 도구를 보는 방법 그래서 우리는 Systrace에서 깊은 다이빙을 보았습니다 특히 Systrace를 처음 보았을 때, 나는 그 도구를 다시보고 싶지 않습니다 거기에 너무 많은 정보가 있습니다 정보로 무엇을해야하는지 잘 모릅니다

그것은 모든 정보를 가지고있는 도구입니다 단지 익숙해지기 만하면됩니다 그것이 어떻게 작동하고 어떻게 신을 수 있는지를보기 위해 그것을 사용함 필요한 정보와 사용자 정의 추적을 추가하십시오 필요 나는 그것으로 들어갈 수있는 더 쉬운 방법이라고 생각한다

당신은 훨씬 더 사용하기 쉽고 더 높은 것을 사용함으로써 천천히 물속에 잠길 수 있습니다 Android Studio 도구로 진행되는 사항에 대한 그런 다음 특정 양조장이있는 경우 당신이 추적하려고하는 것, 알고있는 것 Systrace는 훌륭한 곡물 도구입니다 당신이 훨씬 더 깊은 수준에서 그것을 추적하는 것을 도울 것입니다 시스템 전반 그리고 마침내, 화제에 아닙니다, 그러나 이것을 위해 군중은 성능에 관심이 있습니다

개발자 옵션을 시험해 볼 수도 있습니다 이 대체 렌더링을 사용할 수 있습니다 기본적으로 켜져 있지 않습니다 하지만 너는 볼 수있다 응용 프로그램이 어떻게 동작하는지, 가능한 미래 가능성을 위해

Skia Renderer이므로 개발자 옵션을 사용할 수 있습니다 그것을 가능하게하고, 확실하게하십시오 거기에 문제가 없다는 것을 있다면, 그것에 대해 듣는 것이 좋을 것입니다 그래서 우리는 오늘 그것을 언급하고 있습니다 우리가 언급 한 일부 자원이 있습니다

나는 그들을 다시 데려 오지 않을 것이다 다시, dandroidcom의 vitals 페이지를 확인하십시오 특히 Slow Rendering이라는 jank 섹션이 있습니다

그리고 몇 가지 중요한 I / O 세션이 있습니다 YouTube에서 확인해보십시오 아마 이미 게시되었을 것입니다 Tim Murray는 Systrace 및 시스템에 대한 훌륭한 개요를 제공했습니다 일반적으로 성능

Android Performance – Overview ART Talk는 공연과 기억에 관해 이야기했습니다 개량 그들은 꽤 멋진 약간의 재료를했다 런타임 측면, 런타임 개선, 뿐만 아니라 GC 측면 이제는 동시 가비지 콜렉션이 있습니다

더 이상 일시 중지가 거의 없습니다 결국 전체 GC를 가져올 때까지 그리고 그들은 전경에서 압축 할 수 있습니다 최소한의 크기의 힙을 얻을 수 있습니다 훨씬 빠른 할당과 컬렉션을 얻으십시오 그 모든 것들에 대한 세부 사항은 ART 토크에 있습니다

그리고 마지막으로, Play 사람들의 이야기가 있습니다 "아무도 크래시 또는 Janky Apps를 좋아하지 않습니다" 그리고 그것이 바로 대시 보드에 대한 이야기입니다 그들이있는 다른 시설들 개발자를 제공합니다 그리고 그것은 이야기입니다

알았어 [박수 갈채] [음악 재생]

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년 개발자 회의에 오신 것을 환영합니다 부디 즐겨주세요 다음 며칠간 자극을 얻으셔서 모두를 위해 좋은 것을 만드는 일을 지속하시기를 바랍니다 감사합니다

Introduction to Kotlin (Google I/O '17)

안녕하세요 저희를 응원하지 마시고 다음 발표자를 응원해 주세요 전 호만 기이고 Android 플랫폼 팀을 대표합니다 이분은 토르 노비이고 도구 팀을 대표하죠 저희 때문에 여기 오신 건 아니죠 특별한 발표자 분들을 위해 오셨죠 그렇죠, 로맨과 저는 코틀린의 공식 발표에 대해 정말 기뻐하고 있습니다 아직 모르시는 분들을 위해 저희 둘 다 코틀린을 정말 좋아합니다 그럼 발표자분의 시간을 더는 뺏지 않겠습니다 그럼 지체 없이 시작하시죠 안녕하세요 좋습니다 얼마 전 이런 생각이 들었습니다 제가 처음으로 코틀린에 대해 발표한 건 45년 전이었다는 거죠 900명이 올 수 있는 방에 7명이 왔었죠 오늘 더 많은 분들이 찾아주신 걸 보니 좋습니다 감사합니다 어쨌든 전 대략 30분이 있죠 사실 그보다 짧습니다 코틀린에 대한 정신없는 투어를 드리기 위해 28분이 있으니 언어 전체를 다루진 않겠습니다 최대한 많이 보여드리려고 노력할 것이고 사용법과 혜택을 받을 수 있는 곳에 대해 설명하겠습니다 모두 라이브 코딩으로 해보려고 합니다 뭔가 잘못될 경우 Google 비디오가 있습니다 유튜브 비디오도 어딘가 있을 테니 그걸 보시면 됩니다 그럼 여러분이 이미 본 적 있는 아주 간단한 것으로 시작하죠 데이터 클래스입니다 전 메인이라는 파일에 있습니다 전 머니라는 새로운 타입을 만들어 보겠습니다 amount라고 쓰고 이는 Int이죠 압니다, 지금은 아무 것도 없죠 그리고 이는 통화 유형의 문자열을 가질 겁니다 됐죠? 이는 모두 속성이고 속성만 읽게 될 겁니다 이는 여러분이 이미 친숙하신 거죠 기본적으로 데이터 클래스입니다 제가 미리 만든 자바와 비교해 보도록 하죠 수직으로 나누겠습니다 자바 머니를 불러오죠 이쪽으로 내려 갑시다 자바 머니, 됐죠 제가 방금 쓴 것과 동등한 것이죠 자바빈은 기본적으로 게터를 2개 제공하는 데이터 클래스이죠 변경할 수 없고 읽기 전용입니다 여기 데이터 모디파이어가 하는 일은 여러 가지를 제공해 줍니다 toString도 주고 clone도 줍니다 코틀린에서는 이를 copy라 부르고 equals도 하죠 hashCode를 합니다 그럼 괜찮다고 하시겠죠 그런데 이게 왜 필요할까요? 좋은 IDE라면 저를 위해 이걸 만들어 줄 테니 말이죠 그렇죠, 맞는 말입니다 그러나 문제는 그건 유지해야 할 코드라는 거죠 새로운 속성을 추가할 때마다 다시 돌아가서 그 코드를 바꿔야 할 겁니다 또 다른 문제는 그 코드가 여러분을 위해 IDE가 만든 표준 코드인지 아님 여러분이 조금 수정한 것인지 모른다는 점이죠 그렇죠? 따라서 단순히 첫 라인에 적어 넣는 걸 하지 않아도 된다는 의미가 아닙니다 좋습니다 이제 가서 메인 기능을 만들겠습니다 이건 닫겠습니다 이건 코틀린의 상단 입력부입니다 클래스에 퍼블릭 스태틱 보이드 메인이 있죠 코틀린에는 그게 필요 없습니다 코틀린에서는 모든 것을 톱 수준에 적으면 됩니다 좋은 식으로 하는 일종의 자바스크립트 같죠 하실 필요 없죠 다시 말씀드리자면 제가 오늘 보여드릴 모든 기능과 모든 것을 이 파일에 톱 수준으로 그냥 첨부할 거지만 그렇다고 다른 멤버 기능이 없다는 의미는 아닙니다 어떠한 클래스나 심지어 데이터 클래스도 멤버 기능을 가질 수 있습니다 간결성을 위해 그리고 여러분께 보여드리려는 목적으로 전 그냥 톱 수준에 넣겠습니다, 아셨죠? 그럼 머니에 대한 새 인스턴스를 만들겠습니다 예컨대 티켓이라고 부르겠습니다 머니는 100이라고 쓰고 달러로 쓰겠죠 외현 타입에 들어가겠지만 여기서는 타입 추론을 하겠습니다 코틀린은 굉장히 강력한 타입 추론이고 추론할 수 있는 만큼 여러분을 위해 할 겁니다 따라서 타입을 외현적으로 말해 줄 필요 없는 거죠 그러고 나서 예컨대 팝콘이라고 하고 티켓, 카피라고 하죠 이게 하는 일은 기본적으로 이전 것과 모든 속성을 복사해주는 것입니다 파라미터를 넘기지 않으면 이전과 같은 값을 가져가는 거죠 그럼 새 파라미터를 넘겨 보죠 예컨대 스페인에서는 팝콘이 영화관에 입장하는 것보다 7배 더 비싸니 그건 500유로 정도 되겠죠 그렇죠? 이제 예컨대 이런 걸 할 수 있죠 티켓이 팝콘과 같지 않다면 printIn "이들은 다릅니다!"하는 거죠 이것이 하는 일은 속성 비교를 하나씩 하는 겁니다 포인트 비교를 하진 않습니다 포인트 비교를 위해선 3가지 등식이 있어야죠 자바스크립트와는 다르게 기억해야 할 600개의 다른 위치 차트가 없습니다 참고로 이건 폰트 합자로 혼동하지 마시기 바랍니다 새로운 문자를 소개한 건 아닙니다 좋습니다 그럼 이제 가서 이를 실행하면 "이들은 다릅니다!"를 보게 되죠 그리고 이걸 100으로 바꾸고 달러로 넣어서 실행하면 아무 말도 하지 않겠죠 같은 값이니까 말이죠 그렇죠? 저희가 계속 신장시켜 온 기능 중 하나는 자바와 코틀린 사이의 인터롭이죠 이 자바 머니가 여기 있죠 가서 인스턴트를 만들어 보겠습니다 자바머니는 JavaMoney와 같다고 하고 이는 100이겠죠 달러일 테죠 javaMoney를 하면 보시다시피 게터가 없죠 게터가 하나 있긴 하죠 제가 금액을 얻을 수 있도록 말이죠 하지만 getAmount라고 하고 완성하면 IDE가 이미 속성으로 대치할 겁니다 저희는 게터나 세터같은 게 없고 속성만 있을 뿐이기 때문이죠 따라서 이는 코틀린에서 자바로 소비되는 거죠 여기 자바로 가서 퍼블릭 스태틱 보이드 메인을 만들어 보죠 그런 후 봅시다

타입을 디클레어 해야죠 머니는 새 머니와 같고 100와 달러이다 됐죠 다른 점 하나는 코틀린에서 세미콜론이 선택적이라는 거죠 선택적인 이유는 이걸 써야 하는지 말아야 하는지에 관한 끝없는 논쟁을 위한 거죠 자바스크립트와 경쟁하려는 겁니다 moneygetAmount라고 하면 이제 전 자바에서 코틀린 타입을 쓰고 있으니 게터와 세터가 생기는 거죠 따라서 여러분이 어떻게 사용하는가에 따라 관용구가 되겠죠 이는 다른 자바 파일과 다른 코틀린 파일이 하나의 프로젝트에서 아무 문제 없이 매끄럽게 작동하는 거죠 그럼 이제 기능을 만들어 보겠습니다 sendPayment라는 기능을 만들어 보죠 머니가 필요하죠 Money라고 치고 머니를 printin하게 될 겁니다 물론 문자열 보건이 있죠 sending moneyamount 라고 하면 되겠죠 이 중괄호는 안 쓰셔도 됩니다 넘기고 있는 단일 속성일 뿐이고 잠시 후에 보실 겁니다 이제 이걸 예를 들어 sendPayment 티켓이라고 하면 되겠죠 코틀린은 또한 보시다시피 리턴 타입을 정의내리지 않습니다 기본값으로 이건 유닛이고 보이드 같은 거지만 보이드는 아니죠 이는 사실 싱글톤, 즉 오브젝트의 단일 인스턴스인 거죠 이것이 유닛이라면 여기 넣을 필요 없겠죠? 그럼 여기 새로운 파라미터를 넣고 예컨대 메시지라고 하죠 이건 문자열을 가지게 될 것이고 기본값 파라미터를 가지면 되겠죠 여기 보시면 기본값 파라미터를 만들었기 때문에 컴필레이션 오류가 없죠 이는 과부하된 기능의 측면에서 많이 절약해 줍니다 과부하된 멤버 기능에서 말이죠 그냥 기본값 파라미터가 있으면 되고 그 다음엔 마음대로 하면 되죠 기본값 파라미터가 여러 개 있어도 되죠 여러 개의 기본값 파라미터가 있어도 되고 무엇을 전할지 번갈아 보낼 수 있으므로 파라미터 이름도 정할 수 있죠 따라서 사실 메시지는 "행운을 빌어!"와 같다고 쓰고 머니는 티켓과 같다고 쓸 수 있겠죠 이는 유용할 수 있습니다 예컨대 레거시 코드를 쓸 때 수정할 수 없는 기능이 있다고 치면 600개의 파라미터가 있는 거죠 아마 그 중 500개는 진실 거짓 불리안이라면 각 포지션 마다 어떤 파라미터를 전할지 일종의 통찰력을 주는 거겠죠 네 사람들이 망칠 때 정말 좋습니다 박수칠 때 말이죠 잘 되고 있다고 생각하고 있던 참이었죠 좋습니다, 다시 해 보죠 편집해 주세요, 성인 감독 차원에서 좋습니다 코틀린의 다른 특징은 정말 쉬운 기능이 있다는 점이죠 근본적으로 단일 값으로 리턴하는 것처럼 그냥 단일 수식 기능을 할 수 있습니다 외현 타입을 삭제했고 중괄호도 삭제하고 그냥 제가 원하는 실제 기능으로 리턴하는 거죠 아셨죠? 사실 수식의 개념은 코틀린에서 많은 부분에 나타납니다 예컨대 다른 기능을 만들어 보죠 ConvertToDollars라고 부르는 기능이죠 이는 머니를 가져갈 겁니다 머니로 리턴하겠죠 그러고 나서 할 일은 이건 when 스테이트먼트가 있고 이건 케이스이죠 따라서 통화가 달러이면 그대로의 머니가 리턴하는 거죠 아무 것도 할 필요 없으니 말이죠 유로이면 리턴하겠죠 moneyamount 곱하기 죄송해요, 새 인스턴스를 만들어야겠죠 머니, 그러고 나서 money

amount 곱하기 BigDecimal 110 그러면 달러가 되겠죠 그 외에는 IllegalArgument Exception을 던지고 "당신이 관심 있어 하는 통화가 아님" 이는 결국 when을 수식으로 취급할 수 있죠 따라서 이 리턴을 없애고 이 리턴도 없애고 여기에만 넣으면 이것이 그냥 when은 항상 수식을 리턴하는 것으로 만들어주는 거죠 사실 여기 리턴도 지울 수 있습니다 Money도 없애고 이것도 없애면 단일 수식이 생긴거죠 아셨죠? 단일 수식 기능입니다 이제 여기서 보시다시피 이건 오류를 주고 있죠 BigDecimal을 int로 운용하려고 했으니 말이죠 이를 리팩터하면 되겠죠 그리고 이걸 BigDecimal로 부르겠습니다 BigDecimal에 대해 말하자면 여기도 있죠 BigDecimal, BigDecimal 100 그리고 BigDecimal BigDecimal을 입력하는 거 좋습니다 즐겁습니다 여기 이게 있죠 이제 BogDecimal을 보시면 BigDecimal을 새로 만들어서 bd1는 BigDecimal 100과 같다고 하죠 보시다시피 bd1은 많은 기능이 있죠 나누기, 곱하기 등등 말이죠 백분율 같은 것을 하고 싶다면 어떨까요? BigDecimal의 백분율을 원하는 거죠 보통은 기본적으로 거기에서 인헤리트한 후 여러분 각자의 버전을 만들겠지만 코틀린에서는 저희가 추가한 기능 중 하나는 C#과 익숙하시면 확장 기능이라고 불리는 것으로 기본적으로 어떠한 클래스나 타입도 확장시킬 수 있다는 겁니다 따라서 BigDecimal의 기능을 가지고 확장시키고자 하는 클래스의 이름을 넣고 이것이 백분율이길 원한다고 하면 되죠 그리고 제가 하고 싶은 백분율은 예컨대 정수이고 그럼 된 거죠 봅시다 이것이 확장 기능이라는 점에서 그 클래스, 오브젝트의 인스턴스를 가지게 되는 거죠 좋습니다 이것으로 레퍼런스 할 수 있는 거죠 그러고 나서 이건 백분율로 곱해지고 다시 BigDecimal로 둘러쌓여야겠죠 백분율 그런 후 나누고 또 다른 BigDecimal 100이죠 뭐가 잘못 됐죠, 백분율이어야죠 백분율 좋아요, 이제 bdi에 백분율이 생긴 거죠 그렇죠 percent7이라고 하면 특정 백분율을 주는 거죠 그리고 이 확장 기능은 패키지 내에서 정의된 어디에서든 포함되는 겁니다 따라서 이 경우 comjetbrainsgio에 있죠 거기 포함될 겁니다 따라서 확장 기능을 만들 수 있고 표준 라이브러리가 실제로 여러 확장 기능을 포함하고 있다는 걸 볼 수 있으실 겁니다 이제 한 걸음 더 나아가 보겠습니다 사실 모든 것을 확장시킬 수 있기 때문이죠 가서 정수를 확장시켜보죠 fun Int이라고 하고 percentOf를 치면 그 반대를 할 겁니다 어떤 것의 10프로를 원한다고 하죠 그럼 예컨대 머니라고 하고 돈의 10프로를 원하죠 리턴하겠죠 봅시다, 머니를 리턴하겠죠 amount

multiply가 될 것이고 여기는 실제 인스턴스를 참조할테니 this일 것이고 다시 한번 this는 BigDecimal로 쌓여야 하고 100으로 나눠지겠죠 좋습니다 순서가 똑바로 된 것 같습니다 실행이 잘못되도 상관 없어요 아무도 신경 안 쓰죠 어쨌든 이제 이렇게 할 수 있죠 7 percentOf BigDecimal 100라고 하죠 됐죠? 아니죠, 죄송합니다 머니 머니라고 하고 아직 박수치지 말아 주세요 머니 그냥 가지고 있는 머니를 가져오죠 7percentOf(popcorn) 됐죠? 좀 더 괜찮은 걸 해보죠 사실 이렇게 하고 싶습니다 7 percentOf popcorn이라고 하고 싶죠 괜찮을 겁니다 그렇게 하셔도 되죠 여기 구불구불한 것 보이시나요? Alt, 엔터, 'infix' 첨가 됐죠 단일 파라미터를 가진 어떠한 확장 기능도 infix 표시로 불러올 수 있습니다 그리고 제가 한 건 거기 infix를 추가한 것이죠 이것이 코틀린으로 DSL 접근을 할 수 있게 만드는 겁니다 좋습니다 제가 정말 하기 싫어하는 것 중 하나는 BigDecimal을 쓰는 거죠 귀찮죠 코틀린에서 타입 롱의 값을 만들고 싶다면 long 100L라고 치면 타입 롱이 될 겁니다 이렇게 할 수 있다면 좋겠죠 bd2는 100BD와 같다 하지만 못합니다 이건 내장되지 않았죠 하지만 코틀린에 있는 것은 확장 속성이라는 겁니다 이건 확장 기능과 완전히 똑같은데 속성으로 확장시키는 것만 다르죠 따라서 bd같은 걸 할 수 있죠 이제 그럼 심지어 타입 정수에 확장 속성을 만들길 바라냐고 묻는 거죠 네 BigDecimal을 리턴하겠죠 그럼 여기에서 BigDecimal을 리턴할 것이고 이건 인스턴스죠 사실 더 쉽게 만들기 위해 이걸 수식으로 바꿀 수도 있죠 됐습니다 이제 100bd가 생겼죠 이걸 전할 때 BigDecimal보다 훨씬 근사하고 그냥 100

bd라고 하면 됩니다 아셨죠? 기능으로 할 수 있는 또 다른 것은 확장할 수 있는 특정 수식이 있다는 거죠 예컨대 더하기 연산자를 확장할 수 있습니다 전 이걸 다 입력하지 않고 절 위해 이 일을 해줄 작은 것을 해 보도록 하죠 제가 얼마나 빨리 타자 치는지 보셨죠? 제가 한 일은 이제 돈에 대한 더하기 연산을 치환한 것이죠 따라서 비용은 티켓 더하기 팝콘이라고 할 수 있죠 비용 금액에 추가할 수 있도록 해주는 겁니다 이를 더하기, 빼기 곱하기 등으로 할 수 있습니다 여러분이 사용할 수 있도록 하는 특정 연산을 따르도록 내장된 컨밴션이 많죠 좋습니다 여기에서 저희는 여러 타입을 만들었습니다 전부 지워서 집중할 수 있도록 해보죠 저희는 여러 타입을 만들었죠 제가 만든 이 타입를 보시면 전 실제로 타입을 구체화한 적 없지만 그러셔도 됩니다 예컨대 val train costs 라고 할 수 있죠 예컨대 트레인은 타입 머니이고 그러면 새로운 값으로 시작하는 거죠 100bd 그러고는 달러를 쓰는 거죠 train=null이라고 한다면 오류를 주겠죠 사실 2개의 오류가 날 겁니다 하나는 이것이 변경할 수 없는 변수이기 때문이죠 고치면 되겠죠 이걸 고칠 수 있도록 만들었습니다 IDE가 밑줄 그은 게 보이시죠 이건 피해야 하는 것이라고 지적해주는 겁니다 코틀린에서는 변경 불가능성을 강요하진 않지만 권장하고는 있습니다 모든 목록같은 것은 기본값으로 변경할 수 없죠 따라서 코틀린에서는 널을 할당할 수 없습니다 코틀린은 널 포인터 예외를 없애려고 하기 때문이죠 타입은 기본값으로 널이 될 수 없다고 하면서 말이죠 하지만 어떤 이유에서 널이 될 수 있는 타입이 있길 바랄 때도 있죠 지루할 때 말이죠 물음표를 추가하시면 되고 그러면 그런 타입에 널을 할당할 수 있는 기능을 줄 겁니다 보통 코틀린으로 작업하실 때 이걸 필요없을 수도 있죠 널이 될 수 있는 타입은 필요 없을 수도 있지만 자바와 인터롭하고 있으고 자바는 널이 될 수 있으니 말이죠 예컨대 이런 기능을 만든다면 fun javaMoney라고 하고 type JavaMoney의 머니를 가지고 이걸로 뭐든 하는 거죠 println moneyamount가 유효하다라고 해보죠 그럼 이건 널이 될 수 있죠 에컨대 이 타입으로 리턴하는 기능의 인스턴스로 불러진다면 널이 될 수 있죠 그리고 물음표를 추가해서 이걸 표시할 수 있죠 그렇게 하실 때 IDE가 오류를 주는 게 보이시죠 안전한 운용이라고만 하거나 느낌표 두 개가 유효하다고 하는 거죠 왜냐하면 이는 근본적으로 널 참조 예외와 부딪히게 될 것이라고 말하는 것이기 때문이죠 이를 해결하는 데에는 2가지 방법이 있습니다 먼저 예컨대 머니 널이 아니다고 할 수 있죠 그런 후 널이 아니면 운용하라고 할 수 있죠 이걸 위로 올리겠습니다 좋습니다 그게 하나의 방법이고 혹은 더 짧은 방식은 그냥 안전 운용이나 Elvis 운용을 쓰는 거죠 그건 여기 있죠 이제 그저 머니가 널이 아니면 뭔가를 하라고 할 수 있는 겁니다 기능을 원하면 그것도 가능합니다 널인 걸 알지만 그냥 자승자박하고 싶다는 의미죠 아셨죠? 여기서 조심하셔야 합니다 많은 경우 코틀린을 시작할 때 여기 작은 물결 표시가 있으니 이렇게 생각하기 쉽죠 널이 될 건지 사실 잘 모르겠어 널이 아니길 원하니까 그냥 널이 아닌 사례는 그냥 다루지 않고 그냥 이대로 해야지 그러다 앱을 실행하고는 이러시겠죠, 잠깐 코틀린은 널 참조 예외를 없앤다고 했는데 그렇죠 좋습니다 또 뭐가 있죠 그렇죠 다른 문제로 넘어가죠 고등 기능으로 말이죠 고등 기능과 다들 친숙하실 겁니다 기본적으로 기능을 가지고 혹은 기능을 리턴하는 기능으로 코틀린에도 있습니다 findEmails users 사용자 목록이라고 하면 되죠 그러고는 새 기능을 만들죠, 즉 서술어이고 여기 기능을 넘기고 있죠 문자열을 가지고 부리언을 리턴하는 기능입니다 됐죠? 그러면 이건 아마 사용자 목록을 리턴하겠죠 근본적으로 제가 하는 건 사용자 목록을 거르는 겁니다 좋습니다 이건 나중에 하죠 TODO "Later" 좋습니다 이 TODO는 내장되어 있습니다 실행되지 않은 예외 대신 이걸 쓰셔도 됩니다 오늘 다루지는 않겠지만 다른 것을 할 겁니다 Nothing은 코틀린에서 정말 좋은데 지금은 다루지 않겠습니다 걱정할 건 없죠 방금 지어냈습니다 좋아요 감사합니다 그럼 이걸 어떻게 쓸까요? findEmails를 할 수 있습니다 사실 사용자가 있으니 사용자가 만들도록 하죠 usersFromJSONFile라고 하고 여기 사용자가 있으니 usersjson이라고 하고 이는 사실 제가 이미 가지고 있는 기능이고 기본적으로 json을 이용해 파일에서 사용자를 읽어 냅니다 그리고 이건 여러분이 이미 본 적 있는 전형적인 데이터 클래스입니다 유일하게 새로운 점은 속성 역할을 가진 enum 클래스 또한 있다는 거죠 아셨죠? 이제 사용자라고 쓰면 되고 그럼 그 기능을 넘길 겁니다 이제 이름 기능을 넘길 수 있죠 컬럼 컬럼 참조를 사용하거나 lambda를 넘길 수도 있죠 코틀린에서 lamda는 이러한 신택스를 따릅니다 파라미터 이름을 넘기고 예컨대 파라미터 이름이 rightcom으로 끝난다고 하는 거죠 이제 com으로 끝나는 사용자 목록을 받게 되는 겁니다 코틀린에서 단일 파라미터가 있을 때 사실 외현적으로 언급하지 않도록 정해서 it으로 대처할 수 있습니다 Groovy와 유사하게 그냥 it을 쓰시면 됩니다 코틀린에서 할 수 있는 또 하나는 기능으로의 마지막 파라미터가 또 다른 기능일 때 실제로 괄호에 넣지 않아도 됩니다 약간 바깥에 있는 느낌이 들죠 다시 한번 말하지만 이건 좋은 DSL을 만들도록 해주는 특징 중 하나이고 여러 라인으로 할 수도 있습니다 이제 findEmails를 보시면 어떤 면에서는 언어의 일부인 것처럼 느껴질 수도 있지만 사실 그게 아니라 기능인 겁니다 그리고 비동기식 프로그래밍을 코루틴으로 실행했을 때 별로 였습니다 C#과 익숙하시다면 C#는 동기화한 후 기다리면 언어에서 키워드가 있죠 코틀린에는 없습니다 그냥 기능일 뿐이죠 따라서 여러분에게 다양한 것을 어떻게 할지 결정하는 데에 있어 융통성을 주는 겁니다 이 모든 것을 하실 필요는 없습니다 이 모든 것이 내장되어 있기 때문이죠 예컨대 dotComUsers라고 하면 users

filter라고 했을 때 보시다시피 이걸 완성하니 파라미터에서 포함 버전을 실제로 선택하는 거죠 emailendsWith com이라고 하면 되겠죠 itid로 분류하기로 하면 되죠 그러고 나서 이렇게 해보죠 itemail과 it

username 쌍으로 맵핑하기로 하면 됩니다 됐죠? 이 모든 기능은 실제로 출시된 작은 표준 라이브러리에 내장돼 있고 Android에서도 문제 없을 겁니다 아주 작습니다 그리고 모든 것은 생성 컬랙션에 확장 기능까지 가지는 겁니다 따라서 요즘 유행하는 모든 기능적인 것을 다 가지게 되는 겁니다 따라서 이건 한 쌍으로 주겠죠 사실 더 괜찮게 만들 수도 있죠 쌍으로 하는 대신 it to로 하면 말이죠 따라서 이메일에서 사용자 이름을 맵핑하죠 이게 뭘까요? 그냥 쌍을 만들어내는 infix 기능입니다 아셨죠? 전 때로 전체 맵을 다 살펴보진 않습니다 예컨대 전 단일 요소에만 돌아가고 싶은 거죠 여기서 할 수 있는 건 destructure 클래스입니다 코틀린에서 데이터 클래스이죠 id, 사용자 이름, 이메일 이렇게 할 수 있죠 그러고 나서 그냥 ID를 쓰는 거죠 이건 멋지지만 IDE가 불평하면서 이러겠죠 이 변수는 한 번도 안 쓰네 그런 경우 실제로 이걸 밑줄로 대처할 수 있습니다 그럼 된 거죠 따라서 원하는 값은 destructure하고 사용하고 싶지 않은 것은 밑줄로 대처하면 다 된 겁니다 좋습니다 또 무엇을 보여 드릴까요? 좋습니다 여기 다른 코드도 좀 있죠 산술적 데이터 개념 타입과 익숙하시다면 이건 근본적으로 이 타입이든 다른 타입이 될 수 있죠 부리언 인스턴스처럼 말이죠 코틀린에서는 하는 방법은 coclasses를 쓰는 거죠 이걸 시작하기 전에 여기를 열어 보겠습니다 보시다시피 사용자 결과가 오류를 보이고 있죠 기본값으로 코틀린에서는 클래스에서 인헤리트할 수 없기 때문이죠 따라서 모든 클래스는 근본적으로 최종입니다 클래스에서 인헤리트하고 싶다면 오픈 모디파이어를 사용해야 합니다 저는 실드를 사용했고 이 실드는 근본적으로 이건 사용자 결과가 가지는 위계질서라고 말하는 겁니다 사용자 결과에서 인헤리트 될 다른 클래스는 어디에도 없을 거라는 거죠 사용자 결과에서 인헤리트될 모든 것은 같은 파일에 있거나 혹은 물론 서브클래스로 만들어야 한다는 거죠 그럼 이걸 위로 옮기면 이건 서브클래스이겠지만 이걸 사용자 결과로 프리픽스해야 겠죠 좋습니다 전 클래스 밖으로 만들었습니다 왜 그랬을까요? 보기 좋으니까 아닙니다 이건 사실 기능을 인보크하는 경우에 좋은 겁니다 이러시겠죠, 좋아, 성공하면 값으로 리턴하길 원해 널이면 메시지로 보내야지 그러면 성공할 때 리턴하고 싶은 값이 포함된 이 타입이 있을 것이고 메시지가 있을 때 리턴하고 싶은 타입을 포함한 것도 있고 그러면 오류 상황에 적용되는 속성이 무엇인지 비오류 상황에 적용되는 속성이 무엇인지 그 시매틱을 이해해야 하고 아니면 그냥 예외로 던져버리겠죠 이 경우 두 타입을 리턴하는 기능을 사용하면 되겠죠 그러면 그 결과에 기초해 다른 것을 하는 겁니다 예를 들어 이렇게 해 보죠 인스턴트 val을 만들고 결과는 유저결과와 같고 죄송해요, retreiverusers죠 이제 when을 할 수 있죠 결과가 성공이면 예컨대 이렇게 할 수 있겠죠 결과를 받을 것이고 그런 후 users ForEach printin 이름을 하면 되죠 됐죠? 사용자이름 그러고 나서 실패를 해야죠 Result println resultmessage 됐죠? 그럼 이제 결과에 근거해서 즉 리턴되는 타입에 기초해서 다양한 것을 할 수 있죠 여기 하나 보이는 건 이것이 녹색이 됐다는 거죠 큰 화면에서 보이시는지는 모르겠지만 이것이 녹색이 됐습니다 이건 스마트 캐스트입니다 이것이 코틀린에 있는 또 다른 겁니다 제가 널 확인을 하고 있을 때 보였죠 스마트 캐스팅이기 때문에 이건 널이 아니라고 알려주는 거죠 외현적으로 다시 와서 이렇게 말하지 않으셔도 됩니다 이건 타입 성공인 걸 아니 가서 타입 석세스라고 캐스트하고 속성에 접근하라고 말이죠 컴파일러가 대신 해 줄 겁니다 그게 스마트 캐스팅이죠 좋습니다 안드레이에게 넘기기 전 마지막으로 중요한 것은 그냥 빨리 언급할 내용은 여러분이 보고 계신 필터 맵 같은 이 많은 것이 근본적으로 열정적인 평가입니다 하지만 또한 게으른 평가를 하는 능력도 있습니다 예컨대 val을 할 때 죄송합니다, generateSequence 그러고 나서 예컨대 1이라고 하고 그럼 여기 it 곱하기 10이라고 하고 나서 values를 하겠죠 이제 valuestake(10)이라고 하고 forEach println it라고 하는 거죠 이제 이건 시퀀스를 만드는 겁니다 무제한의 발전기이죠 절대 멈추지 않을 겁니다 1에서 시작해서 10배로 되는 거죠 하지만 제가 하는 얘기는 10개의 요소만 가지고 프린트하고 싶다는 거죠 기본적으로 이건 10에 도달할 때까지 소비하고 프린트하죠, 이건 필요 없고 아룸다은 크리스마스 트리를 프린트했습니다 한쪽으로 치우쳤죠 피라미드든 뭐든 여기서 멈추죠 여러분이 가진 어떤 것이든 예컨대 저희가 가진 사용자들 usersJson에서 온 사용자들은 asSequence로 해서 게으른 평가로 바꿀 수도 있는 거죠 됐죠? 오늘 시간은 이게 다입니다 분명 언어가 훨씬 더 많죠 온라인에 가셔서 많이 배우세요 감사합니다 안드레이에게 넘기겠습니다 감사합니다, 하디 안녕하세요 보셨듯 코틀린은 이미 많은 것을 가지고 있지만 전 현존하는 것을 배우기 전에 새로운 미래를 추가하는 못된 사람이죠 이제 이야기를 들려 드릴텐데 클리커를 먼저 찾아야겠습니다 클리커 있나요? 없군요, 알겠습니다 그럼 클리커 없이 이야기를 하도록 하죠 제가 오늘 할 일은 코틀린의 미래 버전에서 어떤 기능을 가질지에 대해 이야기하는 겁니다 감사합니다 지금 저희가 일하고 있는 첫 번째 큰 것은 플랫폼으로 다양한 플랫폼을 지원합니다 역사적으로 코틀린은 JVM 바이트코드로 컴파일 되죠 자바 프로그래밍 언어와 마찬가지입니다 데스크탑에서 서버를 실행할 수 있고 물론 Android에서도 할 수 있죠 그리고 어디든 같은 바이트코드입니다 그래서 새 버전뿐 아니라 예전 버전의 Android에서도 실행될 수 있죠 하지만 이 이야기는 여기서 끝나지 않습니다 새 플랫폼을 추가하기 때문이죠 최근에 저희는 추가했는데 신이 플랫폼을 좋아하지 않나 봅니다 최근에 자바스크립트를 추가했습니다 이는 코틀린이 이제 자바스크립트 코드를 컴파일할 수 있고 브라우저나 nodejs에서 실행될 수 있다는 거죠 이제 저희는 세 가지 주요한 아주 인기 있는 가상 머신을 지원합니다 JVM, Android Dalvik, 그리고 JavaScript VMs이죠 하지만 가상 기계가 실용적이지 않고 이용할 수 없는 경우가 미국에 많습니다 예컨대 iOS의 경우 가상 기계가 굉장히 제한적입니다 다이나믹 코드 생성을 할 수 없고 작은 임베디드 시스템의 경우 VM이 맞지 않죠 혹은 리눅스 명령 라인 도구의 경우 VM은 너무 오랫동안 시작하는 도구가 될 겁니다 따라서 이건 좀 곤란합니다 그래서 저희는 코틀린 네이티브라는 것을 만들고 있죠 현재 기술 미리보기로 사용 가능 합니다 저희는 LVM을 이용해 코틀린을 네이티브 코드로 컴파일하려고 노력 중이고 다양한 플랫폼에서 실행될 수 있는 독립적인 바이너리이죠 현재 iOS, Linux, Mac을 지원하고 윈도우는 작업 중입니다 따라서 이는 코틀린에 대한 비전으로 우리를 데려가 주고 이는 현대 애플리케이션의 모든 컴포넌트 안에서 원하는 플랫폼 상에서 실행될 수 있을 것이라는 거죠 많은 웹 애플리케이션이 서버와 고객 모두 코틀린으로 쓰여졌다고 생각해 보세요 혹은 예컨대 Android와 iOS 같은 모바일 플랫폼 사이에 코드를 재활용하는 것을 생각해 보세요 혹은 이전 사용 사례 두 가지를 섞어서 실제 멀티플랫폼 시나리오를 얻는다고 생각해 보세요 따라서 코틀린에 대한 우리의 비전은 한 프로젝트에서 다양한 모델이 다른 플랫폼으로 컴파일되는 겁니다 물론 코드도 공유하고 싶겠죠 다양한 많은 것을 지원한다면 다른 곳에서 같은 코드를 실행하고 싶을 겁니다 이것이 가능해지도록 저희는 노력 중입니다 하지만 아주 중요한 것이 있습니다 이전에 많은 프로젝트들은 플랫폼을 획일화하기 위해 노력해왔기 때문이죠 이는 종종 정말 다른 공통 분모로 끝나곤 했습니다 모든 플랫폼에서 이용할 수 있는 것만 가지고 하면 기본적으로 최소한의 인터페이스에 갖히는 거죠 그리고 저희는 그것을 원하지는 않습니다 저희는 여러분이 각 플랫폼에 맞춘 멋진 API를 사용할 수 있길 바랍니다 예컨대 가장 최신 버전의 Android 같은 것이나 여러분이 원하는 다른 것을 말이죠 코드를 공유하고 싶으시면 그때서야 공통된 API에 마지못해 의존해야겠죠 따라서 다양한 사업 원리 등을 가진 공통된 모델이 있고 코틀린으로도 쓰여진 각 플랫폼에 맞춰진 모형이 동시에 작동한다는 거죠 또한 이 둘은 서로 소통할 수 있습니다 따라서 필요할 때 플랫폼 API를 이용하면 되고 필요할 때 코틀린 코드를 사용해도 되는 거죠 따라서 요점은 우리의 미래는 멀티플랫폼이라는 겁니다 다음 다음 큰 부분은 coroutine입니다 원리는 이해하기 쉽습니다 모든 사람이 비동기식 코드를 써야 한다는 거죠 이 세상은 순차적인 실행을 하기엔 이제 너무 크기 때문이죠 이게 저희 현실이지만 힘들죠 비동기식 코드 써 보신 분 있나요? 꽤 많이 손을 드셨죠 이를 하지 않으신 분은 실제로 가까운 미래에 하게 되실 겁니다 문제는 순차적 코드를 쓰기가 실제로 어렵다는 거죠 혹은 여러분을 지원하는 언어를 배우기 전에 힘들었죠, 왜냐하면 언어는 상당히 도움을 줄 수 있기 때문이죠

기본적으로 코틀린에서 coroutine으로 하는 것은 동기식 코드를 쓰는 것과 같은 방식으로 비동기식 코드를 쓰는 겁니다 동기식 코드에서 뭘 사용하시죠? 루프, if, 브레이크와 컨티뉴 이런 것이죠? coroutine에서 비동기식 코드를 위해 여러분이 사용하는 것도 같은 겁니다 그래서 언어가 모든 것을 추적할 수 있고 여러분의 코드에 동기식 컴퓨터 사용을 위한 복잡한 통제를 표현하지 않아도 되는 거죠 콜백도 없고 근사한 기능 구조도 없죠 그냥 평범한 오래된 순차적으로 보이는 코드일 뿐입니다 멋지지 않나요? 감사합니다 coroutines에 대한 아이디어는 기본적으로 비동기식과 동기식에 대해 같은 추상화를 가진다는 것이죠 또한 스레드가 거의 없다고 생각하셔도 좋은 비유가 되겠죠 여기 코드 예시만 보여드리겠습니다 전통적으로 스레드로 해왔던 아주 많은 것들이 coroutine으로 가능하지만 coroutine은 굉장히 저렴합니다 슬라이드에 십만 개의 coroutine을 만드는 코드가 있습니다 생각해 보세요 평행으로 존재하는 십만 개의 coroutine과 각각이 1초 동안 기다리면서 리턴한다고 말이죠 따라서 이 프로그램은 1초 내에 완성됩니다 거의 1초이고 이는 물론 모든 coroutine이 동시에 기다리기 때문이죠 하지만 이걸 스레드로 하려고 하면 안될 겁니다 십만 개의 스레드는 메모리에 맞지 않죠 바로 그겁니다 따라서 coroutine으로 윈윈 상황이 된 겁니다 성능도 많고 굉장히 효율적이며 코드도 간단하죠 따라서 요점은 coroutine을 확인해 보시라는 겁니다 우리의 미래는 현재보다 훨씬 더 비가동식일 가능성이 높으니까 말이죠 이제 발표는 거의 끝났고 코틀린에 대해 더 배우고 싶으시면 웹사이트를 확인해 보세요 Android를 위한 섹션이 있습니다 또한 이 발표 바로 다음에 질의응답 시간이 있으니 섹션 C의 개발자 샌드박스로 오세요 저와 한디가 질문에 대답하고 있을 겁니다 와주셔서 감사합니다

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 등 우리는 다시 응용 프로그램에있어 우리는 거기에 갈 대부분의 시간 동안 에너지 프로파일 러를 볼 수 있습니다

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

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

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

[음악 재생]

RecyclerView ins and outs – Google I/O 2016

MALE SPEAKER 1 : ListView는 Android 10부터 사용되었습니다

그리고 그것은 반복 된 구조를 다루기위한 것입니다 일관된 내용으로 더 구체적으로 말하자면, 이런 종류의 반복 된 구조를 간단한 설정 여기에서 볼 수 있듯이 이전 설정 화면이 있습니다 진저 브레드에서 그리고 이것은 이미 많은 확장을 한 후에 나타났습니다

ListView가 의도 한 것입니다 때로는 내용이 너무 일관 적이 지 않은 경우도 있습니다 그래서 당신은 서로 다른 뷰 타입을 가지고 있습니다 등등 그리고 우리는 단지 기능을 계속 추가했습니다

그러나 ListView가 해결해야하는 핵심 문제 그렇다면 어떻게 할 수 있을까요? 수백 톤, 수천, 아마도 더 많은 것들 보기 자체를 만드는 것은 정말 비쌀 수 있습니다 특히 안드로이드 초기 시대의 오래된 기기에서, 메모리는 제한적입니다 따라서 수만 개를 만들 수는 없습니다 한 번에 모든 것을 다룰 수 있습니다

그리고 대답은 우리가 속이는 것입니다 따라서 ListView를 사용하면 연기와 거울로 트릭을 만들 수 있습니다 UI 개발에 종사하는 모든 사람 무대 마술사와 공통점이 많습니다 무대 마술사는 잘못된 지시와 다른 종류를 사용합니다 당신을 생각하게 만드는 무대에서의 트릭 너는 너가 진짜가 아닌 것을보고있다

그리고 그것이 옳다면 그것은 옳습니다 그래서, 그들이 보는 것은 용어로 UI입니다 사용자가 믿는 것의 그래서 우리가 사용하는 속임수는 우리가 단지 창조하고 놓는 것입니다 사용자가 지금 볼 수있는보기를 사용자가 스크롤하면 더 많은 항목을 계속 배치합니다 당신 머리 속에 있어야 할 이미지 지금은 "월러스와 그로밋" 트랙을 빠르게 깔고있는 곳 움직이는 기차 앞에서

이것이 기본적으로 ListView가 작동하는 방식입니다 그리고 이것을 가능하게하기 위해, ListView 어댑터 구성 요소를 사용합니다 이제 이것은 제공되는 구성 요소입니다 응용 프로그램 자체 그리고 그것을 생성하고 채우는 데 사용됩니다

항목보기 수요에 이 getView 메소드는 어댑터에 있습니다 특정보기에 대해 어댑터를 쿼리하는 데 사용됩니다 해당하는 데이터 항목을 표시하려면 목록의 특정 위치로 이동합니다 그리고 우리가하는 특별한 트릭은 또한 특별한 변환보기를 전달합니다

동일한 항목 유형으로 보장되는 어댑터가 새로운 위치를 믿는다는 것 동일한보기를 재사용 할 수 있도록 인플레이션 비용을 다시 지불 할 필요가 없습니다 시간이 지남에 따라 계속해서 더 많은 기능을 추가했습니다 그들이 일이기 때문에 ListView에 그 사람들이 애플 리케이션에 필요한 그리고 이런 종류의 질문이 많이 생겼습니다 그래서, ListView 기능 후에 기능 후에 성장했다

그리고 I / O 2010에서이 이야기를 다시 볼 수 있습니다 네가 그 중 몇 개를보고 싶다면 그 이야기 조심해 정말 멋지 네요 너는 그것을 봐야한다

나는 그것을 즐겼다 네가 원하면, 네 그 이야기 중 일부에서 우리의 고전적인 UI의 일부를 볼 수 있습니다,뿐만 아니라, 네 멋지 네 하지만 실제로 우리가 계속 기능을 추가 할 때 ListView에, 우리는이 복잡성 당좌 대월 지점에 일종의 타격을 입혔습니다

우리에게는 너무 많은 특징이있었습니다 서로 상호 작용을하지만 실제로는 그렇지 않다 모두 그들 중 조금은 일회성이다 그리고이 모든 긴 꼬리 기능들이었습니다 매우 이상한 상호 작용을 많이 일으켰습니다

그것이 실제 의미하는 바는 무엇입니까? 모두가 앱을 썼다 그 일은 그들이 원했던 방식대로 작동했습니다 하지만 그 많은 것들은 정말로 정의되지 않은 행동의 결과 ListView 구현 그 자체 그리고 일단 충분한 앱이 그렇게하기 시작하면, 그렇다면 우리가 지원해야하는 사실상의 API입니다 ListView의 동작에 대한 작은 변화 이러한 핵심 사용 사례 중 일부를 개선 할 수 있습니다

일부 앱의 영웅 사용 사례를 깨뜨리는 결과를 낳았습니다 다른 곳에서 사용하고 싶습니다 우리는 또한 많은 중복 기능을 가지고있었습니다 ListView에서 ListView 선택 또는 View focus와 같이 우리는 사용합니까? 이미 뷰 계층 구조가 키보드 포커스 같은 것을 처리하는 방법을 알고있다 네비게이션 할 때마다, 그러나 ListView 자체적으로 완전히 다른 아이디어를 가졌다

이 현재 선택의 측면에서, 선택기 드로잉 (Drawable)은 뷰 뒤 또는 위에 그려지는데, 설정 한 구성에 따라 다릅니다 그리고 이로 인해 많은 부분이 중복되었습니다 그리고 그것뿐 아니라, 훨씬 복잡한보기를 사용하여 ListView 시작하면 항목을 전환해야합니다 이 setItemsCanFocus 옵션으로, ListView를 무효로한다 내부 선택 처리 및 대신 View 계층의 포커스 처리를 사용합니다 마찬가지로 항목 클릭 수신기 주변에서도 동일한 문제가 발생했습니다

보기 클릭 청취자 및 다른 종류의 일반적인 터치 손질 그래서 ListView는 아주 좋은 편의를 제공했습니다 ListView에서 항목 클릭 리스너를 설정할 수있는 곳 그 자체에 대한 클릭을 얻습니다 그 목록에서 발생합니다 자,이 말이 아주 의미가 있습니다

정말 균일 한 목록, 항목 목록이 있고 방금 그것에서 뭔가를 골라 내고 싶다 팝업 메뉴와 비슷하다 오버플로 메뉴에서 가져온 것 오늘 앱 상단 구석에 있습니다 그러나 대안으로, 클릭 청취자를 연결하십시오 이러한 견해 자체

그리고 어느 쪽이 사건을 처리 할 것인가? 때로는 항상 명확하거나 직관적이지 않았습니다 그래서 사람들은 우리에게 많은 시간을 요구할 것입니다 너는 내가 어느 것을 사용하는지 안다 그리고 그 대답은 항상 끝을 맺었습니다 그것은 좋아, 좋아, 잘, 목록 항목이 얼마나 복잡한 지, 등등

언제든지 대답해야합니다 에 대한 질문을 명확히하는 유형의 많은, 좋아, 좋아 너 뭐하려고? 그런데 정말로 그런 종류의 개발자는 복잡합니다 이야기 하지만 실제로 그 종류의 큰 것 전체 RecyclerView 노력을 시작했습니다

ListView 애니메이션은 정말 어렵습니다 그리고 핵심 문제는 어댑터가 우리는 그들을 똑똑하게하기에 충분합니다 따라서 어댑터를 변경하면 notifyDataSetChange라고 말하면서, 그리고 가정은 바뀔 수있었습니다 우리는 무엇을 확신 할 수 없습니다 계속 진행하고 현재 모든 항목을 다시 바인딩 할 것입니다

보이는 것과 거기에서 가라 그리고 시간이 지남에 따라 몇 가지 프로토 타입이있었습니다 그 중 일부는 팀 구성원들이 그 중 일부를 수행했습니다 지역 사회 구성원들에 의해 행해졌 다 모두 애니메이션으로 항목을 표시하려고합니다

데이터 세트가 변경 될 때마다 안팎으로 일종의 직관적 인 방식으로 그러나 이들 모두에는 몇 가지 중요한 한계가있었습니다 이것들의 대부분은, 다시, ListView의 내부 구현의 상세 그 애플 리케이션은 정말로 의지했다 그래서 우리는 이러한 것들을 고칠 수 없었습니다 가능한 이러한 애니메이션 그래서 결국, 당신은 결국이 얼굴을 ListView로 만듭니다

그래, 봐 봐 봐 그의 얼굴에있는 후회에서, 나는 이것을 [좋아하지 않는] 일을하는 것처럼, 그러나 나는 이것을해야하는지 정말로 확신하지 못합니다 나는 후회할거야

나는해야 해 그래, 쳇이 얼굴을 많이 쓰고있어 MALE SPEAKER 2 : 프레임 워크와 함께 제공됩니다 맞아 그리고 또 다시,이 문제들 중 또 하나 우리가 ListView와 함께했던 것은 단지 이 복제 된 기능 – [부끄럽다] – 뭐라구? [2] : [? – 슬 라이드

?] [INAUDIBLE] 네, 우리가 한 것 같네요, 그렇지 않습니까 승인 그래서 우리가 계속 전진하면서, 사람들이 시작했습니다 그들의 ListView에서 훨씬 더 복잡한 레이아웃을 사용하여 항목

우리는 매우 간단한 설정 화면과 같은 것으로부터 시작했습니다 진저 브레드에서 갑자기 사람들이 전체 사회적 흐름에서 항목을 보여주고 있습니다 그들에게 많은 다른 구성 요소들로, 상호 작용의 많은 다른 점과 더불어 그래서 우리가 ListView에서 제공 한 간단한 그리드와리스트 및 GridView와 프레임 워크는 실제로 이러한 유스 케이스를 적절하게 처리하기에는 충분하지 않았습니다 사람들은 이러한 종류의 비틀 거리는 격자를 만들기를 원했고, 반응 형 레이아웃 등등

그리고 정말로 이러한 유형의 레이아웃을 변경하려는 경우, 당신은 많은 핵심 코드를 재 작성하고있었습니다 ListView는이 어댑터 기반 재활용을 수행하는 데 사용됩니다 그래서 우리가 할일이 있다면, 우리는 무엇을 바꾸겠습니까? 음, 우리가하고 싶었던 것들 중 하나 모범 사례를 높이는 것이 었습니다 ListView를 사용하여 일류 API에 대한 작업 우리는이 ViewHolder 패턴을 사용하여 로마와 내가 갔다 "World of ListView"대화 링크 이전 이야기에서

ViewHolder 패턴에 대한 좋은 점은 ListView에 존재했던 것처럼 그것은 하나를 주었다 당신이 정렬 할 수있는 지점 당신이 재사용 한 함께 일하고 그 단일 액세스 지점을가집니다 findViewbyID 호출을 많이 캐시 할 수 있습니다 확장 된 뷰 하위 계층 구조에 적용 할 수 있습니다 특히 오래된 기기의 경우 큰 차이를 만들었습니다

더 적은 순회를하고있었습니다 그리고 점점 더 복잡한 항목 레이아웃을 만들면서, 그것은 더 중요했다 그래서 우리는 생각했습니다 좋습니다 그 부분을 핵심 API의 일부로 만듭니다

좋아, 이제 가자 그냥 이것을하는 대신에 모두가 블로그를 읽어야하는 모범 사례가되어야합니다 알아 내야 할 게시물, 앞으로 나아가서 이것이 당신이 보는 어떤 것입니다 작업 설명서를 읽 자마자 RecyclerView

우리는 뷰 생성과 바인딩을 분리하려고합니다 자, 이것은 커서 어댑터에서 일어난 일이었습니다 당신이 SQL로 작업했다면 아마 많은 사람들이 사용했을 것입니다 라이트 데이터베이스 또는 콘텐츠 제공 업체 ListView 어댑터의 보조 데이터 소스로 사용하십시오 우리는 onCreate와 onBind 단계를 분리했습니다

그러나 당신이 생생한 ListView 어댑터를 직접 작성했다면, 다음은 본질적으로 질문이었습니다 getView 메소드의 처음 몇 줄의 코드 convertView가 null과 같은 경우, 새로운 것을 작성합니다 그런 다음 일종의 철저히 구속하고 바인딩을 수행하십시오 그리고 이것은 그 것들 중 하나였습니다 잊기 매우 쉽다

그리고 네가 그 일을 잊어 버린다면 이 재활용 정비공에서 완전히 잃어버린 것을 의미합니다 그 ListView 정말 당신의 성능을 향상 종류 준 때로는 분명하지 않았습니다 왜 이것이 외부에서 일어 났는지 그리고 다음으로, 우리는 정말로 이 선택 처리의 무리를 버리고 정말 아주 단순화 된 목록에만 의미가 있습니다

프레임 워크의 일반적인 포커스와 입력에만 의존합니다 취급, 왜냐하면 이것은 다시, 그냥 단순함에 온다

프레임 워크의 나머지 부분과 함께 작업, 일종의 일관성을 강화시키는 종류 뷰 계층의 나머지 부분과 함께 그리고 이기적으로, 우리는 조금 더 원했고 우리의 끝에서 더 쉬운 유지 보수 왜냐하면 나는 아무도 내부를 보지 않았다면 AOSP에서 ListView의 나는 그것이 어린 아이들을 놀라게하는 데 사용될 수있을 것이라고 확신한다 그래서 우리는 핵심을 보편적으로 유지하려고했습니다 총 통증이었던 모든 것들 나 자신의 재활용을 쓰려고하면 다시 쓰다 컨테이너, 우리는 길을 갖고 싶었다

개발자에게 어느 정도 제공 통조림 형태로 무료로 제공 모든 것을 재발견하는 일종의 우리가 힘든 길을 따라야 만 했어 그리고 우리는 당신이 이 롱테일 기능들을 모두 구현하십시오 그 ListView는 ListView에서 API로 제공됩니다 다른 플러그인과 마찬가지로 우리가 공유하고 혼합 할 수 있습니다 당신이 원했던 경험을 얻기 위해 매치

우리는 똑똑한 어댑터가 필요했습니다 ListView 어댑터의 문제 notifyDataSetChanged라고 말할 수 있습니다 좋아, 뭐가 바뀌 었니? 어 그리고 그것은 당신이 아는 전부였습니다 그리고 이것은 애니메이션을 정말로 어렵게 만듭니다

우리는 그 라인을 따라 조금 더 나아갈 것입니다 따라서 RecyclerView 어댑터는 변경된 사항, 그저 뭔가가 변한 것이 아닙니다 이제 데이터 소스로 작업하는 경우 그런 종류의 세분화 된 메시징을 제공하지는 않지만, 여전히 이전 ListView 스타일을 사용할 수 있습니다 헤이, 뭔가 바뀌었고, 알아 내려고 우리는 최선의 노력을 다해 대응할 것입니다

하지만 정말로, 만약 당신이 어떤 지식을 가지고 있다면 데이터 세트의 특정 변경 사항이 무엇인지, 당신은 더 나은 결과를 얻을 수 있습니다 이것은 또한 우리가보다 효율적인 재활용을 할 수 있음을 의미합니다 애니메이션이 아닙니다 어댑터의 특정 항목 만 알면 변경되면 모든 것을 다시 바인딩 할 필요가 없습니다 그게 화면에있어, 우리는 단지 그 하나의 견해를 리 바인드해야합니다

측정 및 레이아웃에 많은 시간을 절약 할 수 있습니다 업데이트 적용 단계 알았어 그래서 그것은 RecyclerView 태어났습니다 그래서 ListView에서 배운 실수를 저지하십시오 좋아, 어떻게 RecyclerView를 쓰지? 같은 실수를 반복합니다

RecyclerView의 주요 기능은 다음과 같습니다 [? 보완 기반 아키텍처]? 이것은 RecyclerView의 아키텍처입니다 그리고 우리는 그것의 세부 사항을 통해 갈 것입니다 나는 그것이 매우 중요하다고 생각한다 나는 너의 대부분이 이미 그것을 사용한다고 믿는다

누가 무엇을하는지, 어떤 것을 사용해야 하는지를 아는 것은 좋은 일입니다 또는 어느 것을 사용자 지정해야하는지, 유스 케이스에 따라 다르다 RecyclerView를 사용하면 이것이 기본보기입니다 [INAUDIBLE] 3 가지 주요 요소가 있습니다 레이아웃 관리자, 항목 애니메이터 및 어댑터가 있습니다

따라서 어댑터는 레이아웃 관리자가 제공합니다 대부분의 사람들은 자신을 쓸 수 있으며, 항목 애니메이터도 같습니다 좋은 기본 설정이 있는데 [? 너는 할 수 있니?] [? 쓰기?] 당신 자신 그래서 레이아웃 매니저는 휠을 위치시키고, 항목 애니메이터가 애니메이션을 적용하고 어댑터 바퀴를 제공합니다 RecyclerView는 보스입니다

그래서 중앙 위치입니다 이 모든 구성 요소와 통신합니다 함께 일하게하는 것 그래서 우리는 레이아웃 매니저를 볼 필요가 있습니다 선형 목록 일 수도 있고 그리드 일 수도 있습니다

또는 [INAUDIBLE] 그리드 일 수 있습니다 그것은 무엇이든 수 있습니다 RecyclerView는 알지 못합니다 항목이 배치 된 방법에 대해주의하십시오 레이아웃 관리자의 책임입니다

또는 RecyclerView가 상호 작용을 처리합니다 와 더불어 [? 손가락?]하지만 레이아웃 관리자에게 알려줍니다 레이아웃 관리자 만이 알기 때문에 스크롤 보기가있는 곳 그래서 그것은 내용을 저장합니다 또는 포커스를 순회하는 경우 RecyclerView 기본 포커스 횡단을 처리합니다

왜냐하면 사실, [? V?] 프레임 워크가 처리합니다 그러나 초점을 맞추고 있고 아이템을 하나 더 필요로한다면, 레이아웃 매니저는 새 항목을 초점 영역으로 가져오고, 그것은 전에 존재하지 않았기 때문입니다 또는 접근성, [INAUDIBLE] 해당 항목에 대한 기본 정보를 제공하며, 하지만 레이아웃 관리자 [INAUDIBLE]은 (는) 알고있는 사람, 알겠습니다

이것은 섹션 제목입니다 또는 사용자 정의 대리인을 첨부 할 수 있습니다 이봐, 좋아, 이것에 집중하지 마라 또는 추가 정보 당신 만 제공 할 수 있습니다 [INAUDIBLE] 대리자가 액세스 할 수있는 RecyclerView 이를위한 API

알았어 좋아 ListView와 유사하므로 RecyclerView는 여전히 어댑터를 사용합니다 이제 RecyclerView 어댑터의 책임 다시보기를 만들뿐 아니라 ViewHolder를 생성합니다 그리고 ViewHolder는 우리가 실제로하는 것입니다

재활용을위한 추적 요소로 사용하십시오 따라서 항목을 바인딩 할 때 보기에 바인딩하지 않고 바인딩합니다 ViewHolder 전체에 적용됩니다 그리고 이것은 여러분이 할 수있는 것입니다 다른 정보를 숨길 장소로 사용하십시오

물론 어댑터의 책임입니다 변경 사항에 대해 RecyclerView에 알리기 데이터 세트에 발생하거나 데이터가 동기화되지 않은 경우 따라서 ListView와는 대조적으로 당신은이 항목을 사용할 수 있습니다 모델의 클릭 리스너 유형 사물의 경우 어댑터가 이제 구성을 담당합니다 아이템 상호 작용 처리 따라서 이들은 모두 클릭 리스너, 터치 리스너, 등등 어댑터는 또한 여러 View 유형을 처리합니다

다른 ViewHolders를 추적 할 수있는 일종의 당신이 추적 할 수 있습니다 – 그리고 나는 – 팁에 관한 한가지 팁을? weave?] 유형 ListView 세계에서 우리에게 줄 필요가있다 얼마나 많은 [? weave?] 유형, 재활용보기, 그들은 무제한입니다 그래서 나는 단지 [? r 점?] 레이아웃 [? 뭐라 구요?] [INAUDIBLE] 유형으로, 너 끝났어

맞아 따라서 귀하의보기 유형 ID는 더 이상 존재하지 않습니다 ListView를 사용하는 방식과 연속적이어야했습니다 어떤 종류의 고유 한 식별자가있는 한 보기 유형을 식별 한 다음 계속 사용하고, RecyclerView는 신경 쓰지 않습니다 즉,이 편리한 트릭을 사용할 수 있다는 것을 의미합니다

레이아웃 리소스 ID 자체 그리고 AEPT는 이미 그 ID는 유일 할 거라고 그 식별자에 꽤 잘 어울립니다 아, 너무 빨리지나 갔다 따라서 어댑터는 리사이클 리커버리 (recoverler recovery) 같은 것을 처리합니다 그래서 우리는 onFailedToRecycleView 개념을 가지고 있습니다

그러면 왜 무언가가보기를 재활용하지 못할 수 있습니까? 다시 한번, 우리는 명심하고 있습니다 사람들은 점점 더 복잡해지고있다 UI가있는 것들 그런 경우에는 당신의 견해에 많은 변화를 일으킨다 그것은 뒤집기가 매우 어렵습니다

따라서보기가 남아 있다는 것을 알고있는 경우 일종의 일관성없는 상태 어댑터와 앞뒤로 통신 할 수 있습니다 어댑터가 케이스로부터 복구를 정렬 할 수 있도록 보기가 일종의 엉망으로 된 곳 기대 이상으로 그리고 우리는 세분화 된 데이터 변경 이벤트를 가지고 있습니다 추가적으로, 핸들 효율을 정렬하고, MALE SPEAKER 2 : 성능 전 비어 있습니다 공연

그것은 효율성입니다 애니메이션 2 : 애니메이션 애니메이션 네 괜찮아

알았어 ViewHolder에 대해 자세히 살펴 보도록하겠습니다 왜냐하면 대부분의 사람들이 ViewHolder를 작성해야하기 때문입니다 RecyclerView를 사용하면 대부분의 시간을 그 곳에서 보내 게됩니다 ViewHolder의 라이프 사이클을 아는 것은 중요합니다

그래서 우리는 그것을 통과 할 것입니다 우리가 그것을 창조 할 때 무엇이 ​​일어나고, 무엇이 단계입니까? 따라서 레이아웃 관리자가 레이아웃을 계산하는 동안, 그것은 RecyclerView에게 알립니다 위치 5에 대한 뷰 그래서 그 위치에 대한 뷰를 얻고 싶습니다 RecyclerView는 캐시를 검사합니다

왜냐하면 캐시를보기 때문입니다 이제 캐시에 이미 가지고 있다면, 우리는 그것을 레이아웃 관리자에게 돌려 보낼 것입니다 그렇지 않다면, 우리는 그것을 가지고 있습니다 그것을 돌려 줄 필요가있다 ?] 우리가 그걸 가지고 있지 않다면, 그 사건은 안된다고, RecyclerView는 다음과 같이 말할 것입니다 – 어댑터에 물어보십시오, OK, 이 견해의 유형은 무엇입니까? 어댑터가이를 리턴합니다

다음 우리는 풀을 확인하러 간다 이것은 공유 풀일 수 있습니다 RecyclerView에서 사용하는 유일한 풀과 같을 수도 있습니다 이것에 대한 ViewHolder가 있습니까? 보기?]를 입력하십시오 No라고하면 어댑터에 어댑터를 생성하라고 지시합니다

이것이 실제로 ViewHolder를 만들 때입니다 또는 풀에서 이미 존재하는 항목을 반환했을 수도 있습니다 그런 다음 어댑터에게 알립니다 OK,이 위치를 바인딩합니다 이 ViewHolder에

반환하고 레이아웃 관리자에게 돌려줍니다 결국 레이아웃 관리자가이를 다시 RecyclerView에 추가합니다 같이 [? a?] [? 진짜?] 아이, 그리고 우리는 어댑터, 헤이, 이거 [? 보기?]가 레이아웃에 추가되었습니다 이것은 당신의 어댑터에 대한 아주 좋은 힌트입니다 그것을 알기 위해, OK, 사용자는이보기를 보려고합니다

레이아웃 관리자가 말할 수있는 다른 경우, 좋아, 나는이 견해를 끝내고 그것을 제거하고 재활용한다 RecyclerView는 어댑터에 알립니다 이보기를 삭제 했으므로 알려주세요 만약 당신이 [? 비싼?] 것들 그보기 안에, 당신은 그들을 uncache 수 있습니다 메모리에서 제거 할 수 있습니다

그런 다음 확인합니다 확인을 클릭합니다 이 위치에 유효합니다 이 위치에 유효하다면 캐시 할 것입니다 아이디어는 레이아웃 관리자가 다시 그 위치에 대해, 우리는 그것을 줄 수있다

어댑터와 대화하지 않고 이것은 성능상의 이유로 다시입니다 그리고 캐시는 가장 오래된 캐시를 제거합니다 그리고 나는 어댑터에게 말할 것입니다, 이봐, 우리는이 견해를 없앴습니다 이제 당신은 그것이 그 위치에서 재사용되지 않을 것이라는 것을 알고 있습니다 그래서 당신은 더 많은 메모리 정리를 할 수 있습니다

맞아 이것은 교훈이었던 중요한 단계입니다 ListView에서 ListView가 결국 이것을 추가했습니다 보기가 실제로 언제인지를 추적하는 데 사용할 수있는보기 리스너 더 이상 사용하지 않습니다 그리고 다시, 사람들은 훨씬 더 복잡한 UI를 만들기 때문에 이런 종류의 재활용 용기에서 요즘,이 단계를 통해 좋아요, 글쎄, 떠나는 대신에 이 거대하고 값 비싼 비트 맵은 이러한 견해에 화면 밖에서 캐시에 보관되고 있습니다

그 일을 깨끗이하지만 여전히 우리가 전에 가지고 있었던 핵심 시야 구조를 유지하라 나중에 다시 바인딩 할 수 있습니다 보기가 유효하지 않은 경우 – 어쩌면 아이템이 제거되었을 수도 있습니다 어댑터가 우리에게 말했거나 항목이 변경 되었기 때문에 보기의 내용이 표시되지 않습니다 더 이상 그 위치

[INAUDIBLE]이 (가) 더 이상 유효하지 않은 경우 풀에 보내면됩니다 어댑터에 대해 알려줍니다 레이아웃 관리자가 다시 계산하는 또 다른 사용 사례가 있습니다 일부 어댑터가 변경된 후 레이아웃, 일부 조회수는 사용하지 않습니다 그래서 [? 그것?] [? 있었습니까?] 모든 조회수 1에서 5, 그 다음 하나를 만든다

그것들은 단지 8 개만 사용한다 나머지 두 개가 누락되었습니다 RecyclerView가하는 일은 OK입니다 레이아웃 관리자가 더 이상이 뷰를 원하지만 ItemAnimator 그들을 원할지도 모른다 맞다

사라지지 않고 퇴색 시키길 원할 수도 있습니다 곧 따라서 RecyclerView가하는 일은, 사라지는 아이들마다, 아이들을 다시 자식으로 만들고 숨길 것입니다 레이아웃 관리자에서 나중에 자세히 설명하겠다

기본적으로 레이아웃의 하위 항목 목록 관리자의 관점은 아이들과 같지 않습니다 보기 그룹의 ItemAnimator가 OK라고 말하면, 우리는 ItemAnimator에게 말할 것입니다 이 아이들을 움직이십시오 그리고 ItemAnimator가 말했을 때, OK, 나는이 Views들로 끝났습니다 너는 우리가 원하는대로 할 수있다

RecyclerView가이를 제거합니다 그것은 그들이 사라지는 어댑터에게 말할 것이며, 우리는 그것을 재활용 할 것입니다 그렇다면 ViewHolder를 어떻게 잃을까요? 이것은 매우 중요합니다 왜냐하면 ViewHolder를 잃어버린다면, 성능 문제가 발생할 것입니다 [INAUDIBLE] 동일한 일이 발생하여 Recycler Layout Manager 고맙다

나는이 견해를 제거하고 싶다 RecyclerView는이보기가 유효한지 확인합니다 아니, 좋아, 이걸 수영장에 넣고 싶다 그리고 수영장 [INAUDIBLE] [? 그?] [? 이보기?] [? transisted?] 이것은 아담이 앞서 언급 한 것입니다 [? transisted?]는 [? 처럼 ?] [? ?] 내용을 애니메이션으로 만들거나, 우리는 약간의 애니메이션을하는 버튼을 가지고 있습니다

즉, [? 보기?]가 움직입니다 우리는 다른 ViewHolder를 위해 그것을 재사용 할 수 없습니다 왜냐하면 그것이 사라지고 나서 사라져 가고 있다고 상상해보십시오 우리는 그것을 다른 것으로 묶고 UI에 온다 퇴색 한 것처럼

그것은 마치 당신이 원하는 것이 아닙니다 당신은 신선한 전망을 원합니다 다른 몇 가지 사례가 있습니다 뷰가 일시적인 상태가 될 수도 있습니다 이것은 프레임 워크의 일부인 컨셉으로, RecyclerView 자체 만이 아닙니다

예를 들어, editText 위젯이있는 경우 사용자가 입력 한 텍스트를 가지고, 그리고 그들은 앞으로 나아가고 창조했습니다 여러 단어에 걸쳐 선택되었지만 다른 단어에는 없을 수도 있습니다 그것은이 복잡한 상호 작용의 종류입니다 사용자가 우리가 실제로 만든 것을 개발자의 책임으로 만들고 싶지 않았다 트랙을 정렬하고 해당 특정 항목이 다른 컨텍스트에서 리바운드 그럼 우리가 할 수있는 일은 없을거야

이 뷰를 다시 사용하면 RecyclerView에서 제거됩니다 [? 처럼 ?] [? 마지막?] 우리가 그 견해에 대한 참조 우리는 어댑터를 마지막 기회로 사용합니다 이봐, 나는이 견해를 재활용 할 수 없었다 재활용 할 수 있습니까? 대부분의 시간 때문에, 그것은 애니메이션 때문입니다 [? 선택시

?] 실제로 할 수 있습니다 그 상태에서 회복하십시오 유일한 문제는 우리가 궁극적으로 그것을 할 수 없다는 것입니다 우리는 무슨 일이 일어나고 있는지 모르기 때문에 따라서 어댑터는 [INAUDIBLE]이 (가) 재활용에 실패했거나, 당신은 그 애니메이션들을 끝내거나 [? 선택된?] 상태, 또는 아무 말도하지 않아도됩니다

나는 [INAUDIBLE] [? 이 ?] [? 암호 ?] 재활용처럼, 나는 그것을 사용할 것이다 그러나 어댑터가이 메소드를 구현하지 않으면, 기본적으로 false를 반환합니다 그래서 우리는 ViewHolder를 파괴해야합니다 그래서 그것은 죽은 웅덩이로갑니다

너는 이것을 원하지 않는다 이야기의 도덕은 아이템을 움직이는 경우, 계속해서 [INAUDIBLE] 애니메이션을 만들지 마십시오 우리는 ItemAnimator API를 사용하여 이러한 작업을 올바르게 수행합니다 따라서 Animate하려는 경우 ItemAnimator를 사용하십시오 ItemAnimator는 올바른 라이프 사이클 이벤트를 수신합니다

우리가 재활용 할 수 있도록 애니메이션 재생이 완료되면 해당 뷰를 재활용합니다 맞아 근본적으로, 당신은 모든 것을 잊을 수 있습니다 당신 앞에서 그 슬라이드에서 방금 일어난 일입니다 ItemAnimator 인터페이스를 구현하는 한

그래, [INAUDIBLE] 네가 스스로하고 있다면, 너 혼자 야 너가는거야 이 모든 문제를 직접 처리해야합니다 그래

그래 그리고 중요한 것은 [INAUDIBLE]입니다 [? 재활용,?] 당신 정말 ListView에서 배운 모든 것을 잊어 버려야합니다 대부분 유효하지만 [부적절] 유효하지 않은 비트가 실제로 여기에 상처를 줄 것입니다 따라서 다른 사용 사례가 있습니다

우리는 RecyclerView가보기 좋아, 좋아, 나는이 견해로 끝났습니다 우리는 그것을 수영장에 넣으려고했습니다 풀은 항목 유형 당 크기 당 제한됩니다 따라서 수영장에있는 뷰 유형이 너무 많으면 이미 우리는 우리가 좋아하는 것입니다 우리는 그것을위한 공간이 없습니다

그것을 버려라 그런데 왜 이런 일이 일어 났을까요? 왜 우리는 이미 우리가 만든 견해를 수영장에서 사용되지 않는 것들을 [미심쩍은] 것으로 보았습니까? 글쎄요, 이것은 대개가 진행될 경우에 발생합니다 ViewHolder 유형이 너무 많아서 왜 그것은 주로 애니메이션 때문입니다 당신이 우리에게 말했듯이, [부적절한] [INAUDIBLE]에 전화하는 대신 [INAUDIBLE] 0에서 모두로 변경하십시오 그래서 당신이 이런 말을한다면, RecyclerView는 [? 좋아,?] [INAUDIBLE] 보이는 모든 자식에 대해, 기본 동작에 의해, 나는 다른 ViewHolder를 만들어서 표현해야한다

그 아이는 내가 그들을 교차 – 퇴색시킬 수 있기 때문에, 기본 동작은 크로스 페이드이기 때문입니다 즉, ViewHolders의 수를 복제한다는 의미입니다 물론, 그 애니메이션이 끝나면, 우리는 모두 다시 수영장에 넣으려고합니다 수영장은 마치 많은 아이템이 필요 없어요 있잖아, 그냥 버려

그러지 마라 항목이 변경되면 실제로 변경된 사항을 알려주십시오 정말로, 정말로 중요합니다 [비 일치] 올바른 애니메이션, 또는 당신이보기를 보았던 다른 경우가 있다면 길을 잃어 버리고 타입을 바꿀 수 있습니다 풀의 사이즈마다의 사이즈 사건이있을 때 이런 일이 생깁니다

다시 한번, 사회적 흐름은 이것에 대한 정말로 큰 유스 케이스입니다 게다가 매우 긴 게시물이있을 수 있습니다 전체 화면을 모두 채우고, 또는 매우 짧은 여러 게시물을 가질 수 있습니다 크게 다른 크기의 항목이있는 경우 그런 다음 항목 수 한 번에 붙일 수있는 꽤 많이 바뀔 것입니다

그래서 그것들은 당신이 정말로 앱의 자체 동작이 무엇인지 측정하고 싶습니다 이러한 유스 케이스의 일부와 튜닝 그에 따라 RecycledView 풀의 크기 괜찮아 남성 스피커 2 : ItemAnimator 그럼, ItemAnimators

항목이오고 항목은 시간이 지남에 따라 이동합니다 다시 한 번 더 똑똑한 방법을 사용하여 정확히 무엇이 바뀌 었는가 H 사이에 새 항목을 추가한다고 가정 해 봅시다 이 다이어그램에서 나는 여기에있다 이제 중간에 P가 생겨 더 이상 정렬되지 않습니다

그것을 무시하십시오 뭔가가 사라지면 어떻게 될까요? 음, 이제 목록의 또 다른 이미지가 생겼습니다 흥미로운 것은 여기 있습니다 오, 그리고 나서 물론 항목이 단순히 변경되는 경우가 있습니다

그 내용이 제자리에서 바뀝니다 이 경우 흥미로운 점은 항상 몇 가지 부작용이 있다는 것입니다 보기를 추가하고 제거 할 때 그래서 뷰 ​​P를 여기에 추가했습니다 I와 J는 아래로 내려 갔고 K는 완전히 사라졌습니다 우리가 제거 할 때, 정말 비슷한 것이 발생합니다

그래서 우리는 아이템 H를 제거합니다 I, J, K는 움직이지만, L은 스크린에서 새로운 것입니다 우리는 그것을 보여주기 위해 새로운 시각을 얻어야했습니다 그래서 여분의 정보없이 오, 죄송합니다 먼저 변경하십시오 그리고 물론 이것은 쉬운 경우 중 하나입니다 우린 그냥 가서 이들 사이를 교차 – 페이드 (cross-fade) 할 수 있습니다

따라서 우리가 이런 식으로 물건을 다루는 경우, 물건이 제거되면, 우리는 그것을 퇴색시킬 수 있습니다 항목이 추가되면 사라집니다 항목이 화면에서 움직이는 것일 경우, 우리는 그것을 번역 할 수 있습니다 그리고 우리의 기본 아이템 애니메이션 핸들러 문제를 처리 할 수 ​​있습니다 변경, 우리는 단지 장소에서 간단한 크로스 페이드 않습니다

사건이없는 한 해당 항목의 크기가 변경된 곳 우리는 아주 쉬운 사건입니다 하지만 그렇지 않으면 주변의 다른 항목을 의미합니다 움직이고 있고, 우리는 전에 그러나 우리는 이것보다 더 잘 할 수 있을까요? 이 경우 중요한 문제가 있습니다 그게, 만약 우리가 아는 전부가 어댑터에서 ListView와 같은 새로운 상태가 나타납니다

그러면 우리가 실제로 그 아이템의 차이점을 이 항목 이후에 어댑터에서 제거되었습니다 방금 화면에서 떨어졌고 더 이상 존재하지 않습니다 우리가 이런 종류의 애니메이션을 만들 때, 이것은 갑자기 정말로 중요합니다 마찬가지로 화면에 무엇이 있는지 어떻게 알 수 있습니까? 다른 것들이 그것 주위에 움직 였기 때문에, 또는 실제로 어댑터 자체의 새 항목 인 경우 다시, 대표가없는 처음부터 부모에게 첨부 된 견해 중 우리는 반드시 알 필요가 없습니다

그래서 우리는 이것을 잘 알고 있기 때문에 더 잘할 수 있습니다 우리는 개념적으로 – 다시, 이 연기로 돌아와 비유를 비유한다 비록 우리가 단지 특정 수의 항목을 가지고 있음에도 불구하고 한 번에 뷰 그룹에 첨부되고, 개념적으로 우리는 전에 온 아이템을 많이 가지고있다 화면에 표시되는 내용을 확인한 후 그래서 우리는 이것에 대해 약간 예측할 수 있습니다 우리가 어댑터에 기꺼이 질문한다면 몇 가지 추가 질문 및 구체적으로 레이아웃 관리자로 여기에이 항목을 추가하면 이 경우 K를 삭제해야합니다

어댑터가 우리에게 말하지 않았다면 K가 여전히 존재한다는 것을 알아라 이제 사라 졌어요 그래서 우리는 단지 스크린 대신에 미끄러지는 것을 알고 있습니다 마찬가지로 제거를하면 같은 트릭을 사용할 수 있습니다 우리는 레이아웃 매니저 (Layout Manager), 헤이, 내가하고있는 일에 대해 몇 가지 보여줘

그래서 내가 추가 된 컨텍스트를 가질 수 있도록 전후의 상태를 비교할 수있다 정확하게 애니메이션을 적용하십시오 좋아 [INAUDIBLE] 조금 더 빨라요 그래

그래 MALE SPEAKER 2 : ItemAnimator에 대한 작업 방식 예측 애니메이션은 RecyclerView입니다 과거에 어댑터보기를 표시 할 수 있습니다 그럼 우리가 어떻게 할 수 있죠, 아시다시피, 새 항목을 어댑터에 추가 한 경우, 우리는 레이아웃 매니저에게 그들에 대해 말하지 않고, 왜냐하면 그것은 항상 그 사이에 앉아있는 것과 같기 때문입니다 우리가하는 일은 다른 견해를 보여주는 것입니다

예를 들어, 우리가 그것을 구현하기 전에, ItemAnimator에 레이아웃 관리자가 있습니다 그리고 거기에 대한 견해가 있습니다 그리고 그들은 항상 싸울 것입니다 아니,이 견해는 내 꺼야 아니, 아니야,이 견해는 내 꺼야

마찬가지로, 나는 그것을 움직이기 원한다 그러나 잠깐, 잠깐, 나는 그것을 제거하고 재활용하고 싶다 따라서이 상충되는 사례는 항상 발생합니다 우리가 해결 한 방법은 ChildHelper였습니다 레이아웃 관리자가 헤이 (Hey)라고 할 때, 나 위치에 아이를 갖기를 원한다

또는 그것을 제거하거나 내가 원하는대로해라 RecyclerView는 View 그룹을 호출하지 않습니다 마찬가지로, 우리는 즉시 아이들을 변화시키지 않습니다 대신 우리는 [불충분] ChildHelper, 이 항목을 만드는 책임이있는 구성 요소입니다 [부적절한] 내용에 대해

그런 다음 ChildHelper가 결정합니다 OK, 레이아웃 관리자가 제거하라고했습니다 그러나 ItemAnimator가 나에게 애니메이션을 적용하라고 말했고, ItemAnimator가 완료 될 때까지 계속 사용하겠습니다 그러나 레이아웃 관리자가 더 복잡 해지는 것을 원하지 않습니다 애니메이션, 레이아웃 관리자는 사라진 것처럼 보입니다

실제로 View 그룹의 실제 하위 항목입니다 그래서 ChildHelper는 가상 목록을 제공 할 책임이 있습니다 레이아웃 관리자에게 보냅니다 예를 들어,이보기에는 스 와이프되었습니다 – 제거되었습니다 그래서 당신이 그 애니메이션 200을 제거 할 때 밀리 세컨드 (레이아웃 매니저가 시도한 경우) 세 번째 위치에있는 아이를 얻으려면, 그것은 바르셀로나를 돌려 보낼거야

그리고 만약 RecyclerView가 – 당신이 RecyclerView를 얻으려고한다면 [INAUDIBLE] 아이, [INAUDIBLE]입니다 그래서 이들 구성 요소들 사이의 [INAUDIBLE] 우리가 이러한 종류의 트릭을 만들지 않고도 이러한 구성 요소는 복잡합니다 그리고 애니메이션이 완료되면, 같은 값을 반환하기 시작합니다 AdapterHelper는 동일한 것이지만 동일한 추상화를 수행합니다 어댑터쪽으로

그래서 당신이 좋아, 어댑터 [INAUDIBLE] 이 모든 [부주의 한] 모든 것을 보내라 목록에서 발생합니다 그리고 Recycler는 마치 무슨 일 이죠 나는 거기에서 무슨 일이 일어나고 있는지 전혀 모른다 레이아웃 관리자가 이러한 사항을 추적하는 것은 매우 어렵습니다

이미 UI를 추적하는 중입니다 따라서 AdapterHelper가 구조되었습니다 그래서 당신이 말할 때 notifyItemInserted 어댑터에서 우리는 그것을 기록하고 레이아웃을 요청합니다 우리는 무언가가 일어난 것을 압니다 다시 그려야 해

그게 전부 야 우리가하는 일은 우리가 그것에 관한 정보를 유지하는 것뿐입니다 그리고 지금, 당신이 [INAUDIBLE]을 더 추가함에 따라, 우리는 단지 그것들을 목록에 보관합니다 예를 들어,이 순간에 우리가 다시 계산하기 전에 레이아웃하지만 어댑터 내용이 변경된 것을 알고 있지만, 사용자가 버튼을 클릭했습니다 그리고 당신은 물건을 얻고 싶었습니다

항목에 대해 getAdapterPosition을 호출했습니다 클릭시 59 번 그러나 색인 55에 추가 된 새로운 항목이 있다는 것을 알고 있습니다 그래서 우리는 어댑터에서, 실제로 위치 60에 그래서 우리는 당신에게 60을 돌려 준다

[INAUDIBLE]은 (는) 재 계산되지 않으므로, 어댑터 항목을 액세스 할 수 있도록 어댑터를 배치해야합니다 우리는 당신에게 올바른 위치를 제공 할 수 있습니다 따라서이 작업은 전에 우리에게 말했던 것 그리고 더 많은 업데이트를 보내라고 가정 해 봅시다 그리고 나서 우리는 그들을 지나갈 것입니다

RequestLayout은 시스템에 의해 승인 될 것이다 새 레이아웃을 준비하기 시작합니다 그리고이 시점에서 어댑터가 사용 중입니다 [INAUDIBLE] 위치에 레이아웃 관리자를 제공하십시오 어떻게 작동합니까? 우리가하는 일은, 내가 이야기 할 때, 좋아할 때, 어댑터 내용을 위조하면 업데이트 순서가 변경됩니다

그래서 아이디어는 우리가 먼저 레이아웃 관리자에게 알려야합니다 우리는 그들에 대해 이야기합니다 우리는 그것이 예측 레이아웃을하도록했습니다 그리고 나중에 우리가 그들에 대해 이야기하는 다른 모든 것들을 말입니다 따라서 당신이 61에서 2 개의 아이템을 제거한 것을 본다면, 우리는 그것이 재 순서화 된 61임을 압니다

[? ?] 우리가 이것을 보았을 때, 좋아, 나는 실제로 60에 해당하는 항목이 있습니다 따라서 레이아웃 관리자가 제거 된 경우에도 이전 상태를 다시 계산합니다 예측 애니메이션의 일부입니다 항목 60을 묻는다면 그것을 제공 할 수 있습니다 그래서 레이아웃을 말할 필요가 없습니다

해당 항목이 어댑터에서 삭제 된 관리자 그러나 항목 61, 나는 그것을 가지고 있지 않습니다 그래서 내가하는 일은 그것을 나눕니다 [? 제거 하시겠습니까?] [? 작동?] 2로 나는 레이아웃 매니저에게 이봐, 레이아웃을 계산하기 전에 항목 61이 사라지고, 당신에게 알려주기 위해서 요 사전 레이아웃을 수행하고 레이아웃 후 단계로 이동합니다

그런 다음이 세밀한 어댑터와 같은 이러한 것들에 대해 이야기합니다 업데이트는 마치 우리가 어댑터 내용을 위장 할 수있게 해준다 소스 레이아웃 관리자가해야 할 모든 일 우리는 그것을 두 번 반복해서 레이아웃 해달라고 부탁합니다 그런 다음 우리는 나머지 모든 애니메이션을 예측하십시오 따라서 레이아웃 관리자는 거의 필요하지 않습니다

그것에 대해 아는 것 승인 알았어 좋아 우리는 몇 가지를 시도하고 움직일 것입니다

여기 다른 기능 중 일부는 더 빨리 그래서, ItemDecorations ListView에는 다른 많은 일회용 기능과 마찬가지로 기능이 있습니다 ListView에서 항목 사이에 구분선을 그립니다 그래서 우리는 이러한 종류의 기능을 확실히 할 필요가있었습니다 여전히 보존되었다

그래서 ItemDecorations는 당신이 할 수있게 해줍니다 RecyclerView의 캔버스 자체에 대한 사용자 지정 그리기 이것은 RecyclerView의 컨텍스트에 있습니다 부모 모든 자녀 항목 중 반드시 필요한 것은 아닙니다 그 안에있는 개별 항목

우리는 경계를보기 위해 오프셋을 추가 할 수도 있습니다 다시, 분배기의 간단한 테스트 케이스를 사용하여, 당신은 그 부부가 있는지 확인해야합니다 분할자가 소비하는 공간의 픽셀, 필연적으로 항목보기 위나 아래에 그리기보다는 또한 ItemDecorations를 여러 개 가질 수 있습니다 그들은 겹쳐 쌓인다 따라서 이러한 ItemDecorations는 다시 뷰에 영향을 줄 수 있습니다

스택과 비슷한 방식으로 ItemDecorations 그래서 우리는 목록 항목 위에 여기에 항목을 그릴 수 있습니다 제발요 괜찮아

그래서 중요한 또 다른 종류의 여기에 getItemOffsets가 있습니다 이것은 실제로 우리가 특정 항목 주위에 공간을 추가 할 수있게 해주는 것입니다 이렇게하면 일종의 카드를하는 경우에 좋을 수 있습니다 한 번에 여러 항목 주변 배경, 그래서 어떤 종류의 분류처럼 그러나 당신은 또한 단 하나 품목에 다만 그것을 할 수있다

그래서 우리는 특정 항목 주위의 공간을 확장 할 수 있습니다 어쩌면 그것이 우리가 끌어들일 영역이기 때문입니다 그래서 우리는 onDraw를 얻습니다, 우리는 아이템 뷰 밑에 그릴 것입니다 실제로 항목보기를 그리기 전에 그 다음에 항목 자체가옵니다 그리고 우리는 onDrawOver를 얻습니다

항목보기 위에 그릴 수있는 기회를 제공합니다 귀하의 특정 상황과 관련이있는 경우 그래서이 경우에는, 우리는 단지 다르게 꾸미고 있습니다 이런 일 따라서 ItemDecorations에 대해 신중해야합니다

하지만,이 드로잉 단계가 여기에 있기 때문에 다른 여러 작업의 중간에있을 수 있습니다 RecyclerView보기가 수행 중입니다 그리고 [INAUDIBLE]이 자세히 설명했듯이, RecyclerView에는 많은 것들이 있습니다 세계를 일관성있게 보여주기 위해 노력하겠습니다 레이아웃 관리자와 어댑터 비교 애니메이션 등을하고있는 사람들

그래서 어댑터의 세계관 바로 그때 당신이 화면에서보고있는 것이 아닐 수도 있습니다 그래서 너는 네가 ItemDecorations를 사용하여 어댑터에 액세스하지 마십시오 사물에 대한 필요한 정보를 유지하십시오 ViewHolder 자체를 그려야합니다 ItemDecoration은 원하는대로 ViewHolder에 액세스 할 수 있습니다

ViewHolder는 표시되는 항목에 대한 데이터이므로 지금 화면에 그리고 다시 그리기에 대한 일반적인 규칙이 적용됩니다 이것은 꽤 뜨거운 코드 경로입니다 이상적으로 이것은 초당 60 프레임이라고 불리며, 모든 것이 올바르게 진행되면 그러니 메모리를 할당하지 말고 너무 비싸게하십시오

등등 언제든지 계속해서 recyclerViewgetChildViewHolder 메소드 특정 ChildView의 ViewHolder를 가져 오려면 당시 RecyclerView에 첨부되었습니다 따라서 RecycledViewPool은 또 다른 구성 요소입니다 그 점을 아는 것이 중요합니다

단지 당신이 꽤 깔끔한 트릭을 가져올 수 있기 때문에, 만들고있는 UI 유형에 따라 다릅니다 따라서 재활용 된보기 풀은 일반적으로 내부 구현 세부 사항이다 추가 ViewHolders를 보유하고있는 곳 이전에 언급 한 것처럼 여러 유형의 그러나 RecycledViewPool에 대한 멋진 점 여러 개의 RecyclerView간에 공유 할 수 있다는 것입니다 또는 심지어 다른 사용자 정의보기 그룹 그 비슷한 작업을 수행해야하는 작성한 이 유형의 균일 한 뷰가 필요합니다 다시 말하지만, 항상이 범위를 유지해야합니다

하나의 활동으로 이러한 것들은 견해를 가지고 있습니다 뷰는 컨텍스트를 유지합니다 귀하의 활동으로 인해 컨텍스트가 비정상적으로 증가했습니다 너는 곤경에 빠질 수있다 우연히 그 활동 상황을 누설하게되면 그래서 이들이 범위를 지니고 있는지 확인하십시오

최대 하나의 활동으로 하지만 Android Leanback 측면에서 이와 같은 UI가 표시됩니다 Android TV 용 라이브러리 실제로 RecyclerViews 인 행이 여러 개 있습니다 RecyclerViews 내에서 개최됩니다 그러나 가장 안쪽에있는 하위 항목은 모두 통일 된 유형입니다 그래서 우리는 RecycledViewPool을 공유 할 수 있습니다

이 모든 개별 행에 걸쳐 그리고 이것으로 우리는 많이, 많이 될 수 있습니다 우리가 그것들을 어떻게 할당하는지에 관해서는 더 효율적입니다 해당 풀을 관리 할 수 ​​있습니다 좋아 그래서 우리는 더 많은 함수를 추가하기 시작합니다

RecyclerView에 우리가 구현하려고했던 것 구성 요소로 그래서 [INAUDIBLE] Drag & Drop, ListView를 보면, 한 무리의 도서관이 있습니다 예제를 봐야합니다 그리고 일부만 유스 케이스에 사용할 수 있습니다 그래서 우리는 실수로부터 배우기를 원했습니다

우리가 ItemTouchHelper를 디자인 할 때, 우리는 그것을 레이아웃과 무관하게 원했습니다 그래서 ItemTouchHelper를 사용하고 싶다면 Drag & Drop, 스 와이프하여 닫을 수 있습니다 그리고이 콜백 클래스를 제공하면됩니다 콜백 클래스에서 [INAUDIBLE] getMovementFlags 이것이 바로 아이디어입니다

ViewHolder 있습니다 이 뷰 홀더 [INAUDIBLE] 위아래 또는 왼쪽 및 오른쪽 그리고 물품을 옮길 때 내가 어떻게해야하는지 말할 수 있습니다 사용자가 다른 곳으로 이동했다고 가정 해 봅시다 이제 어댑터를 변경해야합니다

비슷한 스 와이프 사용자가 오른쪽으로 스 와이프하고 있습니다 끝나면 알려 드리겠습니다 ViewHolder를 움직일 수있는 방법을 알려주면됩니다 사실, 어댑터에서 변경해야 할 작업을 수행하십시오

이동되거나 스 와이프 될 때 따라서 드래그 앤 드롭과 스 와이프를 동시에 실행할 수 있습니다 동일한 레이아웃 관리자에서 그냥 작동합니다 그래서 이것은 getMovementFlags입니다 우리는 [INAUDIBLE] Flags를 제공합니다

따라서이 예에서는 각 항목 이동할 수 있습니다 – 위아래로 끌고, 그리고 당신은 그 다음으로 끝까지 강타 할 수 있습니다 그래서 그것은 또한 RTF를 지원합니다 [INAUDIBLE]라고하면 [? 및?] 콜백은 왼쪽을 사용하는 경우 RTL 매개 변수와 같은 항목 수신 및 [? 오른쪽,?] 콜백은 왼쪽과 오른쪽으로 수신됩니다 따라서 그리는 방법을 사용자 정의 할 수도 있습니다 [알아들을 수 없는] [? 데모,?] 우리는 당신처럼 샘플을 사라지게 할 수 있습니다

당신이 스 와이프 할 때 방금 [? 재정의?] [INAUDIBLE] 콜백에 드래그 앤 드롭 또는 스 와이프를 시작할 수도 있습니다 어쩌면 당신은 커스텀 버튼을 가지고있을 것입니다 조금 더 빨리가보십시오

승인 우리는 몇 가지 팁과 트릭을 살펴 보겠습니다 그래 그래 정말로 여기에서 빠르다

그래서 다시, 우리가 전에 이야기했던 것처럼, 우리는 RecyclerView 어댑터를보다 효율적으로 사용하고자했습니다 우리가 ListView 어댑터를 사용하는 것보다 따라서 특정 항목을 업데이트하지 않는 경우, 너는 그 물건을 더 이상 찾지 못한다 우리는 바로 그 견해를 그대로 재사용 할 수 있습니다 따라서 작업을 이동하더라도 우리는 해당 데이터를 다시 요청하려면 어댑터로 돌아 가야합니다

헤이, 그것은 변하지 않았기 때문에 왜 우리는 여분의 일을해야합니까? 그래서 우리는 그 견해에 대해 무효화되지 않습니다 우리는 캐시가 작동하는지 확인합니다 우리에게는 행복한 새끼 고양이가 있습니다 그리고 그것이 의미하는 바는, 부작용은 항목을 추가하거나 제거 할 수 있기 때문에 주변 및 항목을 이동할 수 있습니다, 당신이 당신의 견해를 묶을 때, 당신의 위치가 처음에는 항상 바운드되었습니다

해당 데이터에 해당하는 위치가 될 것입니다 목 다시 말하지만, 이것은 잘못 될 수있는 일의 완벽한 예입니다 라이브 입장에 액세스하고 있는지 확인하려고합니다 ViewHolder 자체에서

ViewHolder는 무슨 일이 일어나고 있는지 알고 있습니다 이 경우 네, 거기에 우리가 간다 ViewHolder는 현재 어댑터 위치가 무엇인지 알고 있습니다 그래서 우리는 당신을 위해 그것을 최신 상태로 유지하도록합니다 그래서 당신 스스로 그것을 추적 할 필요가 없습니다

하지만 우연히 우연히 어댑터 위치 값을 닫습니다 MALE SPEAKER 2 : 그런데 Android Studio [INAUDIBLE]이 (가) 있으므로, 그렇게하지 못하게됩니다 하지만 itemChangeWithPayload를 사용하십시오 시간 변경이나 사용자와 같이 항목이 변경되면 좋아, 페이로드와 함께 사용하십시오 그것은 당신의 onBind 훨씬 더 효율적으로 만들 것입니다

더 나은 애니메이션을 실행할 수 있습니다 따라서 onBind 메서드에서 [INAUDIBLE] 페이로드 따라서 페이로드가 없으면 ViewHolder를 [INAUDIBLE]로 설정하십시오 페이로드가있는 경우 ViewHolder 그 위치를 위해 재사용되고있다 그래서 모든 것을 설정할 필요는 없습니다

변경된 내용 만 설정하면 해당 정보를 알 수 있습니다 페이로드에서 매우 효율적입니다 애니메이션에 적합합니다 헤더보기가있는 것처럼 일반적으로 볼 수있는 또 다른 실수입니다

헤더보기를 요청하면 동일한 헤더가 반환됩니다 하지 마 onCreate를 호출하면 새로운 ViewHolder가 작성됩니다 네가 가진 것과 같은 것을 돌려 보내려고하지 마라 왜냐하면 당신은 벌레를 가질 것이기 때문입니다

[? 우리가 필요하지 않으면 우리는 그 방법을 부르지 않을 것입니다 [INAUDIBLE] 이와 비슷한 것 당신이 창조 할 것을 요구하면, 새로운 것을 창조하십시오 어댑터 대 레이아웃 위치는 무언가입니다 우리는 이전에 언급했다 하지만 [? a?] [? 보기 -?] 당신이 항목을 이동했다고 가정 해 봅시다

이 시점에서 어댑터 위치를 볼 수 있습니다 일부 항목의 배치 위치 다음 레이아웃이 나올 때까지 다릅니다 또한 비동기 적으로 계산되기 때문에 계산됩니다 그래서 한번 [? 보기?] [? 시스템?], [INAUDIBLE] [? 새로 고침?] [? 그것,?] 지금 모두 항목 중 동일한 레이아웃 위치와 어댑터가 있음 위치 그래서 어댑터의 위치는 아주 좋습니다 귀하의 데이터에 액세스해야합니다, 레이아웃 위치가 매우 좋다면 그 지점에서 위와 아래에 무엇이 있는지 알고 싶다

[? ?] 사용자가 무언가를 클릭 할 때 알았어 좋아 그리고 나는 그것이라고 생각한다 고맙습니다

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

Google I/O 2012 – Making Android Apps Accessible

TV RAMAN : 안녕하세요 Android에서이 세션에 참석해 주셔서 감사합니다

접근성 나는 나와 함께 세 명의 동료가있다 나는 TV 라만이다 나는 안드로이드 액세스에 대한 우리의 작업을 이끌고 있습니다 나와 함께, 나는 Alan Viverette, Charles Chen, 그리고 피터 룬드 블라드

그리고 우리가 당신과 이야기하고있는 것은 안드로이드가 당신을 위해 무엇을하는지에 대한 안드로이드 플랫폼 할 수있는 사용자의 폭을 늘리는 것과 관련하여 귀하의 응용 프로그램 커버 오늘 안드로이드가 어떻게 사용되는지에 관해 당신은 오늘 하루 종일 이야기를 들었습니다 너에게 무거운 짐을 많이 싣기 때문에 너는 애플리케이션 개발자는 로직 및 기능을 제공합니다 오늘은 걱정할 필요가 없습니다 작은 전화, 큰 전화, 태블릿? Android가 모든 작업을 수행합니다

이 이야기가하는 것은 당신에게 또 다른 다양한 기기 및 사용자에 대한 관점 Android 애플리케이션을 개발할 때 다루는 나는 모든 일에 연설을 사용한다 난 볼수 없어 동료 Peter는 모든 작업에 점자를 사용합니다 그리고 우리가 보여주는 것은 플랫폼의 API입니다 실제로 우리가 접근성 서비스를 우리가 사용하는 모든 응용 프로그램을 사용합시다

당신이 결코 생각하지 못했을 매너를 만들어라 그것을 사용할 것입니다 Android에서이 점이 실제로 우리의 동기입니다 접근성을 높이기 위해 다양한 요구 사항을 가진 사용자에게 애플리케이션 제공, 특별한 필요가있다 안드로이드에 대한 우리의 접근 작업 이후 우리는 먼 길을왔다

2008 년에 시작되었습니다 우리가 진화 한 방식의 측면에서 당신을 제공하는 빠른 역사 그리고 플랫폼이하는 일 따라서 우리의 액세스 작업은 실제로 Android 16에서 시작되었습니다 1

5, 우리는 음성 API를 발표했다 그리고 16은 기본적으로 사용자가 시스템 포커스 사용 네가 항해 한 어떤 것도 말할 수있다 그리고 당신은 그렇게 간단한 응용 프로그램을 많이 사용할 수 있습니다

우리는 그 이후로 먼 길을왔다 아이스크림 샌드위치에서는 작년 말에 터치 탐색이라고 불리는 기능을 출시했습니다 시각 장애인으로서 나를 다른 곳으로 손가락으로 무엇이 들리는 지 들어보십시오 이것은 기본적으로 다음과 같은 모든 측면을 완전히 열어줍니다 시각 장애인 사용자를위한 Android 사용자 인터페이스

이제 터치 탐사를 통해 실제로 물건 만이 아닌 화면의 모든 것을 읽습니다 집중력이있었습니다 그리고 그것은 우리에게 커다란 발걸음이었습니다 그러나 우리가 지금 다루고있는 ICS의 격차로 보았던 것 오늘, 우리는 더 큰 세부 사항은 다음 단계입니다 그래서 그것은 짧은 역사 수업이었습니다

Jelly Bean에 대해 이야기 해 봅시다 따라서 중요한 액세스 API 개선 사항이 있습니다 젤리 빈 Romain 동안이 중 일부에 대한 빠른 개요를 들었습니다 오늘 아침에 남자 얘기가있어

실제로 두 가지를 모두 가능하게하는 일련의 작업을 수행했습니다 시각 장애인을위한 음성 피드백 액세스는 물론 점자 베드로가 너에게 약간의 설명을 할 것이다 그러나 높은 수준에서 우리는 다음 세 가지가 있습니다 오늘 소개

접근성 초점 개념을 피터가 자세히 이야기 할 안드로이드는 블라인드 사용자가 인터페이스를 통해 안정적으로 단계를 밟을 수 있습니다 따라서 접근성에 중점을 둘 수 있습니다 결과적으로 사용자 인터페이스의 일부 또는 말할 것이다 우리는 또한 우리가 접근성이라고 부르는이 개념을 도입했다 그런 다음 접근성에서 트리거 할 수있는 작업 음성 안내 지원 및 점자 지원과 같은 피터가 보여줄거야

이러한 행동을 통해 우리는 클릭 수를 얻을 수 있습니다 선택과 그와 같은 것들을 프로그래밍 방식으로 그런 다음 점자와 같은 비전 장치를 연결할 수 있습니다 디스플레이 및 기타 키보드와 무엇이든 상상할 수 있습니다 그리고 마지막으로 일련의 제스처를 도입했습니다 오늘 기조 연설에서 언급되지 않았습니다

그런 다음 접근성에 중점을 둘 수 있습니다 시각 장애가있는 사용자가 매우 효과적으로 Android 사용자 인터페이스를 사용하십시오 마지막으로 중요한 개선점은 Jelly Bean은 Chrome의 시대입니다 그리고 Chrome 브라우저는 완전히 Jelly Bean에서 접근 가능 그리고 모든 것이 원활하게 작동합니다

우리가 당신을 위해 가지고있는 다양한 데모들 그래서 그걸로 저는 리드 엔지니어 인 피터에게 물어 봅니다 점자 뒤에 점자 지원 플랫폼의 사용 가능 따라서 점자 지원 서비스는 내가 이야기 해 왔던 것과 동일한 API를 사용합니다 기본적으로 Android에 점자 인터페이스를 제공합니다

그래서 피터, 가서해라 고마워, 라만 안녕, 모두들 나는 Peter Lundblad이다 라만이 말했듯이 저는 몇 가지 이야기를 할 것입니다

나는 그 중 하나에 대해 이야기하기 시작할 것입니다 우리는 Jelly Bean을 추가했습니다 점자 지원 및 기타 사용자를위한 것 그리고 이것을 접근성 초점이라고합니다 그것은 사용자가 화면상의 어떤 것과도 상호 작용할 수있게하며, 어떤보기처럼

커서와 비슷한 동작을합니다 그것을 화면에서 움직일 수 있습니다 또한 입력 포커스와 비슷합니다 그러나 차이점은 내가 말했듯이, 그것이 상호 작용할 수 있다는 것이다 모든 견해와 함께, 그것은 위대합니다

입력 포커스는 의도 된보기 만 읽을 수 있기 때문에, 예를 들어, 입력 받아 그래서 그 좋은 예가 편집 텍스트 또는 푸시 백입니다 Enter를 누를 수 있습니다 그런 다음 버튼을 활성화합니다 그러나 시각 장애인 사용자를 위해 무엇이든 읽을 수 있기를 원합니다

정적 텍스트 및 이와 유사한 것을 포함하는 화면 일반적으로 입력 포커스로 포커스를 맞추지 않습니다 그래서 우리는이 접근성에 중점을 두었습니다 화면에 노란색 사각형으로 표시됩니다 내게 필요한 옵션 포커스는 접근성 서비스 그리고 이것은 여러 상호 작용 모드를 허용합니다

시스템에서 처리합니다 즉, 진실의 세계적 출처 그러나 다시 한번, 접근성 서비스는 그것이 움직일 때 알려 주었다 그리고 그들도 그것을 통제 할 수 있습니다 그렇다면 이러한 운영 모드의 예가 무엇입니까? 및 사용자 상호 작용? 접근성 초점을 어떻게 이동할 수 있습니까? Alan이 보여주는 것처럼 한 가지 예가 화면에서 스 와이프

Alan은 실제로 이것들에 대해 나중에 당신에게 보여줄 것입니다 우리가 추가 한 제스처를 스 와이프합니다 또 다른 예는 터치 탐색이 아이스크림 샌드위치에 이미 추가되었습니다 접근성 초점 우리는 또한 접근성 초점을 다음과 같이 이동할 수 있습니다

예를 들어 점자를 이용한 접근성 서비스 디스플레이, 나는 너에게 조금을 보여줄 것이다 가장 좋은 점은, 하나의 접근성 서비스 그것을 이동, 접근성 초점, 그것은에 방송을 얻을 모든 접근성 서비스 예를 들어 TalkBack 및 점자 지원을 사용하는 경우 동시에 시스템에서 실행되면 동기화 그리고 사용자는 그가 점자와 스피치 모두에 의해 어디에 있는지 알고 있습니다 이제 무엇이 켜져 있는지 읽을 수 있습니다

화면은 훌륭합니다 그러나 인생은 꽤 지루합니다 어떤 것과도 상호 작용한다 그래서 우리를 다음 부분으로 이동시킵니다 접근성 동작

액세스 가능성 동작을 통해 사용자는 다음과 같은 노드와 상호 작용할 수 있습니다 다른 방법들 그리고 그것은 매우 중요합니다 왜냐하면, 우리가 지금 움직이는 방법이 다르면 초점을 맞춘 다음에는 화면에는 다양한보기가 있습니다 그래서 그러므로 실제로 그들과 함께 할 필요가 있습니다

그렇다면 우리는 어떤 접근성 행동을지지합니까? 명백한 것은 접근성 초점을 이동하는 것입니다 이미 몇 번 언급했다 또한 유용한 입력 포커스를 이동할 수 있습니다 왜냐하면 우리는 의지에 따라 접근성 서비스로서, 사용자에게 도움이 될 때 두 가지 초점을 동기화하십시오 물론 가장 많이 사용되는 뷰를 클릭 할 수 있습니다

버튼을 활성화하고 입력을 활성화 할 수있는 액션 필드 등이 있습니다 또 다른 중요한 점은 화면에서 스크롤하십시오 따라서보기에 둘 이상의 페이지가있는 경우 그들 사이를 이동하십시오 이미 화면에서 스 와이프 제스처를 사용하여 가능합니다 그러나 시각 장애인 사용자의 문제는 스크롤하는 것이 어렵다는 것입니다

정확히 한 페이지 씩 그리고 올바르게하지 않는다면, 당신은 어디에서 잃을까요? 당신은 예를 들어 목록 책에 있습니다 그래서 새로운 행동으로 우리는 신중하게 스크롤 할 수 있습니다 텍스트 내부를 이동하는 동작도 있습니다 그래서 텍스트가 많은 텍스트 필드가있는 경우 사용자로서, 문자, 단어 또는 단락으로

또는 취급을위한 조치가 있습니다 웹보기 내부를 이동합니다 그리고이 모든 것들을 다른 운동 세분성 우리는 또한 뭔가를 추가했습니다 많이 이야기 해

이를 글로벌 행동이라고합니다 홈 화면을 활성화하는 것과 뒤로 버튼을 눌러서 알림 등이 포함됩니다 이것은 순수하게 시스템에 의해 처리되는 것입니다 및 응용 프로그램 개발자는 전혀 걱정하지 마라 접근성에 중점을두고 행동은 대부분의 경우, 그들은 시스템도 마찬가지입니다

그러나 응용 프로그램은 걱정할 필요가 있습니다 우리가하기 전에 몇 가지 코드 예제를 보여 드리겠습니다 어떻게 보일 수 있는지 데모에 들어갑니다 첫 번째 코드와 같이 매우 간단한보기가있는 경우 예를 들어, OnClickListener를 추가하기 만하면됩니다 어떤 Android 앱을 사용해 본 사람이라면 누구나 잘 알고 있어야합니다

개발 이런 종류의 견해를 가지고 있다면 그것은 이미 완전히 시스템에서 처리합니다 왜냐하면 우리는 기본적으로 액션 인 OnClick을 사용할 수 있기 때문입니다 점자 디스플레이에서 클릭을 수행합니다 (예 : OnClickListener를 호출하면됩니다 이제 두 번째 코드 예제를 살펴 보겠습니다

그리고 거기에는 다른 종류의 견해가 있습니다 이보기는 조금 더 낮은 수준입니다 터치 이벤트를 직접 처리하는 맞춤보기입니다 그래서 우리는 OnTouchEvent 핸들러를 가지고 있습니다 그리고 언제든지 호출됩니다

터치 이벤트가 있습니다 그리고이 견해는 터치 이벤트에 직접 응답하고 자체 내부 기능을 호출하십시오 따라서 OnClickListener를 통해 진행되지 않습니다 이것은 시스템이 알 수 없기 때문에 분명히 작동하지 않습니다 액세스 가능성 서버가 호출 할 때 호출 할 함수 OnClick 액션

그래서 우리는 그 문제를 해결해야합니다 그렇지 않으면 사용자가 이보기를 클릭하십시오 한 가지 방법은 물론 뷰를 리팩터링하는 것입니다 OnClickListener를 호출 한 다음 기본 동작을 보냅니다 처리 상황을 처리합니다

그러나 이것이 가능하지 않은 경우가 있습니다 보기에 대한 액세스 또는 쉽게 변경할 수 없습니다 코드를 사용하면 [INAUDIBLE] 할 수 있습니다 액세스 가능성 대리자를 호출하십시오 이렇게하면 외부에서 볼 수 있으므로 내게 필요한 옵션 작업 및 관련된 다른 호출 접근성에

이 마지막 코드 예제에서 우리는주의를 기울이고 있습니다 OnClick 통화에 대해 내부 기능 그리고 그것은 이전 슬라이드에서 우리가 가진 문제를 해결할 것입니다 이제 어떤 종류의보기를 만들지에 따라 다른 작업에 대한 처리를 추가해야 할 수도 있습니다 예를 들어, 스크롤 액션을 처리해야 할 수도 있습니다

다시 기억해야 할 중요한 점은 당신이 직접 행동을 처리하지 않으면 슈퍼 클래스 그렇다면이 모든 추가 기능은 무엇을 위해 사용될 수 있습니까? 우리는 새로운 것을 추가하고 있습니다 플랫폼의 새로운 기능은 우리가 점자 지원 때로 시각 장애인 사용자는 새로 고침 가능한 점자 디스플레이 그리고 이것은 대안의 방법입니다

시스템과 상호 작용합니다 우리는 다양한 블루투스 사용 가능 Android 휴대 전화에 연결하는 점자 디스플레이 점자 디스플레이에는 점자 셀이라는 라인이 있습니다 그것들은 제기 될 수있는 점들이 있습니다 그리고 사용자는 그 행을 읽을 수 있습니다

점자 디스플레이에는 탐색 키가 있으므로 단 하나의 라인 일뿐입니다 화면과 사용자 인터페이스에서 이동, 활동 사물 등 일반적으로 점자 디스플레이에있는 또 다른 기능은 유선 키보드를 사용하여 점자를 입력 할 수도 있습니다 그러면 글자를 입력하는 것이 훨씬 쉽습니다 터치 스크린을 사용합니다

물론 온 스크린 키보드 만 사용하는 경우도 있습니다 대안 하지만 점자 키보드를 가지고 있다면 인생을 훨씬 쉽게 해줍니다 그래서 우리는이 접근성 서비스를 추가하고 있습니다 블루투스를 통해 점자 디스플레이에 연결됩니다

노드의 접근성 이벤트와 노드를 사용합니다 나무가 화면에 무엇인지 알기 위해 사용자에게 제시하십시오 내게 필요한 옵션 포커스를 사용하여 음성 안내 지원과 동기화됩니다 따라서 실제로 여러 가지 방법으로 시스템과 상호 작용할 수 있습니다 동시에

음성 안내 지원을 사용하거나 점자를 사용할 수 있습니다 그러나 그들은 둘 다 동기화 될 것입니다 또한 입력 방법을 추가하여 실제로 점자 디스플레이를 사용하여 텍스트를 입력하십시오 이 새로운 접근성 서비스는 점자 지원이라고합니다 현재 Google Play 스토어에서 사용할 수 있습니다

젤리 빈 그런 일이 발생하면 시도해보십시오 이러한 하드웨어 점자 디스플레이 중 저는 이제 약간의 데모를하려고합니다 그리고 우리 모두가 알듯이, 때때로 무선 기술은 어려울 수 있습니다

그럼 어떻게 작동하는지 봅시다 일어날 수있는 첫 번째 일은 점자 디스플레이가 Android 기기와 연결이 끊어졌습니다 그래서 우리는 가능한 한 간단하게 만들고 싶었습니다 점자 기기에 다시 연결하거나, 실제로 배터리가 필요하기 전에 연결을 끊었다 따라서 사용자가 수행하는 작업은 화면을 다시 열고 다시 잠금을 해제하십시오

앨런에게 오늘 이렇게 해달라고 부탁 드리겠습니다 디스플레이가 연결되게하십시오 컴퓨터 스피커 : 스크린 오프, 12:30 AM 벨소리 7 개, 슬라이드 가정, 홈 화면 3 피터 런드 블러드 : 그리고 거기에서 우리는 약간의 소리를 들었습니다 그리고 점자 디스플레이가 실제로 연결되었습니다

불행하게도, 그것은 아닙니다 내가 언급했듯이, 무선은 아닙니다 – 컴퓨터 스피커 : 화면을 켭니다 피터 런드 블러드 : 항상 우리 친구 야 그래서 저는 이것을 한 번 더 시도 할 것입니다 컴퓨터 스피커 : 12:31 AM, 벨소리 70 %

피터 런드 블러드 : 우리는 너무 많은 [무관심한] 수 있습니다 ALAN VIVERETTE : 간섭을 최소화하기 위해 블루투스가 켜져 있습니다 사용 중지 할 수 있다면 에 대해 감사하다 피터 런드 블드 : 이제는 작동 중입니다 COMPUTER SPEAKER : I / O 2012 웹보기 자습서

좋아요, 제가 여기서 할 수있는 일을 보겠습니다 내가들을 수 있듯이, 연설은 말하고 있습니다 이제 점자 디스플레이의 키를 사용하여 이동할 수 있습니다 화면 그래서 그렇게 하죠

COMPUTER SPEAKER : 홈 화면 3입니다 피터 런드 블드 : 홈 화면 3 개를 말합니다 그리고 알 수 있듯이 접근성에 초점이 맞춰지고 있습니다 전체 화면을 집중시킵니다 그리고 연설도 이야기하고 있습니다

컴퓨터 스피커 : I / O 2012 웹보기 자습서, 031, Google I 슬래시 O 2012 피터 런드 블드 : 제가 말한 행동 중 하나를 불러 드리겠습니다 전에 간단히 이것이 알림 창을 여는 동작입니다 나는 열쇠 조합을 눌러 그것을한다

점자 디스플레이에 컴퓨터 스피커 : 12 월 31 일 목요일, 20 6 월 28 일 화면이 자동으로 회전합니다 확인란의 방향을 세로로 설정하십시오 알림 삭제 버튼

피터 런드 블러드 : 여기에 – 컴퓨터 스피커 : Alan Viverette, June 27, 12 이봐, 커피 마시고 싶어? 알았어, 알란이 나 한테 물어볼거야 커피를 갖기를 원해 훌륭합니다 채팅에 응답하겠습니다

점자 디스플레이에 내가 가지고있는 것도 작은 버튼을 쉽게 클릭 할 수 있습니다 디스플레이에 집중했다 그래서 나는 Alan의 채팅 메시지를 클릭 할 것이다 COMPUTER SPEAKER (컴퓨터 스피커) : 편집 상자 메시지를 입력하십시오

피터 런드 블드 : 저를 편집 상자로 옮깁니다 이 알림을 클릭하면 Google 토크가 예상대로 작동합니다 나는 그가 무엇을 볼 수 있는지 화면에서 위로 움직일 것이다 실제로 말했다 컴퓨터 스피커 :이 채팅 기록이 꺼졌습니다

이봐, 커피 마시고 싶어? 보시다시피, 그는 개인 정보 보호에 관심이 있습니다 그러나 그는 여전히 커피를 마시고 싶어합니다 컴퓨터 스피커 :이 채팅 입력란에 메시지를 입력하십시오 피터 런드 블드 : 응답을 입력 할 것입니다 컴퓨터 스피커 : 네, 네, 저, LOV-3

좋아요, 오타를 만들면 쉽게 고칠 수 있습니다 컴퓨터 스피커 : 세 명이 삭제되었습니다 전자, 사랑, [신속한 편지] 좋아요, 그래서 저는 응답을 타이핑했습니다 이전에 언급 한 작은 키를 사용하여 이동할 수 있습니다 때로는 화면에 주위

COMPUTER SPEAKER :이 편집 상자는 네가 좋아하는 커피입니다 좋아, 그래서 지금은 실제로 보내기 위해 버튼을 누르겠습니다 컴퓨터 스피커 :이 채팅 – 피터 런드 블드 : -이 메시지

컴퓨터 스피커 : 기록에서 벗어났습니다 편집 상자 네, 커피를 좋아해요 피터 런드 블드 : 내가 볼 수있는 것은 실제로 메시지를 보냅니다 그리고 이전에 채팅 목록에 나타납니다

우리가 가지고있는 또 다른 글로벌 행동을 촉구하겠다 매우 편리합니다 그리고 이것은 다시 점자 디스플레이에서 중요한 조합입니다 컴퓨터 스피커 : 집, 홈 화면 3 개 우리를 홈 화면으로 다시 데려 간다

그리고 그걸로, 나는 그것을 앨런에게 넘겨 줄거야 터치 탐사에 대해 이야기 할 것입니다 ALAN VIVERETTE : 고마워, 피터 나는 그 커피를 나중에 먹기를 고대한다 그래서 우리가 보여 줬던 것처럼, 당신은 당신의 손가락을 사용할 수 있습니다

화면을 탐색합니다 손가락을 만져 접근 기능을 설정할 수 있습니다 방금 들었던 것처럼 화면에 이렇게하면 화면 콘텐츠에 임의로 액세스 할 수 있습니다 만약 당신이 화면에 익숙하다면 정말 대단합니다

보이는구나 어딘가에있는 모든 앱 화면처럼 많은 버튼이 있습니다 그리고 당신은 꽤 빨리 물건을 찾을 수 있습니다 이제 두 번 살짝 눌러 항목을 활성화 할 수 있습니다 방금 들었던 것이 무슨 일이 벌어 질지

자, 이거 멋지네 그러나 화면에서 항목에 액세스 할 수있는 결정적인 방법이 있습니다 더 좋다 그러니 정말 큰 화면이 있다고 가정 해 봅시다 하나의 작은 버튼으로

나는 오랫동안 내 손가락을 움직일 수 있고 결코 찾을 수 없다 그 버튼 하지만 화면에 손가락을 대고 단지 문지르면됩니다 다음 항목으로 이동하려면 오른쪽으로, 그 버튼을 찾을 수 있습니다 매우 빠르게

그리고 사실, 나는 계속 지나갈 수있는 권리를 계속 지킬 수 있습니다 화면의 모든 항목 그래서 이전에 데모 한 스 와이프 제스처를 추가했습니다 베드로가 말할 때 또한 글로벌 작업을위한 제스처도 추가했습니다

그래서 베드로는 점자 전시장에 집을 보여주었습니다 집으로 돌아가려면 화면에 도형을 그릴 수도 있습니다 또한 최근 애플리케이션 및 알림 음성 안내 지원 또는 점자 지원과 같은 접근성 서비스는 또한 제스처를 사용하여 내부 상태를 관리합니다 TalkBack에는 다음과 같은 작업을 할 수있는 제스처가 있습니다

단어 또는 문자로 화면 읽기 시작 대신에 개체에 의해 제스처 매핑에 대한 간단한 개요는 다음과 같습니다 TalkBack에 있습니다 제스처가 많이 있습니다 사실, 이것들은 모든 제스처가 아닙니다

우리는 몇 가지 방을 남겼습니다 나중에 실험 터치로 탐색 할 수있는 간단한 데모를 시작하겠습니다 알았어 먼저 터치부터 시작할거야

탐구 COMPUTER SPEAKER : 홈 화면 3입니다 Apps 집 5 중 3 항목 표시

ALAN VIVERETTE : 내 앱, 무작위 액세스 내 손가락을 움직여서 또는 내가 원하는 것을 내가 안다면 좌우로 쓸어 낼 수 있습니다 find는 아마도 과거 조금지도 일 것입니다 컴퓨터 스피커 : 메신저 항해

사람들 ALAN VIVERETTE : 좋아, 그렇다면 내가 People을 시작하려면 화면의 아무 곳이나 두 번 탭하면됩니다 컴퓨터 스피커 : 전체 연락처 드롭 다운 목록 ALAN VIVERETTE : 나는 연락을 취합니다 다시 돌아가고 싶으면 뒤로 몸짓을 그릴 수 있습니다

컴퓨터 스피커 : 응용 프로그램을 지우십시오 ALAN VIVERETTE : 다시 돌아 갑시다 컴퓨터 스피커 : 홈 화면 세 개를 지 웁니다 ALAN VIVERETTE : 그리고 Google에서 잠깐 살펴 보겠습니다 입출력

컴퓨터 스피커 : I / O 0, Google O 2012를 내립니다 Google은 2012 년을 슬래시 한 항목을 보여주는 목록 ALAN VIVERETTE : 여기에 물건 목록이 있습니다 컴퓨터 스피커 : 21 중 1 ~ 3 항목을 표시합니다

ALAN VIVERETTE : 나는 탭할 수 있습니다 컴퓨터 스피커 : 오후 8시 세션 검색 빈 슬롯 ALAN VIVERETTE : – 그 목록에있는 항목 한 번에 전체 페이지를 이동하려는 경우 ~을위한 제스처 컴퓨터 스피커 : 오전 10:00 ALAN VIVERETTE : 전체 페이지를 움직입니다

컴퓨터 스피커 : 수요일, 6 월 27 일 ALAN VIVERETTE : 이것들은 접근성과 같은 행동들입니다 우리가 점자 지원에서 사용하는 그리고 그들은 당신이 개발자로서, 일반적으로 걱정할 필요가 없습니다 TV RAMAN : 그래서 주목해라 ALAN VIVERETTE : 죄송합니다

TV RAMAN : 앨런이 보여주고있는 것은 아주, 작업 완료를위한 매우 강력한 상호 작용 모델 매우 빠르게 그래서 항상 Play 스토어를 사용합니다 설치 버튼이 대략 어딘가 그래서 화면을 만지고 하나의 영화를하는 것은 꽤 많이 있습니다 필요한 모든 것

ICS에서는 탐험 할 수 있습니다 그리고 나서 ICS 전에 트랙볼을 사용했을 것입니다 따라서 이는 사용자 상호 작용 모델을 실제로 만듭니다 정말 효과적인 또한 우리가 한 일을 통해 액세스 지침도 바뀝니다

과거에는 시스템 중심으로 할 수있는 것 ICS 이전에 TalkBack에 표시되었습니다 그리고 우리는 상황을 집중시킬 수 있다고 말하곤했습니다 이제 개발자로서의 삶은 훨씬 쉬워졌습니다 ALAN VIVERETTE : 제가 언급했듯이, 개발자로서, 당신은 일반적으로 걱정하지 않아도됩니다 작동하지 않습니다

그래서 내가 움직일 때 무엇이 ​​포커스를 받는지 궁금해 할 것입니다 내 손가락이 화면 주위에있다 이제 분명히 레이아웃을 만든 개발자로서 전에, 당신은 당신이 중첩 된 레이아웃이 많이 있습니다 분명히, 이것들 모두가 읽혀지는 것은 아닙니다 그래서 우리는 실행 가능한 그룹을 선택합니다

따라서 실행 가능하다는 것은 클릭 할 수 있거나 포커스를 설정할 수 있음을 의미합니다 그룹이 있다면이 폴더 아이콘처럼 이미지에 표시됩니다 실제로는 다음을 포함하는 그룹입니다 이미지와 텍스트 조각 그리고 그룹 자체가 클릭 가능하기 때문에, 그것은 소리내어 읽힌다

이제 콘텐츠 설명이있는 경우 그 자녀들이 소리내어 읽혀지는 내용, 설명을 읽습니다 액션이 불가능한 항목이있는 경우 전임자가 없다는 것은 분명합니다 어떻게 든 읽을 수있는 유일한 방법은 접근성에 중점을 둡니다 다행히도 접근성에 중점을 둡니다 여기에는 폴더 아이콘에 대한 계층 뷰어보기가 있습니다

보이는구나 폴더 아이콘이 있다는 것을 알 수 있습니다 뷰 그룹입니다 여기에는 이미지보기 및 풍선 텍스트보기가 포함되어 있습니다 XML은 다음과 같습니다

그러면 폴더 아이콘이 클릭 가능한 것을 볼 수 있으므로 실행 가능한 그룹 그리고 그 아이들은 두 개의 텍스트를 가지고 있습니다 그래서 이미지보기 폴더라고합니다 거품 텍스트보기에는 Google이 있습니다 음성 안내 지원이이 실행 가능한 그룹에 초점을 맞추면 말할 것이다, 폴더 Google

응용 프로그램을 디자인 할 때 유용한 팁, 가능한 경우 내장 된 위젯을 사용해야합니다 이러한 것들이 효과가 있습니다 왜냐하면 사람들은 그들에게 많은 생각을했기 때문입니다 앱이 키보드 또는 D-Pad에서 작동하는지 확인하십시오 그래서 우리가 항상 말했던 것은 앱이 작동하는지 확인하는 것이 었습니다

D 패드로 그리고 앱이 D-Pad와 함께 작동했다면, 다행히도, 그것은 효과가있을 것입니다 매우 일을한다면 약간의 수정이 필요할 수 있습니다 특별한 것들 그러나 내장 위젯을 사용하는 응용 프로그램의 경우 가능성이 바로 작동합니다 읽을 수있는 콘텐츠가 있는지 확인하십시오

실행 가능한 항목에 따라서 이미지 버튼이있는 경우 이미지 버튼을 클릭하십시오 내용 설명 초점을 맞추거나 클릭 할 수있는보기 그룹이있는 경우, 텍스트를 넣거나 몇 가지 내용 설명을 입력하십시오 일부 하위 항목

그래서 여기 나쁜 디자인과 그것을 고치는 방법의 예가 있습니다 따라서 이것은 고아가 된 실용적인 아이템입니다 보기가 포함 된 프레임 레이아웃이 있습니다 이보기는 클릭 할 수 있습니다 그리고 전체 프레임 레이아웃을 채 웁니다

텍스트가있는이 텍스트보기는 전체 텍스트를 채 웁니다 프레임 레이아웃 그리고 눈에 보이는 사용자에게는이 버튼이 큰 버튼처럼 보입니다 텍스트 레이블을 클릭 할 수 있습니다 그리고 그것이 어떻게 수행됩니다

하지만 TalkBack이나 BrailleBack과 같은 서비스는 두 개의 개별 항목처럼 따라서 프레임 레이아웃을 클릭 할 수있게 만들고 그 안에 텍스트, 당신은 행동 가능한 그룹과 아이가있다 소리내어 읽혀질 것입니다 괜찮아 그래서 때로는 조금 더 그보다 복잡합니다

그래서 당신이 정말 멋진 키보드를 만들었다 고 가정 해 봅시다 화면에는 다음과 같이 표시됩니다 당신은 멋진 버튼들을 많이 가지고 있습니다 코드에서 렌더링 따라서 이들 각각에 대한 실제 뷰가있는 대신 버튼을 누르면 화면에 그려집니다

여기에 XML이 어떻게 생겼는지가 있습니다 추측 할 수 있듯이 계층 구조가 있습니다 실행 가능한 그룹이 많지 않습니다 읽을 수있는 아이들 더 많은 정보를 제공함으로써 문제를 해결할 수 있습니다

점자 지원 및 TalkBack과 같은 서비스 그래서 이것은 맹인에게 아무런 변화없이 보이는 것입니다 사용자 및 액세스 가능성 서비스 그것은 단지 큰 빈 공간입니다 다행히도 우리는 당신이 취할 수있는 3 단계를 가지고 있습니다 하나는 사용자 정의보기에서 들어오는 호버 이벤트를 처리하는 것입니다 접근성이 켜지고 터치하여 탐색 할 때 켜기, 화면을 터치하면보기가 수신 됨 마우스 오버 이벤트

보기를 위해 안드로이드 소스 코드를 살펴 본다면, 마우스를 올리면 이벤트가 조금씩 처리됩니다 특히 접근성이 켜져있는 경우 그래서 여기에, 내가 열쇠를 어디에 렌더링하는지 알기 때문에 화면에서 모션의 xy 좌표를 매핑 할 수 있습니다 이벤트를 키로 보낸다 내가이 열쇠 만 만져도 될까? 그렇지 않다면, 나는 적절한 것을 보내야한다는 것을 안다 접근성 이벤트

따라서 키를 터치하면 이전 키, 새 키에 대한 호버 입력 및 TalkBack 또는 점자 지원을 통해 적절한 열쇠에 대한 연설 2 단계, 나가는 이벤트를 채워야합니다 그래서 호버에 진입 이벤트를 보냈습니다 방금 누르던 열쇠를 말해야합니다 그래서 여기에,이 send hover 이벤트를 키에 대한 이벤트로 만들었습니다

메서드는 키를 취하고 이벤트 유형을 가져와 채 웁니다 키에 대한 정보가있는 이벤트 그래서 그것은 분명히 텍스트 같은 것을 포함 할 것입니다 그리고 여기에서도 소스를 설정하고 있습니다 이 위대한 젤리 기능을 스 와이프하여 두 번 클릭 할 수 있음 활성화하려면 노드 계층 구조가 필요합니다

내 접근성 이벤트를 보내면 음성 안내 지원 또는 점자 지원 가상 키 ID가 있습니다 그런 다음 응용 프로그램에 노드 정보를 쿼리 할 수 ​​있습니다 그것은 해당 키 ID와 연관되어 있습니다 그래서 여기에 노드 제공자를 사용하고 있습니다 공간 제약으로 하지만이 createAccessibilityNodeInfo가 있습니다

키 ID를 사용하는 이벤트 그 키 ID를 실제 키에 매핑합니다 그런 다음 키 정보로 노드 정보를 채 웁니다 속성 일관성을 위해 노드의 부모도 설정하고 있습니다

그것이 속한 키보드가 될 수 있습니다 그리고 그 소스를 자체 가상 키 ID로 설정하고 있습니다 물론 그 부모 따라서이 세 단계를 거친 후 키보드는 모든 사용자에게 동일합니다 따라서 누군가 TalkBack 또는 BrailleBack을 사용하는 경우 if 그들은 손가락을 그 위에 올려 놓으면 그들은 적절한 말 또는 점자 피드백

그리고 우리는 단순히 Android 안드로이드보기를 처리하지 않습니다 또한 웹보기도 잘 처리합니다 그리고 찰스가 그것에 대해 더 알려줄 것입니다 고맙습니다, 앨런 헤이, 그래서 나는 Charles Chen 다

Android에서 웹 접근성에 대해 이야기하고자합니다 앨런이 방금 네가 어떻게해야하는지 네이티브 Android 앱에 액세스 할 수있게하고, 필요한 것을 만들어보세요 할, 그리고 그것을하는 방법 하이브리드 앱을 제작하는 경우에도 동일한 작업을 수행 할 수 있습니다 따라서 웹이 혼합 된 하이브리드 앱을 만드는 경우 컨텐츠 및 네이티브 Java 컨트롤을 사용하면 액세스가 가능하고 사용자가 시각 장애

따라서 웹보기를 사용하여 실제로 뭔가를 수행하는 경우 간단하거나 정말로 기본적인 – 예를 들어, 표시되는 서비스 조건을 표시 할 수 있습니다 사용자에 대한 지시 – 그 사건은 꽤 간단합니다 웹보기가 있습니다 거기에 텍스트를 넣으십시오 그리고 일반 텍스트처럼 처리 할 것입니다 모든 것은 효과가 있고 아무런 문제가 없습니다

다른 한편으로, 무언가를 세우려한다면 조금 더 역동적 인 것입니다 Ajaxy, 자바 스크립트 HTML5를 자바 스크립트의 일부로 사용하려는 경우 귀하의 UI, 당신은 여전히 ​​액세스 할 수 있습니다 여전히 여기서 훌륭한 일을 할 수 있습니다 당신이 정말로해야 할 일은 똑같은 최선을 따르는 것입니다 데스크톱에서 웹 앱을 사용하기 위해 수행해야 할 업무입니다

그리고 그 이유는 Android에서 우리는 AndroVox를 실행합니다 그래서 AndroVox는 ChromeVox의 일부입니다 ChromeVox는 우리의 스크린 읽기입니다 Chrome OS 용 솔루션입니다 Chrome OS, Chrome에서 실행됩니다

그건 그렇고, 청각에 관심이있는 사람들에게는 ChromeVox에 대한 자세한 내용은 금요일, 웹 접근성 향상 정말 좋은 이야기가 될 것입니다 그리고 저는 그것이 저의 발표자 레이첼도 선물 할 예정입니다 다른 동료 Dominick

금요일 11시 30 분에 참석하시기 바랍니다 거기에 너희들을 만나길 바래 제발 어쨌든 안드로이드로 돌아 가기 때문에 AndroVox는 그 부분입니다 ChromeVox의 그리고 이로 인해 많은 이점을 얻을 수 있습니다

그래서 우리가 만들어 낸 모든 노력 ChromeVox는 Ajax 콘텐츠에서 실제로 잘 작동하여 ARIA 및 HTML5와 같은 W3C 표준을 지원합니다 그 모든 선한 것이 안드로이드에 들어간다 그리고 그것은 효과가 있습니다 그리고 이것을 Android와 통합하여 경험, 웹 컨텐츠와 기본 안드로이드 컨트롤 모두, 조화롭게 사용자는 앱을 사용할 수 있습니다 그리고 그들은 그 차이를 실제로 알지도 못합니다

그리고 그것은 모두 단순한 방식으로 그들 모두를 위해 일할 것입니다 경험 그리고 그걸로 데모로 전환 할 것입니다 따라서 데모 응용 프로그램을 사용하는 것이 일반적으로 도움이됩니다 웹 콘텐츠와 함께 표시하려고합니다

컴퓨터 스피커 : 집 CHARLES CHEN : 그렇게하겠습니다 컴퓨터 스피커 : 집, 홈 화면 3 개 I / O 2012 웹보기 자습서 I / O 2012 웹보기 자습서

웹 컨텐츠 Google I O 2012 웹보기 자습서를 슬래시합니다 CHARLES CHEN : 알겠습니다 여기서 볼 수 있듯이, 저는 하이브리드를 가지고 있습니다 신청

웹 콘텐츠가 맨 위에 있습니다 또한 Android 컨트롤이 맨 아래에 있습니다 그리고 나는 웹 컨텐츠를 만질 것입니다 터치 탐사가 같은 방식으로 작동한다는 것을 알 수 있습니다 모든 네이티브 컨트롤과 마찬가지로 웹보기에 표시됩니다

그래서 나는 터치 탐험을 시작할 것입니다 컴퓨터 스피커 : Android의 접근성 웹보기는 ChromeVox의 포트 인 AndroVox에서 처리합니다 Android 용 CHARLES CHEN : 알았어 이전에 앨런이 너에게 보여주고 있었어

선형으로 할 수있는 제스처 항해 웹보기에서도 똑같은 기능이 작동합니다 그래서 저는 그렇게 할 것입니다 COMPUTER SPEAKER : 건물과 동일한 모범 사례 액세스 가능한 웹 사이트가 웹보기에 액세스 할 수 있도록 적용됩니다 CHARLES CHEN : 좋습니다

이제 저는이 사실을 실제로 끝 냈습니다 웹 컨텐츠 앞으로 나아가고 싶습니다 나는 정말로 걱정할 필요가 없다 최종 사용자로서

그래서 계속 탐색 할 것입니다 COMPUTER SPEAKER : 이전 버튼이 비활성화되었습니다 CHARLES CHEN : 알았어 그래서 나는 실제로 웹에서 뛰어 내 렸어 지금 콘텐츠

그리고 저는 Android 안드로이드 컨트롤에 있습니다 이제 다음 버튼으로 이동하여 클릭 할 것입니다 컴퓨터 스피커 : 다음 버튼을 누릅니다 CHARLES CHEN : 좋아, 이제 클릭 할거야 컴퓨터 스피커 : Google I 슬래시 O 2012 웹보기 자습서 CHARLES CHEN : 알겠습니다

제목에서 추측 할 수 있듯이 여기 웹 콘텐츠의이 부분은 좋은 슬라이드가 될 것입니다 이것은 정말로 나쁜 것이 될 것입니다 그래서 여기에 당신이 결코해야 할 일의 예가 있습니다 당신은 하이브리드 응용 프로그램을 만들고 있습니다 이것은 모범 사례를 따르지 않는 응용 프로그램입니다

옳은 일을하지 않습니다 그러니 그걸 살펴보고 무엇이 잘못되었는지 보도록하겠습니다 COMPUTER SPEAKER : 웹 콘텐츠가 잘못되었습니다 하나를 향하고있다 다음은 저조한 저작 페이지의 예입니다

이 버튼은 DIV와 SPAN 요소로 구성됩니다 역할 설정이 없습니다 CHARLES CHEN : 좋아요, 그래서 저는 버튼에 가려고합니다 에 올바른 설정이 없습니다 그래서 시각적으로 그것은 단지 녹색처럼 보입니다

버튼을 클릭하면 3D CSS로 정말 아름답게 보입니다 거기에는 정말로 DIV와 SPAN이 있습니다 ARIA로 분류되지 않았습니다 그것을위한 어떤 역할도 없다 따라서 사용자는 버튼이라는 것을 알지 못할 것입니다

그것을 뒷받침하는 의미가 없습니다 단순한 DIV와 SPAN 일뿐입니다 그래서 내가 거기 갈 때 어떻게되는지 봅시다 컴퓨터 스피커 : OK, 클릭 가능 CHARLES CHEN : 좋습니다

클릭 할 수 있기 때문에 클릭 핸들러가 있음을 감지 할 수 있습니다 하지만 그걸 제외하고, 당신은 정말로 그것이 버튼, 채팅 상자 이게 뭐야, 그렇지? 추가 피드백이 없습니다 그것이 적절하지 않았기 때문입니다 role 속성으로 설정합니다

그래도 이것을 클릭 해 봅시다 왜냐하면, 헤이, 그것은 클릭 할 수 있다고 말한다 그럼 어떻게 될지, 그렇지? 어디 보자 컴퓨터 스피커 : 클릭 함 CHARLES CHEN : 응? 좋아, 방금 뭔가를 클릭했다

그리고 나는 그것을 클릭 한 것을 압니다 그러나 나는 그 경고가 전혀 나오지 않았다 왜 그런 일이 일어 났는지 봅시다 COMPUTER SPEAKER (컴퓨터 스피커) :이 버튼을 클릭하면 경고 표시된 영역에는 경고 역할이 설정되지 않았거나 그것은 살고있는 지역으로 표시했습니다 TV RAMAN : 이렇게 간단한 HTML 속성이 있습니다

추가 할 수 있습니다 그리고 당신은 이것들을 볼 수 있습니다 이있다 [? W3C?] spec 주변에 있습니다 하지만 Java 개발자 및 Android 개발자로서 DIV와 SPAN에 주석을 달 필요가 있다는 것을 알아야합니다 의미를 부여하는 속성이 있습니다

동적 변경이 발생하면 주석을 달아야합니다 동적으로 변경할 수있는 영역 어느 시점에서, 어떤 어댑터 기술이든간에 사용자가 사용 중이면 말하는 것을 알고 있습니다 이 경우 기술은 Charles와 같습니다 ChromeVox가 설명했다

하지만 이것은 Android와 관련이 없습니다 기본적으로 좋은 접근성입니다 웹에서 연습 CHARLES CHEN : 고마워, 라만 그래서 큰 충고였습니다

그리고 다시, 더 많이 듣고 싶다면, 제발 와줘 금요일에 우리 대화에 좋아, 다음의 예제로 넘어 갑시다 이 부분은 수정되었습니다 컴퓨터 스피커 : 다음 버튼을 누릅니다

Google I O 2012 웹보기 자습서를 슬래시합니다 CHARLES CHEN : 좋습니다 컴퓨터 스피커 : 웹 콘텐츠 좋은 표제 1 CHARLES CHEN : 좋습니다

실제로 그 제목입니다 훨씬 더 유망한 것으로 들립니다 그것이 좋았 기 때문에 그래서 이것은 잘하면 일해야합니다 다시 한번, 나는 단지 내비게이션을하기 위해 스 와이프 제스처를하고 있습니다

그리고 이것들은 똑같은 스 와이프 제스처입니다 Android의 모든 위치에서 사용할 수 있습니다 컴퓨터 스피커 : 여기 같은 페이지가 있지만 문제가 해결되었습니다 이제 버튼의 역할이 버튼으로 설정됩니다 CHARLES CHEN : 좋습니다, 이제 우리는 올바른 것을 설정했습니다

이 버튼의 역할 지금처럼 들리는 것을 들어 봅시다 컴퓨터 스피커 : 확인 버튼 CHARLES CHEN : 좋습니다 이제 의도 한대로 작동하고 있습니다

이제 사용자는 이것이 OK 버튼이라는 것을 알고 있습니다 그리고 그들은 그것을 듣는다 그리고 OK 버튼이 너무 좋아요 그것을 클릭 해 봅시다 컴퓨터 스피커 : 확인 단추가 있습니다

경고를 받았다 CHARLES CHEN : 멋지다 그래서 이제 나는 경고가 나타났습니다 그리고 그것은 그 경고의 내용을 알려줍니다 큰

그래서 올바르게 작동합니다 그리고 그것은 – 컴퓨터 스피커 : 알림 영역의 역할이 이제 경고는 기본적으로 라이브 영역으로 간주됩니다 CHARLES CHEN : 좋습니다 그래서 그걸로 전환 할 것입니다 Android에서 테스트하는 것

Android에서 접근성 테스트가 가능합니다 정말 쉽습니다 하나, 둘, 셋만큼 쉽습니다 그리고 그것을하지 않는 것에 대한 변명의 여지가 없습니다 그것은 시스템에 내장되어 있기 때문입니다

앨런이 여기 얼마나 쉬운 지 보여주기 위해 접근성을 높이고 실행하는 것입니다 그리고 여러분 모두가 지금 장치를 가지고 있다는 것을 알고 있습니다 그래서 당신은 정말로 이것을 끝내야합니다 알란? ALAN VIVERETTE : 언제든지 시도해보세요 집이나 청중에게

컴퓨터 스피커 : 집 집 홈 화면 앱 설정 설정

찰스 첸 : 앨런이 여기서하고있는 일은 그는 설정에 들어갔다 그는 접근하기 쉽습니다 그리고 그는 TalkBack을 사용 설정합니다 컴퓨터 스피커 : 7-24의 항목을 보여줍니다 접근성

접근성 위로 이동하십시오 TalkBack을 켜십시오 CHARLES CHEN : 좋습니다, 그럼, 평상시에 당신은 음성 안내 지원을 사용하여 터치하여 탐색기가 사용 설정되어 있는지 확인하세요 웹 접근성을위한 추가 스크립트 사용 가능 네가 모든 것을 얻을 수 있도록 컴퓨터 스피커 : [INAUDIBLE] 접근성이 허용됩니다

CHARLES CHEN : – 당신이 모든 AndroVox의 장점을 누릴 수 있도록 그러나 이미이 기능이 활성화되어 있으므로 준비가 끝났습니다 그럼 테스트 해 봅시다 사용자가 경험할 수있는 것을 경험해 봅시다 따라서 앱을 사용하는 것이 가장 좋은 방법입니다

컴퓨터 스피커 : 두 번 살짝 눌러 활성화하십시오 집 홈 화면 세 CHARLES CHEN : 그리고 우리는 Google I / O 앱 – 컴퓨터 스피커 : Google O 2012를 쓰러 뜨 렸습니다 Google은 2012 년을 슬래시

CHARLES CHEN : – 그저 사용하는 사람과 같은 방식으로 사용해보십시오 음성 안내 지원을 사용하면됩니다 따라서 터치 탐색을 사용하여 화면 주위를 느껴보십시오 컴퓨터 스피커 : 1:45 PM, 2:44 PM 코드 랩을 비워 두십시오

지금 시작하십시오 CHARLES CHEN : 좋습니다 컴퓨터 스피커 : [비 숙련] 캐시 I / O 2012 입력 brainpower FTW, 시간 이후에 우리를 확인하십시오 CHARLES CHEN : 훌륭한 새로운 기능을 활용하십시오 접근성 옵션을 위해 우리가 추가 한 제스처

선형 탐색을 사용하십시오 앱을 둘러 봅니다 목록을 스크롤하십시오 그것이 제대로 작동하는지 확인하십시오 컴퓨터 스피커 : Android Chrome, 코드 연구소를 보여줍니다

CHARLES CHEN : 차가워 요 그래서 우리가 정말로 여기서 확인하고있는 것은 우리의 애플 리케이션의 모든 눈을 무료로 할 수 있습니다 사용자는 앱 사용 가능 여부에 관계없이 앱을 사용할 수 있어야합니다 그들은 그것을보고 있습니다 모든 중요한 정보는 사용자에게 전달되어야합니다

사용자가 어떤 행동을 취할 때마다 피드백이 필요합니다 그들은 실제로 행동을 취했다는 것을 알아야합니다 일하고 있고, 뭔가 진행되고 있습니다 자, 안드로이드 linting 도구는 여기에 당신의 친구입니다 오늘 아침 일찍부터 Romain Guy는 Android linting 좋은 새로운 기능을 많이 얻었습니다

그리고 나는 나중에 그것에 관한 이야기가 있다고 생각한다 안드로이드 도구를 잘 이 새로운 기능 중 하나는 일부 기능을 수행하는 것입니다 접근성을위한 정말 간단한 검사 자,이 모든 것을 포착하지는 못할 것입니다

그러나 이것은 정말로 좋은 출발점입니다 그리고 이것은 매우 짜증나지만 간단하게 고칠 수 있습니다 오류 콘텐츠 설명이 누락되었습니다 그래서 만약 여러분이이 명령으로 상인방을 운영한다면, 여기에서 보듯이, 명령을 실행하면 lint가 실제로 사례를 잡아낼 것입니다

콘텐츠가 누락 된 이미지 버튼이있는 곳 기술 음성 안내 지원 또는 점자 지원을 사용하는 시각 장애인 사용자의 경우 모두 그들은 여기에 이미지가 있다는 것입니다 그러나 그들은 그것이 무엇인지 전혀 모른다 그렇게되면 정말 나쁜 일입니다 그리고 이것은 당신을 위해 그것을 잡을 것입니다

자,이 도구를 사용하는 것을 두려워해서는 안됩니다 이미지가있는 경우 간섭을 일으키지 않습니다 장식 순수하게 꾸미는 무언가가 있다면, 그것은 어떤 정보도 전하는 것이 아닙니다 실용적인, 그것은 정말로 아무것도 할 의도가 아니에요, 당신은 할 수있어

항상 null 표기법으로 태그를 지정하십시오 따라서 null로 설정하면 그것을 무시하는 도구 장식용 일 뿐이야 그것은 단지 눈 사탕입니다 그것은 실제로 아무 것도하지 않습니다

우리가 오늘 여기에서 이야기 한 것을한다면, 당신은 사용할 수있는 앱을 만들 것입니다 하지만 나는 이곳에있는 모든 사람들에게 도전하고 싶다 더 나아가 다음 마일로 가야합니다 일을 쓸모있게 만드는 것이 아니라 그것을 통해 일종의 투쟁을 할 수 있습니다 정말 멋진 앱을 만드는 것입니다

사람들이 사용하기를 좋아하는 앱 정말, 저는 우리 모두가 앱을 만들기 위해 노력해야한다고 생각합니다 찾고있는 것처럼 눈을 자유롭게 사용하는 것과 마찬가지로 효율적입니다 화면에 그리고 그걸로 라만에게 돌려 줄 것입니다

TV RAMAN : 고마워, Charles 결론적으로 안드로이드 플랫폼에서의 접근성 정말로, 정말 당신이 점점 더 커지는 데 도움이됩니다 광범위한 사용자층 플랫폼은 당신을 위해 많은 일을합니다 그러나 우리가하는 지침 중 일부를 따르면 너를 줘서 Charles의 테스트를 제안, 나는 그것을 보장 할뿐만 아니라 귀하의 애플 리케이션 시각 장애인, 시각 장애가있는 사용자, 사용자가 사용할 수있는 전문화 된 인터페이스를 제공하지만 일반적으로 사용자 인터페이스가 더욱 강력 해집니다

그것들은 정상적으로 성능이 저하됩니다 처음에는하지 않은 환경에서만 작동합니다 기대해라 그리고 그것은 매우 강력한 생각입니다 접근성은 많은 곳에서 법입니다

기업에 판매하는 경우 판매하는 경우 다음과 같은 경우 귀하의 응용 프로그램을 사용할 수 없습니다 특정 접근성 요구 사항을 충족하지 못합니다 하지만 그건 사실 내 의견으로는 초기 교육적 이유에 대해 걱정해야하는 이유 접근성 일반적으로 앱을 액세스 가능하도록 빌드하면 내 앱이 그 응용 프로그램이 궁극적으로 결국 모든 사람에게 더 유용합니다 예를 들어 작년에 우리는 접근성에 관한 I / O 이야기에서 TuneIn Radio를 선보였습니다

그 앱이 2 년 반 전에 발견되었습니다 그리고 나는 그것을 좋아했다 그것은 매우 훌륭하게 끝났습니다 우리는 그것이 상자 밖으로 액세스 할 수있는 것으로 나타났습니다 그리고 오늘은 가장 많이 사용되는 라디오 중 하나입니다

Android의 애플리케이션 그래서 나는 더 많은 사람들을 만나고 싶다고 생각합니다 각자 고맙습니다 CHARLES CHEN : 또한 Q & A에 가기 전에 오늘 우리가 여기서 많은 것을 보여 줬음을 언급하십시오 그리고 나는 너희 모두가 진짜를보고 싶어 죽는다는 것을 안다

실생활에 전시 그러니 샌드 박스로 들러주세요 우리 복도는이 복도 앞에 서 있습니다 접근성이야 당신은 그것을 놓칠 수 없다

그러니 들러서 인사 해주세요 또한 파트너가 있습니다 그래서 와서 확인해보십시오 확인을 클릭하면 질문이 표시됩니다 고맙습니다

[박수 갈채] CHARLES CHEN : 네? 관객 : 예, 여러 항목과 같이 더 복잡한 항목이있는 경우 그룹의 라디오 버튼 또는 스 와이프해야하는 항목 행동을 취하십시오 지시 사항을 포함시켜야합니까? 정확히 무슨 일이 일어나고 있는지, 어떤 라디오 버튼이 선택, 언제든지, 하나, 옵션이 무엇입니까? ALAN VIVERETTE : 내장형을 사용하는 경우 라디오 버튼, 아니 내장 된 위젯이 자신의 작업을 수행하도록 할 수 있습니다 몸짓으로, 내가하고있을 때 당신이 알아 차렸을지도 모르는 것처럼 정기 스크롤, 나는 두 손가락을 사용했다 따라서 터치하여 탐색 할 때 한 손가락 제스처는 단순히 두 자리 그림의 제스처가됩니다

CHARLES CHEN : 네, 선생님? 관객 : 내 질문은 내용과 관련이 있습니다 설명 예를 들어 영화를 말하는 품목 목록이 있다고 가정 해 봅시다 그런 다음 입력하면, 당신은 영화의 포스터 예술 그리고 나서 당신은 제목을 가졌습니다

포스터를 null 콘텐츠로 만드는 것이 적절합니까? 기술? 그걸 어떻게 든 동적으로 전송해야 할까? 이 영화 포스터입니다 ALAN VIVERETTE : 제 생각에, 일반적으로, 콘텐츠 설명을 추가하면 의미가 추가되어야합니다 정보 그래서 이미 영화의 제목을 가지고 있다면 영화 포스터가 제목을 반복하면됩니다 아마 그것을 피하십시오

TV RAMAN : 그렇습니다 "영화 포스터"라고하는 것 왜냐하면 그건 정말로 최종 사용자로서 훨씬 더 많은 기능을 제공하십시오 따라서 애플리케이션을 덜 수월하게 만드는 측면에서 오류가 발생합니다 관객 : 고마워

CHARLES CHEN : 네? 나는 당신이 먼저 그것을 가지고 있다고 생각합니다 관객 : 그리고 [무관심한] 오늘 발표 한 내용은 40 버전에는 적용되지 않습니다 Jelly Bean에서만 사용할 수 있습니다 TV RAMAN : 예

ALAN VIVERETTE : 맞습니다 관객 : 네, 알겠습니다 그리고 내가 가지고있는 질문은 일반적으로 표준을위한 것입니다 객체의 데이터 고정 된 내용 설명 콘텐츠 설명을 수정할 수 있습니까? 예를 들어, 내 응용 프로그램에서 웹보기를 사용하고 있습니다

그리고 내 시야를 시작할 때마다 [INAUDIBLE]이 표시됩니다 내가 사용하기 때문에, 내가 원하는 것은 [INAUDIBLE]이라고 가정 해 봅시다 다른 것을 구하기 위해 가능한가? CHARLES CHEN : 내 조언은 실제로 당신에게 웹보기에 대한 콘텐츠 설명 왜냐하면 콘텐츠 설명이 트럼프가되기 때문입니다 정상적인 행동

따라서 웹 처리 능력을 모두 잃게됩니다 그리고 당신은 모든 것을 재 구현해야만합니다 너 자신이 원하는 일이 아니야 그래서 오히려, 당신은 그렇게해서는 안됩니다 대신, 귀하의 페이지를 실제로 제공하는 방식으로 제공해야합니다

HTML5 접근성 우수 사례를 따릅니다 그리고 그것은 단지 작동해야합니다 그것에 대해 더 자세한 질문이 있으면 오프라인에서 일대일 채팅으로 즐거운 시간을 보내십시오 관객 : 네 CHARLES CHEN : 그러면 앱을 살펴볼 것입니다

관객 : 네, 고마워요 고마워 CHARLES CHEN : 문제 없습니다 알겠습니다? 관객 : 안녕하세요 많은 앱을 보니 자주 찾는 앱이 있습니다

앱을 사용하는 방법에 대한 도움말 가이드 그리고 이것은 접근성의 영역에서도조차 없습니다 이제 Send에 도착하면서 어떻게 비틀 거리는 지 보았습니다 버튼 – 이전에 만든 인스턴트 메시징 데모였습니까? 그 프로그램을 처음 발견했을 때, 심지어 주위에 자극의 거기에 버튼을 보냅니 까? 우리는 어떻게 그것을 일종의 직관적이지만 접근하기 쉬운 것으로 만들 수 있습니까? 동시? TV RAMAN : 그럼 당신은 아주 좋은 질문을합니다 그래서 한 가지 방법으로 당신은 실제로 그것을 매우 직관적으로 만들 수 있습니다

시각 장애인은 당신이 기대하는 곳 나는 실생활에서 이것을 보여줄 것입니다 오늘 밤, Google I / O 파티가 끝나면 모두로 돌아갑니다 네 호텔 방 그리고 호텔 방 문을 열면 사냥을하지 않습니다

전등 스위치 주위에 전등 스위치가 바로 있습니다 개인적으로 터치 스크린 인터페이스를보고 싶습니다 앞으로 2 년 안에 일관성, 어디서나 당신이 기대하는 곳입니다 오늘날 시각 장애인을 위해 터치 탐색이 우리의 탈출구입니다

그래서 우리는 탐구합니다 그러나 당신이 관찰 한 것처럼, 그것은 고통 스럽습니다 그리고 일들이 일종의 정착 된 세계에서 – 오늘날 모바일 공간에서 우리 모두는 매우 빠르게 혁신하고 있습니다 어떤면에서는 모든 사용자 인터페이스 컨트롤이 어떤 장소에 따라 다른 장소 디자이너 생각이 최고였다 하지만 일이 잘 풀리면 1 년 후 지금은 오늘처럼 빛을 사냥 할 필요가 없습니다

호텔 방에서 스위치를 누르면 OK 버튼이나 실제로 설치 버튼 없음 화면에서 사냥 관객 : 좋아, 빨리 추가 할 수 있을까? 너가 호텔 방 문을 열었다면 좋은 생각이야 그리고 목소리가 들려왔다 "네 오른쪽으로 가벼운 스위치가있어?" TV RAMAN : 좋은 일 이군 그러나 다른 한편으로, 그것이 항상 오른쪽에 있다면, 왜 그렇습니까? 너는 실제로 그것을 말할 필요가 있니? 예를 들어, 우리가 그런 시스템

우리는 문을 열 때마다 전등 스위치입니다 청각 장애인 사용자는 무엇을 할 것입니까? 청각 장애인 사용자는 무엇을 할 것입니까? 우리는 결국 – 내 생각에, 이것들은 상호 배타적 인 솔루션 그러나 사용자 인터페이스는 사용자 인터페이스가 눈에 띄지 않을 때 가장 잘 작동합니다 그들은 문까지 걸어 간다 문 손잡이의 유형은 밀어 붙이거나하지 말아야한다

문이 나를 밀거나 당겨서는 안된다 CHARLES CHEN : 또한, 귀하의 특정 상황에 추가하고 싶습니다 질문, 그것은 실제로 정말로 강력한 방법 중 하나입니다 터치 탐색과 선형을 사용할 수있는 곳 네비게이션 내 데모 중에 기억한다면, 나는 약간의 만져 봤어

먼저 웹 컨텐츠를 탐색하십시오 그리고 제스처 탐색을 시작했습니다 그리고 이것은 작동하는 것과 같은 것입니다 Android의 모든 부분에서 당신은 무언가에 탐구를 만질 수있다 그런 다음 제스처 탐색을 시작할 수 있습니다

가리킨다 처음으로 앱을 사용할 때, 어떤 것이 놓여 있는지 알 수있는 시간 그러나 일단 당신이 그것을 이해하면, 미래에, 당신은 얻을 수 있습니다 일반 부근으로 이동 한 다음 선형을 사용하십시오 네비게이션

TV RAMAN : 예를 들어, 오늘 전화로 도망 쳤을 때 Chrome, CNN 또는 BBC 또는 내가 읽은 사이트를로드합니다 자주 뉴스 그 화면의 해당 페이지의 1/3이 탐색 물건, 그리고 내가 정말로 필요하지 않은 것들 정기적으로 읽을 수 있습니다 그래서 대략 손가락을 반쯤 내리고 제목을 입력 한 다음 OK라고 말하면 여기에서 읽습니다 그래서 그것은 강력한 패러다임입니다

그러나 지금부터 1 년 후에는 이러한 것들이 일관되게 나타나기 때문에, 잘하면 우리는 좀 더 최적의 것을 말할 것이라고 확신합니다 관객 : 고마워 CHARLES CHEN : 네, 선생님? 청중 : 우리는 JavaScript를 사용하여 스 와이프 또는 회전과 같은 기본 동작을 모방합니다 너는 갈 능력이있어 보통은 한 손가락이 스 와이프하거나 두 손가락이 회전합니다

이제, 손가락으로 두 손가락을 쓸어 넘기고 터치 피드백 그렇다면 웹 개발자는 계속해서 네이티브 제스처를 모방 한 JavaScript 라이브러리? 그게 정상적으로 문제 였으니 까 CHARLES CHEN : 네, 근본적으로 무슨 일이 일어나고 있는지 여기에 개발자로서, 당신은 정말로 그것을 알지 못합니다 차이점 – 우리가 어떻게하고 있는지 깨닫지 못할거야 두 손가락으로 쓸어 넘기는 것

무슨 일이 일어나고, 안드로이드 끝 부분에 코드를 평소와 똑같은 방법 최종 사용자를 위해 얻을 수있는 것은 두 명을 사용하는 경우입니다 손가락과 그들은 터치 탐사를 가지고있다 손가락 한 개가 보입니다 그래서 그 차이를 실제로 보지 못할 것입니다

TV RAMAN : 질문에 대한 답은 다음과 같습니다 해당 라이브러리를 계속 사용하십시오 그리고 우리는 이것을 플랫폼에서 일관되게했기 때문에 수준이 높고 응용 프로그램의 시각 장애가있는 사용자는 손가락을 더 사용해야합니다 터치하기 위해 사용하는 손가락 하나 기본적으로 플랫폼에 대한 탐험은 마우스처럼 보입니다 접근성이 켜지면 포인터가 움직입니다

청중 : 접근성이 있는지 쉽게 판단 할 수있는 방법이 있습니까? 장치가 켜져 있습니까? CHARLES CHEN : 네 청중 : 귀하의 콘텐츠를 변경하는 것이 좋습니다 깃발이 켜져 있습니까? TV RAMAN : 프로그래밍 방식으로 확인할 수 있습니다 그렇습니다 당신이 정말로 무겁게 관습 인 무언가를하고 있지 않다면, 실제로 더 잘 제공 할 수 있다고 생각하는 곳 의미론, 나는 내용을 실제로 바꾸지 않을 것이다 예를 들어, 매우 사용자 정의보기가있는 경우

Alan이 키보드의 예를 보여주었습니다 하지만 멋진 캘린더 앱을 개발했다고 가정 해 보겠습니다 그런 식으로 그리고이 사용자 정의 캔버스를 가지고 있습니다 몇 가지 목록을 사용하여 캘린더 모델을 구축했습니다

몇 가지 격자, 그리고 무엇이든, 그리고 당신이 느끼는 것처럼, 앱으로 개발자는 목록, 목록, 표 및 단추를 말합니다 앱의 의미가 없어지면 기본적으로 사용자 고유의 액세스 가능성 비트를 구현합니다 우리는 좀 더 복잡한 플랫폼 위젯을 위해 할 수 있습니다 그러나 그것은 내가 물건을 주문을 받아들이는 수준이다 별도의보기 나 별도의보기를 수행하지 않습니다

콘텐츠 레이아웃 시간이 지남에 따라 둘은 동기화되지 않으므로 너는 문제가 생길거야 ALAN VIVERETTE : 당신이 시간을 절약 할 수있는 것은 매우 드뭅니다 별도의 구현 CHARLES CHEN : 예, 당신이하고 있다면 말이됩니다

모든 OpenGL이나 뭐 그리고 이것은 단순한 목록 일뿐입니다 그리고 기호 목록 만 갖고 싶었습니다 ALAN VIVERETTE : 그래도, 당신이 노드 제공 업체를 통해 서면으로 작성된 표면 렌더러 또는 GL 캔버스를 사용하는 OpenGL 완전히 액세스 할 수 있습니다 그리고 그것은 실제와 구별 될 수 없습니다

구현하는 경우보기 계층 구조 노드 공급자 CHARLES CHEN : 네 그래서 일반적으로 그렇게하려고하지 마십시오 TV RAMAN : 구현할 추가 코드는 다음과 같습니다 앨런과 찰스가 묘사 한 것은 노드입니다

공급자와 노출 – 그래서 당신은 시맨틱 스를 통해 그 가상 계층 CHARLES CHEN : 어쨌든, 당신이 더 구체적인 것을 가지고 있다면, 우리는이 이야기 후에 오프라인에서 당신과 이야기하게되어 기쁩니다 예? 마지막 질문 일 수도 있습니다 짧은 시간에 달리기 관객 : 안녕하세요, 제 이름은 다니엘입니다

이 세션을 가져 주셔서 감사합니다 베드로가 프레젠테이션에서 알란에게 메시지를 보냈을 때 그는 커피를 좋아한다고 말하면서 보내기 버튼을 찾으십시오 그러나 그 장치는 그에게 메시지에 대한 피드백을주지 않았다 실제로 전송되지 않았습니다 우리는 그것을 볼 수있었습니다

그러나 우리는 그것을들을 수 없었다 그래서 베드로는 그가 메시지를 보냈다고 생각합니다 그러나 Alan은 여전히 ​​그것을 기다리고 있습니다 그렇다면 프로그래밍의 오류는 무엇입니까? 신청? 또는 이것이 중요하지 않은 원인은 무엇입니까? 피드백 메시지가 전송되지 않았습니까? 사실 그것은 큰 질문입니다 나는 그것이 물론 균형을 이루고 있다고 생각합니다

많은 피드백 이 경우 우리는 아마도 약간의 조금 더 피드백 하지만 언제든지 돌아가서 메시지가 있는지 확인할 수 있습니다 당신이 정말로 알고 싶다면 실제로 보냈습니다 TV RAMAN : 나는 그것이

또한 보내기 버튼을 눌렀을 때 성공적으로, 그것은 보낸다고합니다 그리고 나는 여기에 일어난 일이 우리 모두 였다고 의심합니다 집중은 데모에 대한 이야기를 더 많이했다

실제 사용에 반대합니다 그러나 메시징 응용 프로그램은 당신은 성공적으로 보낸다 당신이 보내지 않을 때 그것은 당신에게 피드백을주지 않습니다 피드백에 대한 피드백이 부족합니다 CHARLES CHEN : 그리고 저는 우리 중 한 명과 새로운 접근성 이벤트, 성공적으로 타입 발표

이것은 정확하게 유스 케이스이다 편리하게 왔어 ALAN VIVERETTE : 그래서 유형 발표 – CHARLES CHEN : 우리는 그것을 업그레이드 할 것입니다 ALAN VIVERETTE : 당신이 원할 때입니다 앱에서 방금 말을합니다

유형이 포함 된 접근성 이벤트를 보내는 경우 발표하면 축 어적으로 읽힐 것입니다 CHARLES CHEN : 고맙습니다 좋아요, 그래서 마지막 질문이나 아니요? 승인 ALAN VIVERETTE : 마지막 플러그 하나, 우리는 홀에서 코너, 접근성 부스 우리를 보러와

TV RAMAN : 고마워요 그리고 귀하의 앱을 기대하십시오 [박수 갈채]