Android Digital Wellbeing: Tools for balance

작년에 미국 성인 3 명 중 1 명이 적극적으로 개선 활동을 펼쳤습니다 디지털 웰빙

그러나 기술이 항상 당신과 함께 주머니, 가방, 당신의 차와 당신의 집은 작년에 구글 I / O에서 균형을 잡는 것이 까다로울 수 있습니다 사람들이 올바른 균형을 찾고 디지털 감각을 갖도록 돕겠다는 약속 안녕 사람들은 이미 자신의 감각을 찾기 위해 도구를 사용하고 있습니다 균형의 올해는 Android Q를 통해 이러한 발전을 쌓고 있습니다

초점 모드 및 코칭 도구와 같은 기능은 사람들에게 더 많은 기회를 제공합니다 그들의 개인적인 목표와 함께 궤도에 머물러 라 월 25 억 개의 월간 활성 Android 장치가 있으면 우리는 모두 새로운 디지털 환경을 탐색하는 법을 배우고 있습니다 이 바로 시작일뿐입니다 올바른 습관을 구축하는 것은 개인적인 것입니다

아무리 디지털 웰빙이 중요합니다 그리고 우리는 당신이 그것을 관리하는 데 도움이되는 도구 wellbeinggoogle는에서 정보를 제공합니다 전문가 및 디지털 웰빙을 반영하는 데 도움이되는 대화식 도구 너를위한 수단

훌륭한 기술은 삶을 향상시켜야합니다

What's New in Android Studio UI Design and Debugging Tools (Google I/O'19)

[음악 재생] VADIM CAEN : 안녕하세요 우리 이야기에 일찍와 주셔서 감사합니다

Android Studio, UI 디자인 및 디버깅의 새로운 기능 도구 고맙습니다 [박수 갈채] 저는 Vadim입니다 Android Studio에서 디자인 툴을 작업합니다 JEROME GAILLARD : 저는 Android Studio 팀의 Jerome입니다

JOE BAKER-MALONE : 저는 Android Studio 팀의 Joe입니다 ASHLEY ROSE : 저는 Android 프레임 워크와 JetPack의 Ashley입니다 VADIM CAEN : 좋습니다 시작하기 전에 모바일 제품에 대해 약간의 이야기를합니다 어제 어쩌면 Android Studio 팀은 개선을 위해 모바일 제품에 중점을 두었습니다

Android Studio의 엔드 투 엔드 사용자 경험 Android Studio 개선은 수정 사항 만이 아닙니다 또한 사용 방법을 개선하는 방법이기도합니다 우리가 확인한 틈새를 채우십시오 우리의 도구 체인은 – 설계 할 때 – 새로운 레이아웃을 구축하고 새로운 탐색 기능을 구축합니다 이 레이아웃 사이에, 당신의 자원을 관리하고, 장치에서 런타임에 검사를 처리합니다

이 도구 체인을 사용하려면 전형적인 사용자 여행을 거치면서, Google Trips 애플리케이션을 구축하십시오 그리고 Jerome은 Layout Editor에 대해 이야기 할 것입니다 여기에서 볼 수있는 첫 번째 레이아웃을 작성하는 방법에 대해 설명합니다 제롬 가이 야드 : 감사합니다, 바딤 그래서 우선, 우리는 Google Trips 앱의 첫 화면, 레이아웃 편집기를 사용하여

레이아웃 편집기를 열면 이것은 화면의 종류입니다 너는 볼거야 여기는 단지 빈 레이아웃 일뿐입니다 우리가 할 첫 번째 일은 청사진 모드로 전환하는 것입니다 속도가 빠르면 빠르며 방금 만들려고 할 때 산만해진다

레이아웃상의 제약 넌 그냥보고 싶지 않아 구성 요소가 실제로 어떻게 보이는지 나는 팔레트에서 – 레이아웃에 필요한 모든 구성 요소를 드래그하여 어느 정도 확실한 곳에서 일단 내가 끝내면 그 시간이 온다

제약 조건을 만들 수 있습니다 좀 더 효율적인 건물 제약이되는 방법으로, 나는 그들을 하나 하나 만들 수 있었다 하지만 문맥 메뉴를 사용하면 한 번에 여러 가지 제약 조건을 만들 수 있습니다 예를 들어 여기서는 RecyclerView를 중앙에 배치하려고합니다 레이아웃 내에서

내가 할 수있는 한 가지는 RecyclerView를 마우스 오른쪽 버튼으로 클릭하는 것입니다 문맥 메뉴에는 옵션이 있습니다 수평으로 센터링의 그것이하는 일은 왼쪽 클릭 한 번으로 오른쪽 제약 조건을 RecyclerView가 중앙에 배치되도록합니다 일단 모든 제약 조건을 다 만들면, 이것은 내 레이아웃이 청사진 모드에서 보이는 것과 같습니다

분명히, 그것은 나에게 정말로 말하지 않는다 디자인에 비해 옳은 것을 만들면 지금 당장 나는 주어진다 이제 디자인 모드로 돌아가겠습니다 그것이 어떻게 생겼는지 보아라 디자인 모드에서는 보이지 않는 것을 볼 수 있습니다

내가받은 원래 디자인과 매우 흡사하다 그 이유는 RecyclerView 뷰 꽤 비어 있습니다 아시다시피, RecyclerView는 일반적으로 런타임에 데이터를 채우고, 하지만 그때는별로 도움이되지 않습니다 레이아웃을 만들고 데이터가 올바르게 표시되는지 확인하십시오 당신이 보게 될 것입니다

이 문제를 해결하려면 디자인 [? 도구?] 속성을 사용합니다 그래서 디자인 시간 속성, 당신은 간단하게 – RecyclerView에서 컨텍스트 메뉴를 다시 사용하십시오 샘플 데이터 선택기 등을 사용할 수 있습니다 샘플 데이터 선택 도구에서 미리 정의 된 템플릿 중 하나를 선택할 수 있습니다 RecyclerView 항목에 대해 귀하가 제공하는 정보

여기에서 첫 번째 이메일 클라이언트를 선택했습니다 그렇게하면 해당 RecyclerView에 대한 레이아웃이 생성됩니다 항목, 이메일 클라이언트 카드 그리고 동시에, 그것을 당신의 RecyclerView에 연결합니다, 그러면 레이아웃 편집기에 채워진 상태로 표시됩니다 물론 우리는 이메일 클라이언트를 구축하지 않습니다

RecyclerView에서 빌드하고자하는 것 그 여행 카드입니다 그래서 나는 그 RecyclerView 아이템을 편집하려고합니다 Trip 카드로 만들었습니다 자원 관리자 패널에서 – 여기에서 볼 수있는 왼쪽 편에, 바딤이 선물 할거야 너에게 훨씬 더 자세하게 – 간단히 말해서 RecyclerView 항목의 이름을 뭔가로 바꿀 수 있습니다

내 프로젝트에 더 적합한, 그리고 나 편집을 시작할 수 있습니다 리소스 관리자에서 레이아웃을 두 번 클릭하십시오 레이아웃 편집기에서 레이아웃을 열면됩니다 화면에서 볼 수 있듯이, 나는 꽤 많이 가지고있다 내 오른쪽 여행 카드에 필요한 모든 권리가있는 구성 요소, ImageView, 몇 개의 태그보기, 그러나 그들은 분명히 올바른 제약 조건을 가지고 있지 않습니다

그래서 모든 제약 조건을 삭제하고, 툴바에서 해당 버튼을 클릭합니다 그 작업이 끝나면, 나는 재구성 만 할 것입니다 모든 제약 한 가지 문제는 우리가 꽤 많은 구성 요소를 가지고 있다는 것입니다 작은 영역에서 서로 겹치기

그것은 약간 어수선 할 수 있습니다 그리고 우리는이 상황에서, 건물 제약 조건은 약간 어려울 수 있습니다 제약 조건을 드래그하는 것이 때로는 어려울 수 있습니다 올바른 대상, 올바른 구성 요소, 특히 구성 요소가 겹치는 경우 이제 우리가 할 수있는 일은 제약을 원하는 곳으로 직접 드래그합니다 연결하려는 구성 요소에서, 그런 다음 팝업 메뉴가 열리고 어떤 유형인지 묻습니다 설정할 제약 조건을 선택하십시오

정말 흥미로워 지네 제약 조건을 다음 위치로 드래그합니다 겹치는 구성 요소가 있습니다 그 상황에서, 우리는 여러 유형의 제약 조건을 사용할 수 있지만 겹치는 구성 요소를 선택하십시오 그 제약 조건을 첨부하고 싶습니다

그리고 그것은 그것을 훨씬 쉽게 만들어야합니다 경우에 제약 조건 레이아웃을 작성하는 방법 중첩되고 작은 구성 요소가있는 곳 도움이 될 수있는 마지막 방법 제약 조건을 효율적으로 만들 수 있습니다 구성 요소를 사용 중입니다 구성 요소에서 여러 구성 요소를 선택하는 경우 – 여기에서는 두 가지 텍스트보기를 선택했습니다

다시 컨텍스트 메뉴에서 마우스 오른쪽 버튼을 클릭하고 선택합니다 사용할 수있는 제약 조건 중 하나 당신은 하나의 제약 조건을 만들 수 있습니다 선택한 여러 구성 요소에 적용됩니다 그래서 여기에서 두 가지 제약 조건을 만듭니다 이 두 텍스트보기에서 동시에 우리가 모든 제약 조건을 다 만들면, 우리의 견해를 조금이라도 사용자 정의 할 때입니다

이를 위해 우리는 Attributes Panel을 사용할 것입니다 레이아웃 편집기의 오른쪽에 있습니다 우리는 Attributes 패널을 재 설계했습니다 Declared Attributes라는 맨 위에 새 섹션을 표시합니다 이 섹션에서는 모든 속성 구체적으로 설정된 선택한보기에 대한 그 견해에 대해서

바로 거기에서 모든 속성을 편집 할 수 있습니다 이미 설정된 해당 뷰에 새 속성을 설정하려면, 더하기 버튼을 클릭하기 만하면됩니다 해당 속성의 이름과 값을 추가하십시오 Attributes 패널에서 할 수있는 또 다른 일 Constraint Widget을 사용하여 여백을 설정합니다 귀하의 의견에 보고 싶어했을거야

숫자와 같은 실제 값만 설정할 수있을뿐만 아니라 증거금의 가치 ​​- 정의 된 맞춤 측정 기준을 설정할 수도 있습니다 프로젝트에서 그것이 우리가 @ dot dot dot option을 추가 한 이유입니다 드롭 다운의 맨 아래에 버튼을 클릭하면 자원 선택 도구가 열리고, 이미 가지고있는 특성 항목을 선택할 수 있습니다 프로젝트에서 정의하거나 바로 거기에 새로운 차원이 있습니다 일어날 필요가있는 마지막 한 가지 – 그 레이아웃을 보면서 – ImageView가 샘플 데이터로 채워지는 것을 볼 수 있습니다

하지만 단지 기본 샘플 데이터 일뿐입니다 Android Studio에서 제공됩니다 그래서 그것은 실제로 그 종류를 대표하지 않습니다 RecyclerView가 런타임에 수신 할 데이터의 양입니다 그래서 당신이 할 수있는 것은 당신 자신의 샘플 데이터를 설정하는 것입니다

그 ImageView에 cities라는 이미지를 cities라는 디렉토리에 추가했습니다 우리 프로젝트의 샘플 데이터 폴더에 있습니다 샘플 데이터 그림에 나타나는지 확인할 수 있습니다 샘플 데이터를 설정할 수 있습니다

우리의 원래 레이아웃으로 돌아가서, 우리는 이제 그것이 많이 보임을 볼 수 있습니다 당신이 가진 원래의 디자인과 더 비슷합니다 거기에서, 당신은 정말로 디자인이 제대로 구현되었으며 실제 데이터를 수신 할 때 작동합니다 장치에서 실행 중입니다 이제 우리는 첫 번째 제약 조건의 구축을 마쳤습니다

첫 번째 화면에서 계속 진행하고 싶습니다 우리의 응용 프로그램에서 우리의 다음 화면을 구축합니다 레이아웃 파일을 만드는 것만으로 돌아 가기보다는, 레이아웃 편집기에서 빌드하고, 우리는 네비게이션을 생각하고 바로 거기에서 시작하고 싶다 우리의 애플 리케이션의 흐름, 그리고 어떻게 첫 번째 화면이 전환됩니다 두 번째 화면으로 그렇게하기 위해 우리는 네비게이션을 살펴볼 것입니다 편집자

탐색 편집기는 시각적 도구입니다 이를 통해 Navigation Architecture를보다 쉽게 ​​사용할 수 있습니다 JetPack 라이브러리의 구성 요소 탐색 아키텍처 구성 요소의 방식 작품은 네비게이션 호스트 단편을 사용하는 것에 의존합니다 응용 프로그램의 기본 레이아웃

여기에 우리의 활동 주 레이아웃 파일, 우리는 Layout Editor에서 드래그 할 것입니다 NavHostFragment 팔레트 – 기본적으로 거기에 있습니다 그것을 디자인 표면 위로 끌어 올 것입니다 그렇게 할 때, 그것은 당신에게 선택을 요구할 것입니다 해당 NavHostFragment와 관련된 탐색 그래프 아직 탐색 그래프를 만들지 않은 경우, 그 대화 상자에서 바로 할 수 있습니다

우리가하는 일이야 이것이 레이아웃이 어떻게 생겼는지입니다 그것은 비어 있습니다 이 NavHostFragment가 있습니다 네비게이션 아키텍처 구성 요소 그것을 채울 것입니다 당신이로드 할 여러 단편들

그러나 두 번 클릭하면 탐색 편집기가 열립니다 이것은 네비게이션 에디터가 비어있을 때 보이는 것과 같습니다 우리가하고 싶은 첫 번째 일 첫 번째 화면을 시작 목적지로 추가합니다 우리의 애플 리케이션을 위해 대상 추가 메뉴에서 앱에있는 모든 레이아웃이 미리 선택되었습니다

그래서 우리를 위해, 우린 그 조각을 환영합니다 이전에 작업해온 레이아웃입니다 바로 거기에 놓으십시오 다음으로, 우리는 두 번째 화면을 추가하기를 원한다 그러나 이미 레이아웃을 만들지 않았기 때문에, 우리는 단순히 새로운 목적지를 만들 수 있습니다

추가 대상 메뉴에서 그렇게하면 생성의 가능성을 얻을 수 있습니다 새로운 프래그먼트 클래스와 그 관련 레이아웃, 이것이 레이아웃이 될 것입니다 두 번째 화면으로 사용됩니다 두 화면이 Navigation Editor에 있으면, 그들을 연결하는 시간이 온다

그것은 행동으로 할 수 있습니다 화면에 표시된대로 작업을 간단하게 만들 수 있습니다 또한 Attributes 패널에서 직접 탐색 편집기의 해당 동작에 대한 속성 중 일부를 설정하고, 애니메이션이 재생되는 것과 같습니다 그 동작을 통해 전환 할 때, 또는 뒤로 누르면 행동으로 할 수있는 또 다른 매우 흥미로운 일 한 화면에서 다음 화면으로 유형 안전 데이터를 전달합니다

그렇게하고 싶다면 다음과 같이 할 수 있습니다 수신 대상에 – 인수 섹션에서 더하기 단추를 클릭하십시오 속성 패널의 단순히 대화 상자를 열면 인수의 이름을 지정하십시오 인수의 유형 그것은 미리 정의 된 유형일 수 있습니다

또는 프로젝트에서 정의한 유형일 수 있습니다 당신이 원하는 어떤 물건이라도 물론, 네비게이션 그래프 만들기 앱 탐색을 완벽하게 지정하기에는 충분하지 않습니다 또한 약간의 코드를 작성해야합니다 그러나 당신이 볼 수있는 것처럼 그것은 꽤 간단합니다

여기, 나는 RecyclerView의 항목에 불과하다 OnClickListener의 경우 전환하려고합니다 그 행동을 끝내라 그래서 내가하는 일은 액션 객체를 만드는 것입니다 내비게이션에서 지정한 인수를 전달합니다

편집자 일단 행동을 취하면 나는 간단하게 탐색 라이브러리의 navigate 메소드 호출 실제로 전환을 수행합니다 그것이 실제로 정의한 전환을 수행하는 데 필요한 전부입니다 탐색 편집기에서 할 수있는 마지막 사항 나머지 네비게이션 흐름을 채우기 위해 자리 표시자를 사용하며, 그 순간에 귀찮게하고 싶지 않으면 새로운 조각 나중에, 그렇게 할 준비가되면, 당신은 단순히 돌아가서 레이아웃으로 대체 할 수 있습니다

지금은 실제로 빌드 할 때가되었다고 생각합니다 우리의 두 번째 레이아웃 보시다시피, 많은 이미지가 포함 된 레이아웃입니다 많은 자원이 필요합니다 우리는 어떻게 자원을 볼 것인가? 관리자는 우리가 그것을 구축하는 데 도움이 될 수 있습니다

VADIM CAEN : 나는 갭을 채우기 전에 이야기하고있었습니다 Android Studio에 존재했던 하나의 차이 리소스를 관리하는 방법이었습니다 문제가 무엇인지 살펴 보겠습니다 Android Studio 리소스 디렉토리 구조 프레임 워크를 위해 만들어진 것이지 실제로는 아닙니다 사용자에게 리소스를 얻을 때 디자이너에게서 보면 이렇게 보일 수도 있습니다

폴더가 많을 수도 있습니다 죄송합니다 먼저 Android Studio에서 다른 문제가 발생했습니다 전체 축소판보기가 없습니다 특정 Android보기

그래서 레이아웃, 벡터 잔해 또는 모양 – 미리 볼 수있는 유일한 방법은 하나의 레이아웃을 두 번 클릭하거나 하나의 파일에 두 번 클릭하는 것입니다 미리보기에서 확인하십시오 이 문제를 해결하기 위해 Android Studio에 도입했습니다 34 Resource Manager는 다음과 같은 새로운 도구입니다

리소스를 가져오고, 사용하고, 탐색 할 수 있도록 도와줍니다 보다 그래픽적인 방식으로 그것을 열려면 간단히 Resource Manager 버튼을 클릭하면됩니다 Android Studio의 왼쪽에있는 프로젝트 버튼 아래, 이 중립 창을 열 것입니다 한번 더 그래서 우리 문제로 되돌아갑니다

왼쪽에는 프로젝트 구조가 있습니다 오른쪽에는 디자이너가 우리에게 준 것을 가지고 있습니다 우리는 파일에서 다른 프로그램을 볼 수 있습니다 디자이너가 우리에게 준 것 어쩌면 그들은 자신이 좋아하는 디자인 소프트웨어를 사용했을 것입니다

기본 내보내기 옵션을 사용했습니다 폴더에 드로어 블 접두어가 누락되었을 수 있습니다 이름 또는 접미사 @ 2x와 함께 웹 형식을 사용했을 수도 있습니다 그리고 당신이해야 할 일은 @ 2x 접미사를 제거하는 것입니다

그런 다음 하나씩 하나씩 파일을 붙여 넣습니다 다른 문제는 폴더가 누락되었을 수 있으며, 그리고 당신은 문서로 돌아 가야 할 것입니다 이 특정 폴더에 대한 한정자가 무엇인지 기억하고, 그리고 당신은 올바른 순서로 그들을 넣어야합니다 Resource Manager와는 어떻게 작동합니까? 이제 전체 묶음을 끌어다 놓기 만하면됩니다 당신이 Resource Manager에 가져온 파일들, 자동으로 가져오고 이름별로 그룹화됩니다

여기에서 볼 수 있듯이 우리의 자원은 이름별로 그룹화되어 있습니다 올바른 한정어가 적용되었습니다 그래서 방금 무슨 일이 있었던거야? [박수 갈채] 고맙습니다 한정어를 식별하면 여기에는 웹 또는 Android가 파일 경로에있을 수 있습니다 우리는 단순히 해당 안드로이드 폴더를 만들 것입니다, 파일에있을 수있는 접미어를 제거하고, 프로젝트에 복사하십시오

물론 한정자를 추가하려는 경우 (예 : 무작위로 지방, 그리고 프랑스어와 같은 임의의 언어, 프랑스와 같은 지역에서는 간단하게 여기에서 할 수 있습니다 그리고 당신은 명령을 기억할 필요가 없습니다 수동으로 폴더를 만들면 자동으로 생성됩니다 올바른 한정어로 이 시점에서 원하는 경우 파일의 이름을 바꿀 수도 있습니다 이제 우리의 자원은 Resource Manager에서 그룹화됩니다

한 번에 모두 볼 수 있습니다 따라서 기본적으로 하나의 리소스 버전 만 표시됩니다 하지만 리소스를 두 번 클릭하면 당신은 모든 다른 버전을 볼 수 있습니다 다른 한정자가 적용되면 분석 할 파일 유형 어떤 파일이 응용 프로그램에서 가장 많은 공간을 차지했는지 자, 이것은 제가 정말로 흥분되는 특징입니다

이제 SVG를 드래그 앤 드롭 할 수 있습니다 VectorDrawable로 변환됩니다 [CROWD CHEERING] 고맙습니다 그래서 여기에 파일 선택기가 열려 있습니다 나는 아무것도 선택할 필요가 없다

간단히 클릭하고 열 수 있으며 모든 SVG를 열 수 있습니다 가져오고 변환됩니다 또 다른 멋진 기능은 모든 레이아웃을 미리 보는 것입니다 이름으로 레이아웃을 인식하는 것이 어려울 수도 있습니다 따라서 레이아웃 탭에서 리소스 관리자를 열면, 모든 레이아웃을 볼 수 있습니다

당신이 찾고있는 것을 찾으려면 전에 말했듯이 도구 체인이 있습니다 이 전체 도구 체인을 함께 통합하려고합니다 우리가 한 것은 통합 된 것입니다 [INAUDIBLE] 레이아웃 편집기로

예를 들어 여기에 포함시키고 자하는 레이아웃이 있습니다 그래서 상단 부분 이 레이아웃을 레이아웃 편집기로 드래그 앤 드롭 만하면됩니다 [INAUDIBLE]을 만듭니다 Drawable에도 똑같이 적용됩니다

Drawable을 드래그 앤 드롭하면 ImageView가 생성됩니다 이 견해의 끝까지 빨리 감습니다 이전 레이아웃에서 볼 수 있습니다 우리 툴바는 올바른 색상이 아닙니다 우리가 할 수있는 것은 컬러 탭을 열고, 우리 프로젝트에 정의 된 모든 색상을 볼 수 있습니다

그 중 하나를 두 번 클릭하기 만하면됩니다 파일을 열어서 커서를 옮깁니다 여기서 색상이 정의됩니다 그런 다음 새로운 색상 선택기를 사용할 수 있습니다 시각적으로 색을 선택하십시오

색상 선택기는 RGB 및 HSB에서 작동하며, HSB를 선택한 디자이너와 함께 일한다면 값을 사용하거나 자료를 사용할 수 있습니다 이미있는 팔레트 이제 두 개의 레이아웃이 준비되었습니다 앱에서 실행하고 싶습니다 Ashley와 Joe가 우리에게 말하기를 다시 환영 할 것입니다

새로운 레이아웃을 검사하는 방법 [박수 갈채] JOE BAKER-MALONE : 감사합니다, 바딤 이제 개발주기의 다음 단계로 넘어갑니다 우리가 실제로 앱을 실행하게되면, 실제 데이터와 함께 작동하는 방법을보고 조정할 수 있습니다 우리가해야 할 수도 있습니다

이제 오늘, 레이아웃이 어떻게 작동하는지보고 싶다면 런타임에는 Layout Inspector 도구가 있습니다 Android Studio에서 레이아웃 속성은 스냅 샷을 제공합니다 한 화면의 전체보기 계층 구조, 및 속성에 대한 일부 정보 각보기에서 설정됩니다 하지만 지금은 많은 한계가 있습니다 이것은 부분적으로 안드로이드 프레임 워크의 데이터에 기인합니다 표시 할 수 있도록 Studio에 제공됩니다

이제 Android Q에서는 프레임 워크에 Studio에 대한 여러 가지 새로운 API 추가 더 많은 뷰 및 레이아웃 디버깅을 노출하는 데 사용 정보 Ashley는 새 API에 대해 곧 이야기 할 것입니다 프레임 워크 추가가 우리에게 충분한 지 확인하려면 우리가 원하는 정보를 사용자에게 보여주고, Android Studio 팀의 우리 부부 프로젝트 마블에서 약간의 시간을 보냈습니다 새 API를 채택하고 우리가 할 수있는 것을 확인하십시오 우리는 완전히 새로운 Layout Inspector 작업을 시작했습니다

내가 너에게 지금 보여줄 것은 일의 몰래 절정이다 우리는 지금까지 해왔습니다 자, 이것은 초기 작업입니다 최신 미리보기 빌드에는 아직 포함되어 있지 않습니다 그러나 차드가 어제 개발자 기조 연설에서 말했듯이, 우리는 미리보기를 좋아합니다

우리는 개발자 의견을 환영합니다 그래서, 우리는 당신의 손에 그것을 밖으로 가져갈 것입니다 최대한 빨리 자, 어떻게 작동하는지 봅시다 Google 여행 앱부터 시작하겠습니다

우리가 해왔 던 이제 에뮬레이터에서 실행 중임을 알 수 있습니다 우리는 물건을 끌어 올려서 사용자로부터 실제 데이터를 실행하고, 디자인 타임에 사용한 샘플 데이터가 아닙니다 여기서 아래로 스크롤하면 볼 수 있습니다 실제 데이터의 일부 여행 설명 우리가 샘플 데이터에서 가지고있는 것보다 상당히 길다 텍스트가 정렬되는 지점까지 우리가 의도하지 않은 방식으로 이미지를 지배했다

새로운 레이아웃 검사기에서 이것을 살펴 보겠습니다 새로운 레이아웃 검사기가 우리에게 제공하는 것을 볼 수 있습니다 레이아웃 검사기에서 현재 가지고있는 것과 유사한보기입니다 문제의 텍스트보기를 선택하면 여기, 그리고 오른쪽에있는 Attributes Panel을보고, 우리는 몇 가지 차이점이 있음을 알 수 있습니다 현재 레이아웃 검사기에서 가지고있는 것입니다

우선, 실제 속성 이름이 있습니다 이전에는 getter 메소드 모음이 있었지만 그렇지 않을 수도 있습니다 잘 실제 속성 이렇게하면지도를 훨씬 쉽게 찾을 수 있습니다 여기서 본 것에서부터 정의한 것에 이르기까지 자신 만의 레이아웃과 스타일로

두 번째로, 우리는 멋지게 형식화 된 속성 값 다양한 가치 유형에 대해 우리는 전에 그것을 항상 얻을 수는 없었다 예를 들어 ID, 열거 형을 볼 수 있습니다 가치, 색깔, 등등 세 번째로, 우리는 지금 몇 가지 정보를 가지고있다 그 속성 값이 설정되는 곳

따라서 우리는이 선언 된 속성 섹션을 볼 수 있습니다 여기, 우리가 Layout Editor에서 가지고있는 것과 비슷합니다 직접 설정된 속성의 경우 선택한보기에서 이제 텍스트 크기와 관련된 속성을 살펴 보겠습니다 이 옵션을 선택하면 기본 탐색 기능을 사용할 수 있습니다 여기에서 직접 키 스트로크를 선언하는 방법 해당 값이 설정되는 레이아웃 xml로 이동합니다

조금 더 작게 변경하십시오 개발자 기조 연설에서 들었던 것처럼, Android Studio 35 미리보기에서 이 새로운 변경 기능을 적용하십시오 이것 이후에 바로 그 부분에 대해 더 많은 것을들을 수 있습니다 Android 개발자 도구에서 새로 워진 이야기

하지만 지금은 에뮬레이터의 변경 사항을 확인하는 데 사용하겠습니다 우리의 애플 리케이션을 재배치 할 필요없이 실제로 새로운 레이아웃에서 업데이트가 즉시 표시됩니다 경감 님 Layout Inspector가 무엇을 미러링하고 있기 때문입니다

기기 라이브에서 발생합니다 우리가 여기서 다시 스크롤한다면, 레이아웃 검사기가 오른쪽으로 스크롤되는 것을 볼 수 있습니다 게다가 [박수 갈채] 예 다른 시나리오를 살펴 보겠습니다

앱의 어두운 테마를 구현하고 싶다고 가정 해 보겠습니다 여기서 우리는 밝은 배경색을 가지고 있음을 알 수 있습니다 배경색이 어디인지 알아 보겠습니다 에서 온다 우리가 여기에있는 단편 xml을 보면, 우리는 거기에 직접 설정되어 있지 않습니다

Layout Inspector를 살펴 보겠습니다 여기서 배경을 선택하면, 정말 잘 볼 수 있다면 우리는 배경색이 없다

이보기에서 직접 설정하십시오 왜 그럴까? 글쎄, 우리는 여기에서 가장 많은보기를 선택했습니다 배경색을 어느 정도 낮추어 놓을 수도 있습니다 뷰 계층 구조에서 그러나 어떤 시각이 설정되고 있습니까? 글쎄, 새로운 레이아웃 검사기가 우리에게 제공합니다

쉽게 찾을 수있는 방법 [크라우드 반응] [웃음] 3D보기에서는 어느 것이 쉽게 볼 수 있습니다 여기에서 무엇을 그리는가? 이제이보기를 선택하면 배경이 색상이 실제로 설정되어 있습니다 그러나 어떤 파일에 설정되어 있습니까? 이것은 선언 된 속성 섹션의 맨 위에 있지 않습니다 그래서 우리는 그것이이 견해에 직접적으로 설정되어 있지 않다는 것을 알고 있습니다

그러나 다시 한번 우리가 Attributes에서 속성을 선택하면 Panel, 거기에서 직접 탐색 할 수 있습니다 그것이 설정되는 곳으로 이 경우 스타일로 설정됩니다 그리고 우리는 그 스타일을 직접 탐색 할 수 있습니다 보기에 명시 적으로 참조되지 않는 경우에도 마찬가지입니다

우리가 본 3D 표현은 우리는 다른 방식으로 사물을 시각화하고, 여기서 유용한 정보를 계속 찾고 있습니다 예를 들어 초점을 맞추는 것이 유용 할 수 있습니다 한보기 및 그 자녀들에게 또는 무엇을 기반으로보기를 함께 그룹화하는 것이 유용 할 수 있습니다 그들이 정의 된 레이아웃 파일

이 화면의 예는 상단에서 볼 수 있습니다 우리는 RecyclerView 항목을 가지고 조각을 만든 다음, 활동 그리고 그 뒤에, 다양한 견해들 프레임 워크에 의해 정의됩니다 가벼운 새로운 레이아웃 검사기를 위해 더 많은 계획을 세웠습니다 저는 우리가 무엇을 생각해 낼 수 있는지에 대해 매우 기쁩니다

이제는 필요한 프레임 워크 변경 사항에 대해 이야기합니다 이것을 가능하게하려면 여기 애쉴리가 있습니다 애쉴리 로즈 : 고마워, 조 [박수 갈채] Android Q의 경우 세 가지 새로운 API가 추가되었습니다 이러한 새로운 검사 기능을 사용할 수 있습니다

우리는 모든 도면 명령을 수행 할 수 있습니다 화면에 프레임을 만들었습니다 그것을 직렬화하여 Studio로 다시 보내십시오 그래서 그것들을 재생할 수 있고 멋진 3D보기를 만들 수 있습니다 우리는 얼마나 길게 빨랐 는가? 뷰 계층 구조에서 뷰의 특성을 가져오고, 추가 메타 데이터를 추가 할 수 있습니다

그것을보다 정확하게 만드는 것입니다 그리고 우리는 리소스 프레임 워크에 몇 가지 새로운 API를 추가했습니다 속성 값의 출처를 보자 의사 결정에 대한 더 많은 통찰력 그 과정은 다음과 같은 경우에 적용되었다 해당 속성 값에 도달합니다

그럼 Skia Picture에 대해 이야기 해 봅시다 Skia는 UI 툴킷의 기초가되는 2D 그래픽 라이브러리입니다 이것은 실제로 슬라이드에 맞도록 단순화 된보기입니다 하지만 그것은 그리기 명령의 목록입니다 더 일찍부터 우리 여행 카드 중의 1 개를 형성하는 것에 들어간다

우리가 그것을 보았다면 그림자, 둥근 사각형, 이미지, 텍스트 – 그 모든 것들을 자산과 함께 그것을 렌더링하는데 필요한 이미지 데이터, 폰트 데이터 등을 포함한다 우리는 Skia에서 이것을 기본적으로 얻습니다 매우 빠릅니다 실시간 미리보기를 수행 할 수 있기 때문에 이걸 몇 초에 한 번하십시오 그것은 일반적으로 매우 작습니다

그러나이 문제는 우리가 스위치를 확대하려면 여기를 클릭하십시오 그것은 텍스트, 둥근 사각형, 그리고 서클 슬라이더 스위치에 대한 약간의 이미지 그것들이 어떤 관점에서 왔는지는 모른다 그들은 명령을 내리는 것입니다 그리기 명령을 그룹화하는 방법이 필요했습니다

그들이 어떤 시각에서 왔는지에 따라 우리는 렌더링 노트 API를 보았습니다 두보기의 기초가되는 조직 트리입니다 그리고 drawables– 우리는 각각의 렌더링 노트에 고유 한 ID를 추가했습니다 그런 다음이 고유 한 ID를보기에 노출 시켰습니다

Skia 그림 자체에 주석을 달았습니다 여기서 각 렌더 노드는 그리기를 시작하고 멈 춥니 다 스튜디오 측에서 보기가 시작된 위치와 중단 된 위치를 확인하고 연결할 수 있습니다 이 3 개의 그리기 명령은 다시 스위치보기로 돌아갑니다 또한 우리는 시작과 중지가 있기 때문에, 우리는 멋진 중첩 된 프레임 워크를 가지고 있습니다

HTML – 우리가 볼 수있는 모든 도면 명령이 다시 있습니다 단순화 된이 카드보기를 만드는 데 들어갔다 같이 [? 오랫동안도?] 그들이 시작하고 멈추는 전망, 우리는 중첩을 해봅시다 부동산 검사를 어떻게 수정하는지 조금 이야기 해 봅시다 Joe의 관점에서 일찍 – 모든 것이 게터 이름이나 메소드 이름이었습니다

그건 우리가 반사를 사용했기 때문이었습니다 런타임시 뷰 인스턴스 내부의 속성 반사는 세계에서 가장 빠른 것이 아닙니다 특히 휴대 기기에서 매우 복잡한 앱의 경우 전체보기를 렌더링하는 데 최대 몇 초가 걸릴 수 있습니다 계층

그래서 우리는 다음과 같은 접근 방식을 들여다 보았습니다 모든 것을 직렬화하는 메서드가 있습니다 그것은 조금 부서지기 시작합니다 보기에 새 속성을 추가하면 업데이트되지 않습니다 우리는 주석 처리기에 추가했습니다

그것은 우리가 반사를 유연하게 유지할 수있게 해줍니다 우리를 제공했다 특수 효과를 추가하기 만하면됩니다 새 게터를 추가하면됩니다 사용자 정의에 대해 어떻게 보일지 살펴 보겠습니다

이는 사용자가 누구에게나 관련이 있기 때문에 볼 수 있습니다 곧 라이브러리보기를 빌드하십시오 우리는 컬러보기를했습니다 속성은 색이며 주석을 달았습니다 InspectableProperty

주석 처리기가 보이면 그것으로 우리에게 조금 더 많은 맥락이 생깁니다 우리가 이전에 얻은 것보다 훨씬 낫습니다 그래서 우리는 Kotlin에 있고 @ColorInt 주석을 볼 수 있습니다 정수형뿐만 아니라 우리는이 정수에 색을 채웠다는 것을 압니다 그리고 그것은 단지 수치가 아닙니다

재산의 이름이 있습니다 우리는 속성 ID에 대한 추론을하는 데 사용할 수 있습니다 그것을 부르는 것 물론 우리는 주석에 대한 속성을 사용하여 추론하기 그 자체 그래서이 코드 생성은 어떻게 생겼습니까? 이 객체는 이 견해와 나란히 앉을 것이다

그 중 하나가 어떻게 생겼는지 살펴 보겠습니다 이것은 검사 동반자입니다 그것은 Q를위한 새로운 API입니다 두 가지 목적이 있습니다 하나는 클래스가 주어진 경우의 목록을 정의합니다

여기에 그 클래스에 정의 된 속성이 있습니다 이 경우 색상을 정의했습니다 지도 색상에 대한 호출을 살펴보면, 색깔이기 때문에 거기에 유형이 있습니다 우리는 속성 이름을 가지고 있고 유추했습니다 ID의 속성 R

attr 이것은 또한 우리가 – 추론 된 속성 ID가없는 경우, 또는 당신이 하나를 공급했다면 우리는 그것을 거기에 넣을 것입니다 내가보기에 Studio를 가르치면, 여기에 내가 가지고있는 속성이 있습니다 여기에 그들의 속성 ID가 무엇인지, 이것은 우리가 그 부분을 가능하게합니다 코드 완성 기능으로 이동하십시오

다음 단계는 실제로 우리가 보기의 인스턴스가 있으면 속성을 읽고 싶습니다 다시 말하지만, 우리의 견해가 Kotlin에서 정의되고 자바를 사용하고 있기 때문에 – 이것이 생성 된 코드이기 때문에 – 우리는 viewgetColor를 호출한다 직접 호출한다 getter에게 반사가 필요 없습니다

매우 빠릅니다 이를 통해 뷰 계층의 실시간 업데이트를 수행 할 수 있습니다 Studio에서는 우리가 가지고 있지 않기 때문에 우리가 전에했던 모든 추가적인 오버 헤드 우리를 얻는 모든 것이 현재의 가치에 달려 있습니다 우리가 말할 수있는 것은 여기에 우리가 가지고있는이 사랑스러운 푸른 색 텍스트 색입니다

우리는 그것이 무엇인지에 관계없이 말할 수 있습니다 그것이 런타임에 설정되었는지 여부 viewsetColor를 호출했을 수도 있습니다 또는 자원에 설정되어있는 경우

그러나 대부분의 속성 값은 자원에서 설정되며, 그래서 우리는 그 사건을 돕고 싶었습니다 우리는이 경우에, 그것은 위젯에 정의되어 있습니다 리소스에 API를 추가하여, 나는이 가치를 얻었다 그게 어디서 왔는지 말해줘 Google은 해당 데이터를 추적하여 전체 리소스를 통해 저장합니다

뼈대 또한, 우리는 통찰력을 얻고 싶었습니다 스타일이 어떻게 영향을 미치는지 그래서 자원 프레임 워크가 해결 될 때 속성 값 – 어떤 스타일을 적용할지 결정해야합니다 의사 결정 트리를 가져 와서 API를 추가하여이를 나타냅니다

근본적으로 고려 된 스타일 목록입니다 그러나 결국 사용되거나 사용되지 않을 수 있습니다 해당 속성 값을 해석하는 동안 이 모든 문제는 일시적인 현상입니다 왜냐하면보기, 일단 팽창되면, 그들은 그들의 관계를 잊는다 리소스

일단 그들이 건설되면, 그들은 그들이 어디에서 온 것인지 기억하지 못한다 개발자 옵션을 추가했습니다 속성 ID의 맵과, 그들이 왔던 곳, 스타일 해상도는보기의 테마에서 스택됩니다 그래서 스튜디오 – 준비가되었거나 관심이있을 때 재산으로 더 자세히 조사하고 싶어요 돌아와

보기로하고,보기에게 묻는다, 헤이, 어디에서 당신의 속성 값이 왔는지, 그들의 스타일은 무엇입니까? Q가 가진 모든 것을 꽤 많이 감쌌다 바딤과 제롬을 환영하고 싶습니다 우리를 감싸는 무대에 [박수 갈채] VADIM CAEN : 전체 툴 체인에 대해 들었습니다

그리고 집에 돌아갈 때 그것을 사용하기를 바랍니다 레이아웃 편집기로 레이아웃을 작성하고, 우리가 추가 한 새로운 기능 네비게이션 편집기로 네비게이션 만들기, 자원 관리자로 자원 관리, 새로운 레이아웃 검사기로 검사를 수행하십시오 올해 I / O에는 Android Studio 협상이 가득합니다 바로 뒤에 – 원형 극장에서 – 당신은 안드로이드 개발의 새로운 기능을 볼 수 있습니다

Tor 및 [? Ja ?] 그렇다면 당신은 2 단계의 Android 빌드 시스템의 새로운 기능 그것은 다른 쪽 위에있다 그것은 오늘 오후에 시작한다 여기에 빨간 점이 거의 없습니다 Android Studio 팁 및 트릭 제공 선별 된 엔지니어 및 프로젝트 매니저에 의해, 2 단계

마지막으로 내일, ConstraintLayout의 새로운 기능 Nicolas와 John의 모션 레이아웃 우리는 여기서 밖에 질문을 할 것입니다 와 주셔서 대단히 감사합니다 내년에 봐 [음악 재생]

What’s new in Android development tools – Google I/O 2016

-다들 좋은아침 -안녕하세요 오늘 토크에 와주셔서 감사합니다 Android 개발 툴의 바뀐 모습을 알아보는 자리인데요

전 세계의 개발자 분들이 와주셔서 정말 즐겁습니다 게다가 이런 큰 자리에서요 정말 기대조차 못한 멋진 일이라고 말씀드리고 싶습니다 Steph Cuthbertson입니다 오늘은 Tor Norbye하고 Jamal Eason와 함께인데요

Android Studio 내부를 구경해 보기로 하죠 이미 내부 관계자나 마찬가지이신 분들 올해는 Zav가 스테이지에 안나왔죠? 전 그냥 대타입니다, 대타 하와이 해변에 늘어졌대요 좋냐, Zav 처음 Android Studio 개발을 시작할 때 우리가 쓰는 언어에 중점을 둔 IDE가 목표였다는 건 아시죠 그래서 Android 플랫폼 네이티브인 IntelliJ를 선택했습니다

이번 Android Studio는 단기간에 엄청난 노력이 들어갔는데요 어제 발표한 내용 중 하나는 이제 탑 125 앱의 92%가 Android Studio를 쓴답니다 3년 전 여기 I/O에서 발표했었는데 데모 시연을 한 게 Tor였는데 기억하시나요 프리뷰 베타하고 안정판 합쳐서 릴리즈가 131개나 됩니다 이젠 그게 저희의 성공 요소이기도 합니다 아주 활발하고 열정적인 개발자 커뮤니티요 초기 빌드를 직접 써보시고 피드백을 항상 잘 해주시니까요

그래서 팀도 집중할 수 있고 진척도 빠릅니다 작년엔 뭘 다르게 해야 생산성도 올라가고 삶이 편해질까 곰곰이 생각해봤는데요 아직 Android Studio를 잘 모르시는 분들을 위해 2016하고 그 전까지의 개발 상황을 60초만에 안내해드리죠 그럼 다들 아시는 게 비슷해질 거고 그 다음에 22하고 그 이후의 미래에 대해 얘기해봅시다

그러니까 올해 이미 20을 발표했지요 Instant Run하고 에뮬레이터로 속도에 포커스를 맞춘 버전이었습니다 새로운 에뮬레이터 UI도 나왔고요 GPU 디버거 프리뷰요

검색에서 딥 링크 생성 테스팅 등등등 그리고 그 조금 후에는 21 N하고 동시에 개발했습니다 그런고로 N의 기능과 API가 다 지원되지요 에뮬레이터로 N을 경험해 보실 수 있어요

Jack 컴파일러로 Java 8 지원을 확인하실 수 있고 21에서는 Instant Run의 속도를 높였습니다 dex 스텝을 프로세스 중에 실행되도록 옮긴 결과인데요 속도가 엄청 올랐죠? 이걸 기반으로 나온 게 22입니다 속도, 스마트 기기, 그리고 Android 플랫폼 지원에 중점을 맞추었죠 여기 I/O가 좋은 점이 청중이 다 개발자분들이시라는 겁니다 그래서 오늘 토크의 처음 25분은 2

2 프리뷰의 거의 모든 기능을 라이브로 시연해볼겁니다 나중에 직접 써보시고요 여기서 기억하실 건 이건 프리뷰 빌드니까 기대치도 프리뷰 퀄리티로 맞춰주세요 그다음엔 저희가 항상 하는 일을 할겁니다 다음 몇 주 동안에 안정화 작업을 하는거죠

항상 그러듯이, 베타하고 안정판을 내면서요 그다음엔 저하고 Jamal이 다시 가지고 돌아와서 디자인, 개발, 제작, 테스팅까지 스크린샷까지 찍어서 단계적으로 보여드리겠습니다 그다음엔 개발 비화 각 기능이 왜, 어떻게 개발되었나 보여드리지요 그렇게 22를 소개해드릴 Tor Norbye를 박수로 맞이해주시기 바랍니다

감사합니다 알겠습니다 다들 화면 보이세요 데모 좋습니다 데모 기기는요? 고마워요

그럼 좀 작고 간단한 것부터 시작하죠 마음에 꼭 드실 거라 생각합니다 어제 SDK 콤포넌트를 많이 발표했는데 Android Studio 22를 이렇게 인스톨하시면 이젠 배경에 버튼이 생겼습니다 최신 기능을 인스톨하시면서도 코딩을 계속 하실 수 있습니다 작년 한 해 동안은 속도 향상에 중점을 두었습니다

다들 그게 가장 중요하실 것 같아서요 현재의 Instant Run을 보여드리겠습니다 이 오른쪽이 I/O 앱입니다 여기 코드를 주석 처리하고 실행하면 그렇게 변경하니까 대충 1초도 안걸려서 디바이스에 변경된 버전이 실행됩니다 Instant Run없이는 15초쯤 걸리겠군요 서로 안 맞는 쪽으로 변화를 줘도 예를 들어 이걸 메소드로 만들면 그래도 1, 2초밖에 안 걸립니다

데모 이후에 Steph가 Instant Run in 22하고 23에 대해서 이야기할겁니다 Instant Run 작업중에 해야했던 것이 APK 내부 구조를 파악하는 것이었습니다 그래서 그 용도로 만든게 APK Analyzer

이젠 제 프로젝트의 APK나 다른 APK도 열 수 있습니다 파일 내부 상황을 파악할 수 있지요 그래서 예를 들자면 assets 나 res 폴더를 볼수있고 이 경우에는 Instant Run이군요 이렇게 앱을 부분별로 리패키징하는 겁니다 실제 앱을 써보기로 하겠습니다

Chrome APK입니다 이 툴의 기능은 두어 가지 있는데 첫째는 다운로드 사이즈를 보는 겁니다 이게 아주 중요한 마켓도 있지요 다운로드 사이즈도 인스톨 사이즈도 최소로 이건 앱에 뭐가 들어 있는지를 보여주고 삭제해도 되는지 정할 수 있게 해줍니다 Assets 폴더 내부 파일을 볼까요

레이아웃 폴더도 보이고 바이너리 XML을 소스 코드로 디컴파일도 할 수 있습니다 리소스 레퍼런스는 아직 손볼 게 많군요 이걸 다시 리소스 이름하고 매칭시켜줄겁니다 각 값 테이블도 보실 수 있습니다 이전엔 보기 좀 힘든 파일이었죠 이젠 뷰어가 있으므로 그냥 들어가서 뭐가 있나 보시면 됩니다

그리고 또 하나 중요한게아 하나 더, 이걸로 dex 파일을 열 수 있습니다 64k 메소드 한계는 아마 다 아실겁니다

사실 메소드 한계가 아니라 메소드+레퍼런스 한계입니다만 이젠 뭘 선언해줬나 보실 수 있습니다 그리고 뭘 참조하고있는지 64k가 안되게 하거나 multidex를 켤 수 있습니다 빌드 아웃풋의 manifest 파일을 보신 적이 있으시다면 분명히 쓴 적 없는 게 많이 보이지요? 그렇죠? 어디서 나왔을까요 22에는 manifest 에디터가 새로 생겼습니다

XML 탭인데요, 여기 아래쪽에 Merged Manifest 탭이 생겼습니다 이걸 누르면 보시다시피 전체 manifest가 나오죠 코드가 변경될 때마다 업데이트 됩니다 여기 오른쪽에는 설명문 각자 어디서 생겨나나 보여주죠 예를 들어 인터넷 허가 Play 서비스에서 오는군요 여기 들어가서 병합하는 줄을 찾아봅니다 Gradle의 manifest 합병 프로세스의 미스테리를 푸셨으면 좋겠군요

미스테리라고 하면 프로젝트를 설정하시기 위해 빌드 파일을 편집하시는 건 이상하지요 그래서 프로젝트 구조 대화상자를 아예 다시 쓰는 중입니다 -중이라고 하는 건 아직 의존성 부분밖에 못해서요 뭐 따져보자면 그게 가장 힘든 부분이지만 새 PSD에서 가장 좋아하는 부분은 메시지 패널입니다 IDE가 추천하는 걸 보여주는 건데요

여기 보시는 대로 제 프로젝트는 jCenter에 의존하는데 이거 새거 나왔는데 하고 알려주는거죠 그럼 제가 여기 업데이트 링크를 누르면 이제 최신 버전을 사용중입니다 Update All 눌러서 다 할수도 있고요 이건 Lint가 하던 것처럼 로컬 저장소만 보는 게 아니라 원격 저장소도 찾아봅니다 의존성 뷰로 바꾸면 의존성 소프트웨어를 볼 수 있지요 모듈별로도 아니면 프로젝트 전체로도요 볼 수 있는 것의 예를 들어보죠 그때 그때 사용되는 의존성 소프트, 프로젝트에서 어떤 의존성 소프트를 어떻게 쓰나

의존성 소프트를 추가해줄 수도 있습니다 이제 검색도 할 수 있는 멋진 UI가 생겼습니다 업데이트 추천처럼 얘도 원격 저장소를 봅니다 로컬 저장소도 보고요 가능한 버전을 다 보여주고 의존성 리스트의 범위 스트링도 조정하게 해 줍니다

여기 experimental 설정에 있습니다 갖고 노시려면요 다음 두세 번 릴리즈 중에 구현 완료할 생각입니다 다음 볼 부분은 C++입니다 작년에 편집 지원이 얼마나 잘 되나 보여드렸었는데요 이번에 통합한 JetBrains의 Sea-lion C++ 기능입니다

아직 실험중인 Gradle 플러그인이 필요합니다만 22에서 획기적인 뉴스는 외부 빌드 시스템 지원을 추가했습니다 네이티브 코드를 짜는데 CMake를 쓸 수 있습니다 안정판 플러그인을 쓰면 이렇게 선언해줍니다 그럼 C++를 쓰실 수 있습니다

C++ 관련해서, 곧 마법사 하나 추가할 예정입니다 프로젝트에 C++ 지원을 추가하기 아주 쉬워지는거죠 그러면 샘플 프로젝트가 하나 생깁니다 이거하고 똑같이 생겼어요 그럼 메인에서 네이티브 라이브러리를 로드하고 샘플 라이브러리로 "hello world"가 있습니다 이걸 써보죠 먼저 여기 C++ 코드에 브레이크 포인트를 설정해주고 여기 메인은 그냥 디폴트 레이아웃을 보여줍니다 중간에 한 줄 있군요

이 문자열을 바꿔서 C++의 값을 보여주게 할까요 그럼 TextView textView = findViewById 그리고 아까 그 ID를 씁니다 그렇게 해주고 setText 메소드 호출 C++ 쪽에서의 호출이죠 여기에도 브레이크 포인트 이젠 디버거를 쓸겁니다 이게 Gradle을 실행하면 CMake도 실행되고 빌드 되고 패키지 만들어지고 한 1초만에 앱이 에뮬레이터에서 실행되고 있을겁니다 됐군요 브레이크포인트 Java 부분입니다

이제 마음놓고 manifest를 보시면 실수, activity 현황이요 여기서 디버거를 다시 보면 우리가 이제 C++ 영역에 있군요 여기저기 쑤셔봅시다 하이브리드 디버거와 CMake 지원 클래스였습니다 마지막으로 보여드릴 건 빌드 시스템 영역 커맨드 라인에서 갑니다 직장 동료한테서 프로젝트가 왔다고 치죠 아니면 Git poll했더니 새 빌드 툴 버전이 나왔던가 아니면 컴파일된 프로젝트의 SDK버전이라던가 빌드하시면 이런 메시지가 뜹니다 2201 빌드 툴이 없답니다 그럼? SDK Manager로 가서 인스톨하셨죠? 2

2 알파는 experimental 플래그를 포함합니다 그리고 빌드를 실행하면 아 라이센스는 동의했고 보시다시피 Gradle이 알아서 다운로드해줘요 그래서 이제는 프로젝트에 서버를 끼워넣는 게 훨씬 더 쉬워졌죠 커맨드 라인은 좀 극단적이고 비쥬얼 에디터로 가봅시다 Layout Editor가 새로 바뀌었죠 아 Layout Editor라고 하면 안되지 레이아웃만 하는 게 아니거든요 일단 메뉴 파일을 열고 여기 있군요 디자인 메뉴를 드래그&드롭 해주고 설정 파일도 드래그&드롭

그리고 보시는 대로 Component Inspector 이거 정말 멋지게 잘되었어요 물론 레이아웃이 큰 비중을 차지하니까 오른쪽에는 새 Component Inspector, 지금 선택된 컴포넌트의 주요 속성을 보여드립니다 지금은 TextView군요 TextView 예를 들자면 텍스트 모습을 보여드리죠 Component Inspector에 회색 글자가 있지요? 아직 텍스트 모습을 안 정했는데? 이게 런타임 실제 모습인겁니다 그럼 예로 들어 폰트 크기는 14 SP 다른 걸로 변경하면 그 사이즈를 계산해 줍니다 여기에는 속성이 일부밖에 나와있지 않아요 찾기 쉽게요

다른, 전체 속성을 찾으시려면 여기 위에 클릭 한 번만 더하시면 됩니다 디자인에는 청사진 모드가 있고요 청사진 모드는 기본적인 뼈대만 보여드리는 겁니다 앱의 x-레이 사진 같은거죠 청사진 모드하고 디자인 모드를 옆에 나란히 둘 수도 있습니다 이거는 주문하신대로 스크롤 뷰입니다 이젠 디자인을 바로 스크롤하실 수 있지요

청사진 모드는 constraint 레이아웃 쓰실 때 좋습니다 constraint 레이아웃을 보기로 할까요 일단 auto connect 모드를 끄고 컴포넌트를 좀 끌어올까요 여기에 텍스트 뷰를 놓고 텍스트 에디터에 텍스트 뷰도 하나 더 암호도 하나 더 오른쪽 아래에 버튼도 좀 추가하고 작업하는 꼴이 좀 엉망이지만 뭐 선택해서 제대로 할 수 있거든요 우클릭하고 이 아래에 있는 거 정렬하기 얘네 다 왼쪽에 정렬할래요 수직으로도 맞춰버릴까 그러면 디자인은 완성이고 이걸 랜드스케이프 모드로 눕히면? 안되겠네요 버튼이 화면 밖으로 나가니까 이거 고쳐보죠 여기 작은 전구 아이콘이 있는데 constraint를 파악하는 겁니다 이거 클릭하면 어떻게 되는지 잘 보세요 constraint가 이렇게 되있군요 우리가 원하는 게 뭔지 예상해 본 겁니다

이제 이걸 리사이즈하면 이젠 버튼도 잘 움직이는군요 보통은 Auto connect 모드니까 여기에 버튼을 드래그하면 이걸 드롭하는 순간 바로 constraint가 자동으로 추가됩니다 물론 마음에 안들면 클릭해서 지울수도 있고요 새로 끌어올 수도 있습니다 이건 프리뷰 비스무리한 겁니다 이걸 쓰시면 어떤 게 된다 하고요

그리고 constraint에도 장점이 있는데요 드래그 중에, 보이시죠? 자동으로 1/4나 설정한 %로 가서 붙습니다 어제 어느 분이 이거 XML 에디팅에서도 되냐고 물어보셨는데, 물론 됩니다 보시면 지금 XML입니다 이쪽의 constraint를 건드리고 놀 수도 있고 XML 에디팅도 잘 되는군요 그러니까 이건 아주- 감사합니다 그러니까 아주 편한 constraint 툴인데요

이걸로 레이아웃 hierarchy를 줄일 수도 있고 아시다시피 최적화에 아주 중요하죠 그래서 그걸 도와드릴 기능도 있습니다 이 레이아웃을 볼까요 보시기 편하게 청사진 모드로 바꿔서 이 레이아웃은 실제로는 nested 리니어 레이아웃의 집합인데 이 리니어 레이아웃을 constrint 레이아웃으로 바꾸게 명령한다면 구조를 단순화하면 어떻겠냐고 하네요 그럼 보시는대로 화면은 똑같지만 constraint입니다 왼쪽 리스트는 많이 단순화됐고요

네 그럼 에디팅을 볼까요 에디팅 부분에도 기능을 좀 추가했습니다 첫째, Firebase가 통합되었습니다 이제 Firebase로 작업하시려면 크래쉬 리포팅을 추가한다던가 해서 그럼 여기 도우미 창을 더 열고 원하시는 걸 선택하고 크래쉬 리포팅은 이거요 그럼 여기 소스 에디터 옆에 지시문이 나와서 그것만 따라하시면 됩니다 그리고 예를 들어 이 라인들을 실행하고 싶다 그러면 소스 코드로 불러오시면 에디팅이 됩니다 어떤 API의 사용법을 알고 싶으시다거나 하시면요 Job Scheduler를 포함해야된다 하면 네 Job Scheduler는 포함하셔야합니다 우클릭하면 자동으로 샘플 코드가 찾아지는 겁니다 보시는대로 얘가 서버에 가서 추천된 코드를 가져오는 거죠 서보시라고

우클릭해서 브라우저 새 창에 열고 더 자세히 보실 수도 있습니다 22는 IntelliJ 161 기반입니다 당연히 그 쪽 관련해서 새 기능도 많은데요 그 중 하나는 양방향 문자열의 에디팅 지원입니다

저희 국제 수요층 분들이 요청하시던 기능인데요 아랍어 텍스트입니다 보시는대로 소스 에디터가 이제는 이걸 정확하게 다룹니다 요게 그동안 골칫거리였는데 이젠 잘 됩니다 IntelliJ 고마워요 IntelliJ 16에서는 에디터의 검사기능이 많이 추가되었는데요

덤으로 저희 쪽에서도 추가한 게 있습니다 Android 전용으로요 좀 볼까요 뭐 데이터를 넘겨줄 때 필드를 정적으로 하는 건 아주, 매우, 정말로 안 좋은 거라는 거 다들 아실겁니다 절대 안돼요

이제는 Lint가 잡아내 줍니다 그게 누수 요인이기도 하지만 그래야 Instant Run이 좋아하거든요 지금 예로 든 것만큼 간단하지는 않은 건데 여기 필드를 정적으로 하고 app data 1은 문제가 없지만 app data 2 이후로는 context로 인스턴스가 있는데 그걸 포인팅하는 정적 참조문이 있습니다 그럼 안돼죠 그럼 여기 지원 주석을 봅시다 어제 발표한 지원 라이브러리인데 새 기능이 몇 있죠

먼저 이 메소드, 이젠 드디어 야 이 메소드 워커 스레드 클래스 안에 있는데도 스레드-세이프인데? 라고 하실 수 있습니다 아무 스레드에서나 부르실 수 있습니다 전에 있던 API 체크는 Lint가 플랫폼 API를 메인 SDK에 비교하는 형식이었는데요 이것도 픽스가 있는데 뭐, 체크 넣어줘 하는거죠 하지만 이제는- 아 죄송 이제는 제 메소드가 이 API를 요구할 거라 얘상하고 API에서 부르는 책임을 넘겨주는겁니다

라이브러리 API 체크를 클라이언트로 보내고 그럼 이 호출들이 제 API를 부르고 있지만 API체크가 적용됩니다 이 다음은 dimension 리소스- dimension annotation입니다 그러니까 이 정수가 하나의 dimension인데요 적용하실 수 있는 유닛이 많지요 여기서, 픽셀이 아주 중요합니다 SDK의 대다수의 API는 픽셀 space에서 작동합니다

그래서 픽셀 annotation을 따로 만들었는데요 @Px입니다 이걸 하면 잘못 사용된 부분에 다 플래그가 뜨죠 dimension이어야할 리소스를 넘겨주는 부분이요 도움이 되면 좋겠네요 마지막 또 중요한 annotation이 keep annotation입니다 메소드하고 클래스에 @Keep을 쓰실 수 있는데요 그리고- Gradle 플러그인 2

2 ㅣ점에서는 ProGuard나 새 Incremental Shrinker를 쓰시면 릴리즈하실 때 자동으로 제거되지 않습니다 support annotation이 마음에 드신다면 더 유용하게 만들 수 있을 기능이 있습니다 새 추론기능입니다 한동안 IntelliJ에 분석 기능이 있었는데요 null인지 추론하는 것이었습니다 아직 flag 기능이지만 써보시려면 support annotation 추론기능입니다

그래서 이걸 현재 파일에 쓰면 분석을 몇 돌려서 프로젝트에 사용중인 annotations를 알아내실 수 있습니다 그래서 파일을 다시 보면 이런 div 마커가 다 이렇게 알아낸 adaptation입니다 예를 들어 여기 퍼미션이 요구되는데 annotations를 시작하고 Lint가 코드의 버그를 찾게 해줄겁니다, 아마도요 오레곤 주립대의 연구팀과 협업해서 퍼미션 관련 작업중입니다 그래서 이건 아직 WIP인데요 이게 다 되면 앱이 Android 쪽 퍼미션으로 옮겨갑니다

여기서 이 액션을 invoke하면 리퀘스트가 들어가서 Android 쪽 퍼미션의 callback을 처리하는 겁니다 사용되지 않은 리소스는 없애도록 리팩토링도 했습니다 그러니까 실제로는 사용되지 않을 리소스를 추가하면 Refactoring에 가서 Remove unused resources하면 IDE가 그런 리소스를 찾아서 없애 줍니다 앱이 좀 더 가벼워지죠 네 마지막으로 소개할 건 Espresso Test Recorder인데요 객석에서 벌써 탄성이 들려오네요, 네에 그럼 프로젝트 창에서 Run 메뉴에서 Record Espresso test

Espresso입니다 Ex-presso아닙니다 그래서 그걸 하면 보시는 대로 앱 빌드를 시작하고 왼쪽에 이벤트 레코더를 시작합니다 오른쪽에는 앱이 실행중이지요 그래서, 예를 들어, 여기 카테고리를 클릭하면 보시는 바와 같이 이벤트가 기록됩니다 Back 버튼을 눌러서 돌아가고 좀 아래로 가서 음악 타일을 눌러봅시다

제가 누르는 대로 여기에 기록되고있지요 그게 뭔지 이해하려고 노력하는겁니다 예를 들어 여기 빨간 버튼을 누르면 제가 FAB quiz 버튼을 눌렀다고 기록이 됩니다 그래서 레코딩하면서 또 할 수 있는게 assertion 추가입니다 여기 Add Assertion 버튼을 누릅니다 그러면 스크린샷하고 뷰 hierarchy를 받아서 앱 내부 구조를 알 수 있습니다

보시다시피 앱의 내부 논리 구조에서 옮겨다닐 수 있지요 그리고 예를 들어 이 질문 Who was the youngest Beatle? 이걸 클릭하면 그걸 받아서 assertion을 제안합니다 그러니까, 어, 이 시점에서 테스트가 실행중이면, 이 문자열이 Who was the youngest Beatle? 이어야 한다는 거지요 그럼 Save Assertion을 누르고 계속합니다 그래서 혹시 누구- 여기서 정답 전까지 오답 좀 누를 겁니다 아셨죠? 틀렸네요

틀렸대요 정답은 조지였습니다 ok, 그럼 이젠 Submit 버튼을 눌러보죠 저게 정답이었다고 보이시죠? 테스트 레코딩은 이걸로 충분한거같고 Complete Recording 시작합니다 이걸 누르면 테스트 결과를 어떤 클래스로 저장할지 묻는데 디폴트값으로 하겠습니다

여기 Espresso Test인데요 처음에 오답 클릭한 거 보이시죠? 테스트 편집도 가능합니다 그러니까 예를 들어 오답 타일 클릭한거 없애고 다시 가서 테스트를 다시 하고 해볼까요 여기 Run 버튼을 누르기만 하면 됩니다 클라우드 테스트도 가능하지요 지금 보여드릴 시간은 없지만 등록해보세요 서로 다른 폼 팩터 여럿을 가지고 UI 테스트를 실행합니다 꽤 유용하죠

그럼 이걸 에뮬레이터에 다시 돌려서 테스트를 빌드하고 실행하고 여기 오른쪽 앱 실행창을 봐주세요 저보다 클릭이 빠릅니다 APK 인스톨, 완료, 클릭, 클릭, 클릭 그리고 녹색 패스 감사합니다 그럼 여기까지 하고 다시 Jamal한테 넘기겠습니다 비쥬얼 에디터에 대해 이야기 해줄 겁니다 Thanks Tor, 좋은 데모였습니다 Tor이 저희가 하는 일을 보여드렸고 저는 저희가 왜 그걸 하는지 그리고 왜 개발자분들이 개발 workflow에 통합하셔야할지 설명해보겠습니다 디자인 측면에서 메인 토픽이 두가진데 XML 하고 레이아웃입니다

XML은, 여러분중에 전체 UI를 XML로 디자인하시는 분도 계시다는거 압니다, 좋은 일입니다 하지만 저한테는, 다른 많은 분들한테도 비쥬얼라이징 툴이 있어서 앱이 어떻게 보일지 알 수 있는 편이 좋습니다 그래서 저희 팀 스스로 목표를 세웠죠 XML 에디팅이 필요없는 툴을 만들 수 있을까 하고요 물론 이후에 코드를 리뷰하실 수 있지만 기본 문제가 되어서는 안됩니다 그게 새로 나온 레이아웃 에디터의 기본 이념입니다 Tor가 보여드렸듯이 새 기능이 많은데 위젯을 컴포넌트 트리로 드래그한다던가 디자인 위로요 또 청사진 모드 앱 뒷면에서 위젯이 상호작용하는걸 보실 수 있지요 그리고 새 속성 패널 전에는 뷰에 사용 가능한 모든 속성을 보여드렸는데 이제는 저희가 엄선해서 현재 뷰 레이아웃에 보아서 가장 어울리는 속성만을 골라 보여드립니다

저희가 또 자문해본게 레이아웃 관련인데요 Android 레이아웃 옵션이 몇 가지있는데 linear 레이아웃이 있고 horizontal and linear가 있지요 하지만, 경우에 따라서는 프레임이나 테이블 레이아웃이 필요한데 그건 안되네요? grid 또는 relative 레이아웃은요 그래서 그 둘중 어느걸 써야하죠? 저희가 풀려는 문제가 그겁니다 레이아웃에 어떤 컨테이너를 쓸지 자주 고민하시게 될 테니까요 이 경우 해답은 constraint 레이아웃입니다

컨테이너 고민은 하실 필요 없이 컨텐츠하고 레이아웃 상의 위젯 배열에 집중하실 수 있습니다 그래서 constraint 레이아웃의 장점을 알아보죠 첫째 UI 개발이 빠릅니다 데모에서 보셨듯이 위젯을 가볍게 추가하고 여러 contraint도 연결 가능합니다 또 중요한 것은 이걸로 더 반응성 좋은 디자인이 가능하다는 것입니다

그러니까, 내 앱 스크린이 Nexus 4나 타블렛이나 다른 Nexus 기기에 어떻게 보이냐를 생각하기보다 이제는 constraint를 추가해서 컨텐츠가 화면 사이즈에 자동으로 반응하게 합니다 셋째 최적화가 중요합니다 데모에서 보셨듯이 hierarchy를 대신 해드릴 수 있습니다 이미 아실 것 같지만 linear하고 relative 밑에 relative를 또 하시면 Android OS의 처리 속도가 실제로는 더 느려집니다 그러니까 nesting의 경우 constraint 레이아웃으로 간소화시켜줄수 있습니다

그리고 마지막으로 하위호환이 됩니다 그러니까 새 프로젝트에 쓰실 수 있고 지원 라이브러리라 기존 프로젝트에도 사용하실 수 있습니다 이자인 관련 보여드린 세번째 툴이 Layout Inspector입니다 가끔 앱 로딩하실때 생각하신적 있죠 왜 내 뷰가 오버랩하나 아니면, 속성 중 하나가 예상과는 다른 값인데? 그런거요 그래서 저희 툴을 쓰시면 우클릭으로 현재 레이아웃의 스샷을 찍으셔서 모든 속성을 직접 살펴보실 수 있고 전체 뷰 hierarchy도 보실 수 있습니다

디버깅에 큰 도움이 되겠지요 이제 개발에 관해 또 개발 편의를 위해 저희가 어떤 툴을 만들었나 잠시 토크 타임을 가지겠습니다 데모에서 보여드렸듯이 새로 Firebase 플러그인이 나왔는데요 어제 Google I/O에서 출시한 Firebase 서비스를 지원합니다 Google Analytics, Ads, 클라우드 메시징, 전부 Android Studio 20 내에서 원클릭으로 사용 가능합니다

Samples 브라우저도 좋은데요 보여드렸다시피 API 사용례를 찾으신다면 이제 Google Samples를 버튼 원클릭으로 보실 수 있습니다 이제 앱 개발의 스타팅 포인트를 찾기가 좀 더 쉬워지실겁니다 그러면 이젠 빌드 툴에 대해 이야기할 차례고 그건 Steph가 해 주겠습니다 수고하셨습니다, Jamal 빌드에 관해서는 Instant Run으로 시작하죠

개발자로서 가장 좋을 대는 다음 단계로 계속 나아가는, 플로우를 타는 거고 저희의 목표 중 하나는 Android 개발을 웹 개발만큼이나 가볍게 만드는 것입니다 그래서 코드를 변경하시고 그걸 리프레시해서 보시고 코딩의 플로우를 잃지 않지요 그래서 Instant Run을 만든 겁니다 그래서 그 작동법을 좀 이야기하자면 하나를 변경하시면 IDE는 그걸 이렇게 스왑합니다 점증적인 변경이라면 가장 빠른 스왑이 가능한데 hot-swap이라고 부릅니다

여기서 하는것은 처음 빌드 시에 바이트코드를 다 만들고 그 후에 변경을 하시면 변경된 코드를 반영하기 위해 코드 패스를 리다이렉트합니다 두번째는 warm swap인데 액티비티 재시작이 요구되죠 그래서 필요하실때마다 그렇게 합니다 예를 들면, 리소스 체인지요 Cold swap은 앱 자체의 재시작이 요구됩니다 구조적인 변경이 있을 시에 필요합니다 상속에 변경이 있던가 메소드의 signature를 바꾸시는 경우 등이 그렇지요

여기서 이야기를 조금 뒤로 돌려 어제 키노트에서 이야기했던 벤치마크에 대해서 말씀드리겠습니다 벤치마크 테스트는 다양한 앱과 툴로 이루어집니다 여기서 다 얘기할 생각은 없고 예 하나만 들지요 위키피디아 앱으로도 테스트를 합니다 오픈 소스 앱이라 GitHub에 있습니다

그리고 그냥 재미로 보시라고 저희 규준도 써놨습니다 보시다시피 Instant Run 비활용 상태에서 20하고 비교했는데 cold swap을 쓰면 21이 47배 빠르고 hot-swap을 쓸 경우 10

7배 빠릅니다 그 의미는, 잘 생각해보시면 빌드가 10배 넘게 빠르다는 것입니다 20과 비교하는건데 20은 1

5보다 빠르지요 dex 구조를 변경해서요 ADB push 속도도 10배 빨라졌습니다 그래서 따지고보면 좀 저평가된건데 뭐 저희 제일 목표는 개발자분들이 한층 빠른 빌드를 가능하게 하는 거니까요 그래서 거기 집중해서 저희 벤치마크에서 apples to apples 비교가 가능합니다 저희가 하는 다른 벤치마크 테스트가 참여하시는 유저분들의 통계를 봅니다

그리고 서로 다른 방식을 구현합니다 참여하시는 분들 감사합니다 저희가 보는 통계 샘플인데요 hot swap을 쓰는 Instant Run의 평균 빌드 타임입니다 전 유저층을 나타내므로 전세계, 모든 OS 각국, 모든 하드웨어 등을 포함합니다 아주 오래되고 느린 프로세서를 가진 하드웨어나 그 비슷한 것도요

지금 보시는 것은 대부분의 유저들의 hot-swap은 4,5초나 그 미만입니다 항상 저희 목표는 그래프 시프트입니다 최대한 많은 게 1초 내에 이루어지도록 하고 있습니다 그러니까 저희가 원하는 것은 풀 빌드 시간을 낮추기 hot-swaps의 속도 향상 최대한 많은 스왑을 hot swap으로 그런 게 목표입니다 hot swap, warm swap cold swap의 분포도와 풀 빌드 타임, 그리고 cold swap이 요구되는 요인을 봤습니다

이걸 보면 결국 개발자분들의 데이터이죠 22에서 가장 큰 변경점이 이 덕택에 이루어졌습니다 22는 AAPT로의 체인지를 포함합니다 아시다시피 리소스를 변경할 때 AAPT가 엔드 ID를 manifest에 집어넣습니다

아마도 모르셨겠고 일단 저희는 몰랐던 점은 리소스를 변경하거나 새로 추가하면 AAPT가 이 ID의 숫자를 다시 매깁니다 그래서 결과가 뭐냐면 코드 변경을 하셔도 cold swap을 하게 됩니다 이게 cold swap의 16~19%를 차지하는 요인이었습니다 그래서 22에서는 AAPT에 변경이 이루어져 리소스 ID가 항상 동일합니다

그냥 22 Instant Run이 빨라졌다 수준이 아닌 더 자세한 인사이더 뷰를 보여드렸습니다 hot swap 빈도가 늘어난 걸 보실 테니까요 그리고 또다른 변경점이 Split APK의 이점을 사용한 것인데요 지금은 빌드 시에 앱이 11~12개의 dex파일로 나누어집니다 풀 빌드를 하시면 실제로는 변경된 코드만 빌드하는겁니다

빌드 타임을 계속 낮출 예정입니다 22만이 아니라 다른 릴리즈에서도요 그러니까 여전히 빌드가 느리다 하면 저희를 찾아오시면 엔지니어링 팀이 감사해할겁니다 그럼 이번에는 프로젝트 구조

Tor가 데모를 잘 해줬는데요 그래서 저는 인사이더 뷰만 드릴겁니다 프로젝트 구조 대화창 밑으로 빌드 모델에 상당히 흥미로운 체인지가 있었는데요 Gradle은 참 유용했죠 아주 융통성 있는 언어고 Android에 좋았습니다 하지만, 생각해보면 IDE는 구조 input을 기대하고 Gradle은 프로그래밍 언어지요 그러니까 꽤 복잡합니다

22의 변경점 중 하나는 Gradle parser를 밑바닥부터 완전히 새로 썼습니다 그러니까 Gradle 파일을 읽어들일 때 훨씬 정확하고 IDE에서 써서 다시 내보낼때도 훨씬 더 정확합니다 그러니까 앞으로 보실 것은 예를 들자면 Gradle 파일에 변수를 쓰실 때 IDE에서도 맞게 읽어들입니다 앞으로 프로젝트 구조 대화창에서도 UI 요소 변경이 가능합니다

22의 Gradle 모델의 변경은 이미 완료되었습니다 Tor가 말했듯이 프로젝트 구조 대화창은 22에서 일부 완료이며 experimental flag에서 실험해보실 수 있습니다 2

3에서 전부 완료할 예정이며 그 시점에서는 디폴트가 되겠지요 Tor가 보여드린 Merged Manifest Viewer의 스크린샷입니다 잠시 이야기를 앞당기죠 Jack이요 Jack컴파일러는 2

1에서 Gradle에 통합되었고 22에서는 annotation 처리기능도 포함합니다 그러니까 이제 클래스 패스에 annotation processor 사용 가능합니다 여기 포함되는게 컴파일의 의존성 소프트웨어 등 그리고 다 자동으로 적용됩니다 자세한 사용법은 저희 문서 사이트에있고 여기 I/O에서 알려드리고 싶은 건 툴을 작성하시고 클래스 파일을 프리- 혹은 포스트-프로세싱하는 분은 Jack의 가장 큰 장점 중 하나가 구조적인 API로 조작이 쉽다는 것입니다

이후 릴리즈에서 차츰 Jack의 비중을 늘려나갈 것입니다 그러니까 실제로 한 번 써보시고 미흡한 점이 있으면 꼭 알려주세요 마지막 토픽은 C++ 지원입니다 이부분은 그냥 저희가 뭘 하는지 전체를 알려드리겠습니다 C++를 처음부터 끝까지 이해할 좋은 방법이라고 생각합니다

저희가 그렇게 많은 투자를 하는 이유는 그래픽이 아주 중요한 앱과 게임을 개발하시는 분이 많아서입니다 그리고 C++은 정말로 중요하다고 저희한테 강조하고 또 강조하셨죠 이미 C++에디팅과 디버깅을 지원합니다 전부 IntelliJ를 통한 것이지요 2016

1의 새로운 점 하나는 IntelliJ의 향상된 C++지원입닏다 22의 가장 큰 변경점은 CMake와 Gradle일겁니다 CMake 예시를 설명드리죠 Gradle파일에서 CMake 프로젝트를 참조할 수 있습니다

이걸로 SO 파일이 빌드되고 APK에 패키징되었습니다 이게 가능한 것은, Gradle이 이제 CMake에도 나갑니다 저희는 CMake가 프로젝트 메타데이터를 더 내보내게 하려고 합니다 어떻게 빌드하는지 프로젝트에 있는 파일 목록 등 Tor가 보여드렸듯이 프로젝트 hierarchy에

cpp 파일이 보이게되고 같은 폴더에 있는 경우 h 파일도 추가됩니다 파일 자체는 프로젝트 hierarchy의 노드로 추가됩니다 외부 빌드 파일 밑에요, 그래서 거기서나 IDE에서 파일을 편집하실 수 있습니다 Tor가 보여드린 것처럼 이제 앱을 실행하시거나 브레이크포인트도 설정하시거나 다 예상하는대로 작동합니다 NDKBuild 셋업도 같습니다

Android mk 파일을 참조하실 수 있지요 C++ 디버거의 개선점도 잠시 소개하고 싶습니다 우선 22에서는 말씀드렸다시피 굳이 C++, Java, 혹은 하이브리드 디버거를 명시해주지 않아도 auto를 쓰면 IDE가 자동으로 맞는 디버거를 선택해드립니다

N에서 디버깅 중이시라면 Java하고C++ 디버거는 일체입니다 그리고 마지막으로 추가한게 watchpoint인데요 변수를 추가하시고 그게 빨간색이거나 변경되었으면 프로세스를 프리즈할 수 있습니다 Watchpoint는 x86과 Nexus 9에서 사용하실 수 있으며 다른 온라인 기기에도 확대할 예정입니다 지금 당장은 체험해보고싶으시다면 에뮬레이터에서 하시면 됩니다

Samsung S5, S6 기기와의 호환성 이슈도 여럿 고쳤습니다 그게 22의 C++에 관한 거 다고 앞으로 나올 릴리즈에서도 계속 개선점을 기대해주세요 마지막으로 이야기할 분야는 테스트입니다 Jamal에게 다시 마이크를 넘깁니다

모두들 감사합니다 그래서 테스트를 할 때 핵심은 로컬 테스트 환경입니다 올해 초 Android 에뮬레이터를 출시하게돼서 정말 흥분됐는데요 아직 안써보신 분이 있다면 정말 좋은 툴입니다 장점은 CPU, GPU, I/O 속도가 다 향상된거라 실제 기기보다도 빠릅니다 ADB 속도도 향상되었습니다 사실 asset을 push하는 와중에 앱하고 생기는 병목 현상의 원인은 ADB입니다

새 Android 에뮬레이터로는 10배 빨라졌습니다 그리고 Tor가 보여드린대로 UI도 바뀌었고요 회전, 스크린샷 찍기 등이 가능합니다 그리고 확장 UI도 있어서 센서를 컨트롤할 수도 있습니다 위치 정보 확인, SMS 메시징, 통화하기 앱 테스트에 필요한 모든 툴이요

로컬 테스트에 더해서 Android Studio 내에서 Firebase Test Lab을 출시하였습니다 Tor 데모에 나온 것처럼 Clouds 탭에서 클라우드에 있는 기기 선택이 가능합니다 그러면 보유하고계시지 않은 기기로도 테스트되고 APK하고 테스트를 보내서 앱 테스트를 합니다 그리고 아까 보여드렸죠, Espresso Test Recorder 좋은 데모인데 이게 왜 중요하냐면요 테스트를 만드는 건 지루할 수도 있는 작업이고 그다지 많은 사람들이 선호하진 않지요

그래서 이제는 기기를 누르시면 테스트 캡쳐가 됩니다 결과물은 Test Lab에 업로드하셔도되고 아니면 로컬 머신에서 실행하셔도 됩니다 마기막으로 APK Analyzer 이거는 왜 중요하냐면 완료라고 생각하시고 빌드해보시면 APK가 너무 큽니다 왜냐하면 결국 나중에가서 유저가 Google Play에서 앱을 다운받을 때는 최소로 작은APK를 원하거든요 이 툴은 APK를 해부합니다 dex와 asset 파일을 보고 뭐가 문제라서 APK가 이렇게 큰가 보는거죠

모든 기능을 이야기할 시간은 없습니다 그래도 새 Lint 분석기능하고 IntelliJ 2016는 말씀드렸고 접근성에 큰 투자를 했고 Android Studio 22에 새로 추가한 기능들입니다 간단하게 다시 말씀드리자면 새 기능이 추가된 부분은 디자인, constraint 레이아웃 매니저와 디자이너 코딩에 도움이 될 Firebase의 통합 향상된 C++지원과 빌드 지원 그리고 테스트를 도와드릴 레코더입니다 어디서 시작하냐고요? Android Studio 2

2을 쓰시려면 업데이트를 체크하시면 canary채널의 Android Studio 22를 받아보시라고 뜰겁니다 그리고 혹시라도 Android Studio가 없으시다면 이 링크로 가셔서 새 걸로 다운받으세요 물론 채널은 canary채널로 변경하셔야 Android Studio 22가 다운받아집니다

끝입니다 대단히 감사합니다 감사합니다

What’s New in Android Design Tools – New Features for Rapid UI Development (Google I/O ’17)

[음악 재생] JOHN HOFORD : 안녕하세요 저는 존 호 포드입니다

그리고 이것은 니콜라스 기수입니다 우리는 모두 ConstraintLayout, Android Studio 디자인 화면 니콜라스가 우리에게 약간의 소개를 해줄거야 모든 것에 니콜라스 로어 : 안녕하세요, 모두들 그래서 우리는 조금 이야기 할 것입니다

일반적으로 Android Studio에 대한 내용과 조금 더 ConstraintLayout에 대해서도 마찬가지입니다 여기서 우리의 목표가 무엇인지에 대한 간단한 요약은, Google 개발자까지 – 우리가 원하는 것은, 정말로, 당신의 삶을 많이 만들고, 훨씬 낫지, 그렇지? 그리고 우리는 당신이 무엇을 듣고 싶습니다 모든 의견, 아이디어, 요청을 말해야합니다 그러나 무엇이든, 우리는 실제로 그것을 조사하고 있습니다 그리고 우리는 빨리 움직이려고 노력합니다

지난 해 I / O에서 우리는 안정적인 버전 Android Studio 22, 23, 우리는 현재 30을 연구 중입니다 그리고 3

0을 테스트 해 보시기 바랍니다 현실에는 많은 개선이 있습니다 태블릿에 세부 사항입니다 특히 현실에 대한 세부 사항 Android Studio의 비주얼 디자이너는 우리의 목표는 비교적 간단합니다 기본적으로 레이아웃을 시각화 할 수 있기를 바랍니다

나도 알아, 비주얼 디자이너라고 우리는 당신이 그 레이아웃을 아주 쉽게 만들 수 있기를 바랍니다 그리고 그것들 모두는 효율적입니다 우리는 이유없이 당신이 당신의 시간을 잃어 버리는 것을 원하지 않습니다 그 메모에, 존? JOHN HOFORD : 좋습니다, 그래서 우리는 단지 당신에게주고 싶습니다

간략한 개요, 디자이너의 땅의 위치 모두가 어떻게 함께하는지에 대한 아이디어를 제공합니다 당신이 할 수있는 일 중 하나는, Darcula Mode에서 – Darcula Mode와 같은 많은 사람들이 확신합니다 그리고 우리는 다른 하나로 돌아갈 수 있습니다 이제 우리는 왼쪽에 팔레트가 있습니다 기본적으로 위젯을 드래그 앤 드롭 할 수있는 곳 귀하의 디자인 표면에

그런 다음 구성 요소 트리를 클릭 한 다음 관리자가옵니다 우리는 나중에 그것에 대해 더 많은 것을 알게 될 것입니다 그런 다음 핵심 디자인 화면과 툴바가 있습니다 우클릭 메뉴도 있습니다 그래서 많은 사람들이 마우스 오른쪽 버튼 클릭 메뉴

개체를 선택하면 해당 개체를 클릭 할 수 있습니다 마우스 오른쪽 버튼을 클릭하면 유용한 작업이 수행됩니다 당신이 선택한 것과 당신이 전환 할 수있는 다른 것은 청사진 모드입니다 한 번에 두 개의 화면으로 전환 할 수도 있습니다

청사진 모드는 일종의 청사진입니다 대략적인 개요, UI의 스케치입니다 디자인 표면은 실제로 안드로이드 에뮬레이터의 일종 인 레이아웃 LIM에서 렌더링됩니다 우리가 할 수있는 일 중 하나 XML 편집기 모드에서 디자이너를 사용하십시오 그래서 XML 편집기에서 Preview를 누르면, 근본적으로 바로 전체 디자인 모드를 얻게됩니다

선택하면 미리 알림이 표시됩니다 XML에서 올바른 요소로 이동합니다 디자인 또는 청사진을 보려면 전환 할 수 있습니다 당신은 또한 그것을 약간 확장 할 수 있습니다 팔레트를 꺼내, 실제로 요소를 바로 드래그 할 수 있습니다 화면에

실제로 하단에 XML이 생성되었음을 알 수 있습니다 사실 XML을 편집하면 이 경우 XML을 삭제합니다 디자인 표면에서 즉시 이동합니다 따라서 양방향으로 실시간 피드백을 얻을 수 있습니다 간단히 말해서

NICOLAS ROARD : 그건 단지 간단한 소개였습니다 당신에게 개념의 일부를 제공하기 위해, 우리가 대화에서 사용할 어휘의 일부 그리고 이미이 UI에 익숙해지고 있기를 바랍니다 그렇지 않은 경우 다시 30 시도해보십시오

ConstraintLayout을 지금 다루겠습니다 ConstraintLayout은 작년에 발표 한 라이브러리입니다 이 방에있는 I / O에서 그리고 일반적인 생각은 뭔가를 제공하는 것입니다 그것은 당신에게 모든 유연성과 힘을줍니다

모든 유형의 레이아웃을 만들 수 있습니다 평평한 레이아웃을 중요하게 강조하고 싶습니다 평평한 레이아웃이있는 경우 – 중첩되지 않음을 의미합니다 그 레이아웃을 생성하기 위해 뷰의 계층 구조 – 많은 장점이 있습니다 자주 반복되는 장점 중 하나는 성능입니다

실제로 중첩 된 레이아웃을 사용하면 [? 코너?] 경우 계산이 폭발적으로 늘어나는 곳 따라서 모든 것이 평평한 경우 실적에서 승리하는 경향이 있습니다 이것이 하나의 이유입니다 내가 생각하는 실제로 더 흥미있는 또 다른 이유는, 당신은 훨씬 더 융통성이 있습니다 콘텐츠를 제한하려면 훨씬 더 좋습니다

내용을 수정하려면 훨씬 더 좋습니다 업그레이드, 수정 등 ConstraintLayout을 사용한 또 다른 큰 일 맞아, 일하는 팀이 같아 ConstraintLayout 및 레이아웃 Android Studio의 편집기 그래서 그것은 처음부터 깊이 통합되어 있습니다

ConstraintLayout에 몇 가지 기능이 있다는 것을 의미합니다 훌륭한 UI 디자이너를 만드는 데 도움이되며 그 반대의 경우도 마찬가지입니다 Studio에 몇 가지 기능이 있습니다 훨씬 더 효율적이고 훨씬 효율적으로 만들 수 있습니다 ConstraintLayout을 사용한 레이아웃

또한 번들되지 않은 라이브러리이기도합니다 언제든지 모든 버전을 푸시 할 수 있음을 의미합니다 사실, 우리는 방금 새 버전을 밀어 넣었습니다 오분 전 기본적으로 모든 기기와 호환됩니다

그래서 10을 재빨리 요약 해보십시오 작년에 우리가 10을 발표했을 때, 우리는 긴 일련의 알파 릴리즈, 베타 릴리즈를했습니다 작년 이래로 기본적으로 17 건이 출시되었습니다

우리가 빨리 움직이고 빨리 반복하려고한다고 말했을 때, 그것이 우리가하는 일입니다 우리는 2 월에 10의 최종 릴리스를 수행했습니다 특히 많은 경우 성능이 향상됩니다 작년 ConstraintLayout을 시도해보십시오

확실히 그것을 줘 새로운 기능에 대해서도 다룰 것입니다 Android Studio의 기본 레이아웃입니다 따라서 새 화면을 만들 때 기본적으로, 우리는 ConstraintLayout을 넣습니다 RelativeLayout을 배치하는 데 사용됩니다

물론 Studio는 매우 유연합니다 그것을 바꾸고 싶다면 그렇게 할 수 있습니다 그러나 우리는 그것이 정말로 훌륭한 레이아웃이라고 믿습니다 을 눌러 화면을 시작하십시오 그게 우리가 당신을 격려하고 싶습니다

그리고 그것들 모두는 정말로 지역 사회의 개입없이 가능했다 기사, 회담, YouTube의 동영상으로 널리 채택 됨 도서관의 또한 새로운 커뮤니티 기반 이번 주에 시작되는 ConstraintLayout 웹 사이트, 너는 그것을 조사해야한다 그래서 10, 기능면에서 우리는 무엇을 가지고 있었습니까? 작년에 무엇을 보여줬습니까? 글쎄요, 그 동안 우리는 무엇을 추가 했습니까? 그래서 우리는 상대적인 포지셔닝을 가지고 있다고 생각했습니다 레이아웃을 설정하여 하나의 버튼 다른 요소에 상대적으로 배치됩니다

부부와 함께 RelativeLayout과 매우 유사합니다 흥미로운 비틀기 센터 포지셔닝도 추가했습니다 따라서 두 대상 사이에 제약 조건을 만드는 경우, 귀하의 요소는 중앙에 배치됩니다 그리고 실제로 수정할 수 있습니다

그것은 중심이 아니라 편견을 적용 할 수 있습니다 그래서 훨씬 더 유연한, 단순히 반응적인 UI가 아닌 정확한 차원의 측면에서 우리는 또한 헬퍼 객체의 개념을 도입했습니다 같은 지침 그리고 가이드 라인을 가진 아이디어는 훨씬 더 자연스러운 방법으로 UI를 만들 수 있습니다

특히 디자인 배경에서 나온 경우, 또는 디자이너와 함께 일하는 경우, 그들은 언제나 자신의 레이아웃을 생각하고 창조합니다 그들은 많은 이름 – 지침, 키 라인, 수정 지시라고 부릅니다 기본적으로 수직선과 수평선 모든 것이 올바르게 정렬되어 있는지 확인하십시오 글쎄, ConstraintLayout의 가이드 라인 당신이 사용하고 창조 할 수있는 단지 첫 번째 개념입니다 귀하의 레이아웃,하지만 궁극적으로 장치에, 단지 레이아웃에 적합한 설정이됩니다

우리는 또한 체인을 도입했습니다 10 릴리스주기의 비교적 늦은 판입니다 위젯 그룹을 배치 할 수 있다고 생각하십시오 그룹으로

그래서, 예를 들어, 그것들을 분산 시키십시오 Android의 이전 레이아웃과 비교하여 흥미로운 점 한 축에서만 작동한다는 것입니다 따라서 다른 축은 체인에 의해 구속되지 않습니다 마지막으로 비율을 도입했습니다 나는 많은 사용자가 사용자 정의보기를 다시 구현해야한다고 확신합니다

그냥 비율을 구현합니다 이제는 ConstraintLayout에 추가했습니다 출발에서 마지막으로 ConstraintSet을 도입했습니다 ConstraintSet의 아이디어는 이제 우리가 평평한 레이아웃

레이아웃을 만드는 데 필요한 계층 구조가 없습니다 어떤 의미에서, 당신은 무리와 함께 동일한 수준의 위젯을 제공합니다 그리고 우리는 그것을 레이아웃을 만들기 위해 적용합니다 원하는 결과를 얻으려면 이러한 제약 조건을 적용해야합니다 그래서 ConstraintSet, 아이디어는 간단합니다

우리가 모든 제약 조건들을 모으고, 그 객체에 ConstraintSet 객체를 넣습니다 따라서 제약 조건 집합을 만들 수 있습니다 레이아웃의 모든 제약을 포함합니다 레이아웃 파일에서 생성 할 수 있습니다 라이브 뷰 계층 구조에서

그리고 그 일을 할 수 있다는 사실 사실, 정말 강력합니다 왜냐하면 그리고 당신에게 간단한 예를 보여주기 때문에, 하나의 제약 조건 집합 만 토글 할 수 있습니다

또 하나 따라서 런타임에 UI를 조정하는 것은 매우 쉽습니다 레이아웃을 지정하고 만들 수 있습니다 레이아웃 편집기의 편의성을 그래픽으로 제공합니다 그리고 프로그램에서 런타임에, 당신은 원하는 레이아웃을 결정할 수 있습니다

이것은 매우 강력한 개념입니다 우리는 그걸로 돌아올거야 그리고 마침내, 오늘 우리는 11, 베타 1을 발표했습니다 Maven에서도 사용할 수 있습니다

워크 플로에 쉽게 통합 할 수 있어야합니다 11에서 우리는 무엇을 추가 했습니까? 우리는 첫째, 장벽의 개념을 추가했습니다 그리고 장벽은 어떤 의미에서 말하자면, 위젯 세트를 가지고, 가장자리의 최대 값 또는 최소값을 취합니다 그리고 그것은 당신이 많은 UI를 만들 수있게 해줍니다

이전에는 ConstraintLayout 10으로, 할 까봐 까다 롭다 우리는 또 다른 [? 하이퍼 클래스?] 그것은 그룹이라고 불리는데, 현재로서는 상대적으로 제한되어 있습니다 그러나 우리는 그것을 향상시키는 방법에 대한 아이디어를 가지고 있습니다 그러나 개념은 기본적으로, 당신은 해당 그룹에 저장되는 위젯 세트를 가질 수 있으며, 예를 들어 그룹의 가시성을 설정할 수 있습니다

그래서 너는 더 이상 자신을 유지할 필요가 없다 위젯 목록 만 토글 할 수 있습니다 한 번에 그들의 가시성 XML로 지정할 수 있습니다 그룹의 모든 가시성 상태 기본적으로 그룹의 요소에 적용됩니다

새로운 개념 인 자리 표시 자 개념도 있습니다 나중에 더 자세히 설명하겠습니다 하지만 네가 좋아할 것 같아 마지막으로 몇 가지 조작을 추가했습니다 우리는 제약과 차원을 다루는 방식으로 그래서 너비가 너비 인 뷰를 만들고 싶다면 화면의 30 %는 할 수 있습니다

그러나 지침과 조금 복잡했습니다 왜냐하면 가이드 라인은 퍼센트 포지셔닝을 허용하지 않기 때문입니다 하지만 이제는 위젯에서 직접 간단하게 할 수 있습니다 이제 우리는 조금 새로운 기능을 다루겠습니다 Android Studio 자체 JOHN HOFORD : 네

근본적으로, 당신에게 친절을 베풀기 위해서 안드로이드 스튜디오 내부의 자세한 내용은 우리는 일련의 도구를 가지고 있습니다 그들 중 일부는 나중에 조금 더 이야기 할 것입니다 그러나 우리는 정렬 형 도구 인 일련의 도구를 가지고 있습니다 및 정렬 형 도구

그리고 지침을 추가 할 물건이 있습니다 그리고 우리는 그것들에 관해 더 많이 볼 것입니다 오른쪽 클릭 메뉴도 있습니다 실제로는 – 그들 중 많은 도구가 있습니다 자, 도구로 할 수있는 일의 작은 예가 있습니다

그래서이 특별한 예에서는 체인을 만들고, 나는 그 (것)들의 모두를 중심에두고, 그 후에 추론을 사용하여 자동으로 연결합니다 그래서 세 번의 클릭으로, 나는 본질적으로 최상위 레이어를 만들었습니다 형세 자, 우리가 많은 일을 한 다른 것들 중 하나 에 경감이 있습니다 당신이 내가보고있는 작은 작은 것들

그들은 광선을 자동으로 던지고, 인접한 표면에 따라서 연결을 만드는 빠르고 편리한 방법입니다 실제로 작은 선을 드래그하지 않아도됩니다 정말 많은 연결 속도를 높일 수 있습니다 그리고 나서 다른 모든 기능들과 함께 놀고 있습니다

경감 나는 편견을 바꿀 수있다 나는 가서 다시 연결을 끊을 수있다 둘 다 함께 일합니다 그래서 저는 그것을 다시 되돌려 놓습니다

그리고 루프는 처음부터 다시 시작됩니다 추론 – 당신은 저에게 추측의 조금을 보았습니다 전에 본질적으로 확률 모델을 기반으로합니다 우리는 무엇이 가장 가능성있는 일인지 추정하려고 노력한다

에 연결하고 싶습니다 그들이 서로 위에 늘어선다면, 그렇게 정렬 될 가능성이 큽니다 그것이 센터에 직접있는 경우, 작은 아이콘으로, 그것은 그것을 연결하기를 원할 것입니다 그것에 대한 멋진 점 중 하나는 당신은 내가 연결할 수 있다는 것을 알게 될 것입니다 그리고 나서 추측을 사용하여 마무리하고 UI를 본질적으로 완성하십시오

그래서 내가 많이 걱정하는 것들, 나는 손으로 할 수 있습니다 추론은 현재 생성하지 않습니다 체인 또는 우리가 이야기하는 새로운 위젯 중 일부를 포함합니다 새로운 디자인으로는 제대로 작동하지 않습니다 풍모

그러나 이러한 기능이 안정화됨에 따라, 추론 엔진에 넣을 것입니다 여기 예제가 있습니다 그것은 추론했다 그리고 당신이 볼 수 있듯이, 그것이 중심에 놓여 있음을 발견했습니다, 그것을 거기에 붙였다 랩 내용과 일부 내용이 변경됩니다

DP를 제로로 만드는 것 그것은 단지 그것을 고치려고합니다 기억할 다른 것들 중 하나 여기 미인이 아니에요 그것은 당신을 위해 일을 정렬하고, 준비하지 않을 것입니다 물건을 넣는 곳을 정확하게 유지하기 위해 열심히 노력합니다

그래서 사람들이 어색해하는 몇 가지 사례를 보았습니다 UI에 상황을 넣은 다음 추론을합니다 조직화되어 있지 않기 때문에 나쁜 결과를 낳습니다 그래서 생각할 때 그렇게하는 것을 잊지 마십시오 우리가 좋아하는 것들 중 하나는 경감입니다

너는 내가 그것을 사용하는 것을 보았다 얻을 수있는 또 다른 모드가 있습니다 당신이 정상에서 작은 화살을 쳤다면, 이것은 모든 제약 조건입니다 그것은 매우 솔직하게 사용하는 고통입니다 그래서 우리는 무언가를 연구 해왔다

조금만 더 쉽게 시도하고 당신은 그것을 사용할 것이고, 당신은 그것과 상호 작용할 것입니다 그리고 우리는 그것을 – 내부적으로 슬라이스라고 부릅니다 레이아웃이있을 때마다 상상해보십시오 너는 실제로 ~ 레이아웃과 관련하여 치수, 문자열 파일, 몇 개의 파일이 있습니다 그리고 함께 작업하려는 정보 이 모든 다른 파일에 매핑됩니다

그래서이 게임을 둘러싼 이런 호핑이됩니다 너는 알아 내려고 노력 중이야, 오, 나는 가서 조정해야 해 여기 치수 나는이 파일에 문자열을 설정해야한다 그리고 나는

나는 쉽고 간단한 탐색을 할 수 없다 레이아웃에서 선택된 객체를 가져올 수 있다면, 퍼센트, 사용하는 치수, 사용하는 스트링, 그리고 그것이 말하는 다른 모든 것들, 우리는 그들을 하나의 사용자 인터페이스로 결합합니다 오른쪽에 나타납니다

그리고 우리는 XML 파일과 비슷한 모양을했습니다 XML에 익숙하다면 XML의 기능을 이해할 수 있습니다 그리고 그것이 어떻게 작동하는지 당신은오고있는 파일을 볼 수 있습니다 다른 모든 매개 변수에서

예를 들어 드로어 블은 나 그림이다 값은 몇 가지 숫자입니다 사실, 편집을 할 수 있으며 심지어 해당 사용자 인터페이스에서 직접 새 요소를 작성하십시오 따라서 디자이너 내에서 신속하고 신속하게 작업 할 수 있으며, 다른 모든 작은 일들을해라 일반적으로하고 싶습니다

NICOLAS ROARD : 그래서 도구에 대해 조금 이야기하고 싶습니다 속성 이 모든 것을 보여주는 아이디어 물론 모든 레이아웃을 사용할 수도 있습니다 XML로, 맞죠? 내 말은, 그들은 보통의 Android 레이아웃입니다 이전 레이아웃을 사용할 수 있으며 ConstraintLayout을 사용할 수 있습니다

모든 것이 XML에서 완벽하게 사용 가능합니다 하지만 그 아이디어는 우리가 강하게 원하는 것입니다 그게 디자이너와 함께, 우리는 정말로 당신의 인생을 더 쉽게 만들 수있는 좋은 기회를 얻었습니다 나는 당신이 그 도구들 중 일부를 볼 수 있다고 생각합니다 우리가 제시 한 XML에서 같은 일을 한 줄씩 분명히 할 수 있지만, 이러한 도구를 사용하면 훨씬 빠릅니다 따라서 도구의 특성은 이미 알고있는 것일 수 있습니다 권리? 일반적인 문제는 우리가 에디터에서 뭔가를 가지고 있지 않다

코드를 직접 실행하십시오 레이아웃에서 우리가 보여줄 때가 있습니다 편집자가 정확히 같은 사람이되지는 않습니다 당신은 당신의 장치에 있습니다 그래서, 예를 들어, 그것의 일부 귀하의 프로그램에 의해 결정됩니다

런타임에 완료되는 것들입니다 따라서 우리는 도구가 당신은 행동 만 지정할 수 있습니다 레이아웃 편집기에 적용됩니다 그래서 그 속성들은 가지 않습니다 신청서를 게시 할 때, 언제 그것을 장치에 밀어 넣습니다

그들은 단지 껍질을 벗겨 낸다 그러나 디자이너는 꽤 많은 유연성을 허용합니다 어떻게 당신이 물건을 렌더링하고 싶어하는지 예를 들어 showIn은 꽤 유용합니다 재활용 된보기에서 항목을 설정하는 Listitem, 그런 것들

이것은 단지 일반적인 문제 일뿐입니다 맞습니다 우리가 정말로하지 않을 때 어떻게 레이아웃을 보여주고 싶습니까? 코드를 실행하고 싶습니까? 그리고 재활용보기를 드래그하려고하면 이러한 모든보기, 레이아웃 편집기에서, 그것은 아마 당신이 본 것입니다 우리는 자동으로 기본 어댑터를 생성하기 때문에 꽤 제한적입니다 그리고 기본적으로, 그것은 당신이 보는 것입니다

아마도 응용 프로그램이 어떻게 보이는지는 아닙니다 그래서 당신이 어떤 내용을 가지고 있다면 – 행을 만들었다 고 가정 해 봅시다 – 당신은 그것을 지정할 수 있습니다 복제되는 것을 볼 수 있습니다 응용 프로그램이 무엇인지 명확하게 나타내지는 않지만 좋아 보이시겠습니까? 물론, 당신은 다른 데이터를 가지게 될 것입니다 이것이 바로 우리의 샘플 데이터가 들어오는 곳입니다

새로운 속성을 지정할 수 있습니다 이것은 30에서 사용할 수 있습니다 기본적으로 사전 예고가 이루어집니다 속성 (예 : 이름 또는 전화 번호)

그리고 그걸 참조 할 수있을거야 다른 속성 대신 그리고 그것은 디자이너에서 복제 될 것입니다 매우 빠르게 볼 수있는 방법이라고 생각하십시오 귀하의 레이아웃이 어떻게 보이지 않는지 보일 것입니다

무엇이든 프로그램 할 수 있습니다 우리는 실제로 그 이상을 수행합니다 프로젝트에 새 샘플 데이터 폴더가 있습니다 당신이 만들 수있을 겁니다 색상과 같은 것을 지정할 수 있습니다

그것은 사소한 일입니다 텍스트 파일을 만들고, 각 줄에 색상을 넣고, 그리고 그게 다야 당신이 그 요소를 참조 할 때마다, 우리는 다음 색상을 가져올 것이고 우리는 단지 반복 할 것입니다 그래서 당신은 아주 빨리 그것을 얻을 수 있습니다 또한 샘플 데이터 기능이 더 많습니다

Lorem Ipsum, 특정 형식의 날짜, 그림 물감 전체 JSON 파일을 지정할 수도 있습니다 더 많은 구조화 된 데이터를 사용하려는 경우 그래서 우리는 구워진 데이터 유형을 얻었습니다 죄송합니다, 리모콘 구워진 데이터 유형 내가 말했듯이 JSON 파일은 더 많은 구조를 원한다

그리고 샘플 폴더에 리소스가 있다면, 당신은 그것을 참조 할 수 있고, 우리는 그것들을 선택할 것입니다 그래서 당신이 이미지 모음을 원한다면, 예를 들어, 폴더에 넣으면, 그 폴더를 참조하면 다음 폴더를 선택합니다 그리고 좀 더 고급 예제를 살펴 보겠습니다 ConstraintLayouts에 그래서 당신은 당신의 연습에서 그런 프로그램을 보았을 것입니다

내 버튼 왼쪽에 텍스트가 있습니다 그 텍스트가 성장하기를 원하지만 더 이상 버튼이 허용하는 것보다 그리고 나는 모든 것을 왼쪽으로 중심에두기를 원합니다 그래서 당신이 ConstraintLayouts에서 그것을하는 방법 – 그리고 그것은 약간 – 조금 까다 롭지 만 근본적으로 우리는 체인을 만들고, 텍스트를 크기 조정 가능하게 만들고, 제약 조건이 자동으로 적용됩니다 그래서 더 이상 가지 않을 것입니다 그리고 이것은 단지 간단한 예입니다

어떻게 사슬을 사용할 수 있는지 그것은 단지 오, 나는 위젯을 분산시키고 싶지 않다 훨씬 더 복잡하고 강력한 조합을 할 수 있습니다 따라서 사라진 행동에 대한 또 다른 예가 있습니다 그래서 기본적으로 사라질 위젯을 설정할 때, 우리는 그것을 하나의 지점으로 해결합니다

그래서이 경우 내 중앙 버튼 기본적으로 단일 지점으로 축소됩니다 그리고 그 행동은 나에게 잘 보입니다 그게 아마 내가 원하는거야 때로는 같은 방식으로 작동하지 않을 수도 있습니다 첫 번째 요소에서 그렇게하면 모든 것이 무너집니다

다시 0으로, 마진은 포함 된 다음 나머지 버튼은 움직이고 있습니다 그래서 우리는 또 다른 속성을 갖습니다 연결하려는 객체가 사라지면 지정할 수 있습니다 이 경우 마진에 해당 값을 사용합니다 두 번째 단추, 원래 여백 0의 상단에, 그리고 지금은 32의 마진을 가지고, 첫 번째 요소가 사라짐으로 표시된 경우에만 자리 표시 자에 대해 조금 이야기 해 보겠습니다

이것은 ConstraintLayout 11에 새로 추가 된 것입니다 JOHN HOFORD : 예, 11에 새로운 내용입니다 본질적으로 가상 뷰를 만들 수 있습니다

제약 조건 내의 다른 뷰에 내용을 설정합니다 형세 따라서이 간단한 예에서는 어느 것이 든 당신을 움켜 쥐고 있습니다 클릭 한 상태, 클릭 한 상태의보기, 화면 상단까지 뒤틀려 있습니다 텍스트를 보면 약간 이상하게 보일 수 있습니다

니가 코 틀린에 익숙하지 않다면 내일 Kotlin을 확인하십시오 이것이 Kotlin 파일 내부의 코드 길이입니다 오른쪽에 보이는 애니메이션 왼쪽에있는 코드에서 완전히 생성됩니다 XML 파일에서 사용되는 것은 없습니다

보시다시피 무작위로 전환됩니다 그러나 실제로 당신이 자리 표시 자, 위젯을 이동할 수있는 장소, 같이 보일지도 몰라, 좋아, 그 외에 뭘 할 수있어? 글쎄, 내가 자리 표시 자 기반 UI를 디자인한다면 본질적으로 내가 정의한 병합 태그 ConstraintLayout에서는 부모를 사용해야합니다 태그를 사용하는 동안 UI를보고 싶다면 본질적으로 고정 된 레이아웃을 제공합니다 다른 파일에서 사용하십시오 따라서이 경우에는 하나의 자리 표시자를 사용하기로 결정했습니다

내 최고 이미지, 큰 이미지가 될 것입니다 내 액션 버튼이 될 두 번째 자리 표시 자입니다 하지만 실제로 두 번째 자리 표시자를 만들 수 있습니다 이제 가로 모드로 사용합니다 그리고이 하나, 나는 그것을 약간 다르게 배열했다

약간 다른 제약 조건 세트를 사용합니다 이제 기본 레이아웃에서 두 UI를 선언합니다 요소를 포함하고 템플릿을 포함합니다 기본적으로 템플릿을 생성합니다 레이아웃을 어떻게 결정할 지 결정합니다

사실,이 템플릿 중 두 가지가 있기 때문에 다른 것들에, 내가 화면을 회전하면, 실제로 다른 템플릿을 사용하게됩니다 이제 나는 내 견해를 정리하고 분리 할 수있다 그것으로부터 레이아웃 그러나 나는 실제로 그 이상을 할 수 있습니다 이 구조로 할 수있는 일 중 하나 두 번째 이미지 버튼 대신에, 전체 포함을 결정할 수 있습니다

그 안에 다른 파일이 있습니까? 그래서이 특별한 경우에 저는 – 왜 이런 특별한 경우에, 나는 다른 배치의 낱단을 가진 전체 포함이있다 집단 그리고 실제로 그 공간에 휘몰아 치고 있습니다 그래서 그것은 ConstraintLayout 내의 ConstraintLayout입니다 그래서 그 맥락에서 중첩됩니다 그러나 이것은 매우 간단하고 거의 바보 같은 예입니다

그러나 당신은 당신이 어디에서 결정했는지 상상할 수 있습니다 어떻게하면 위와 아래를 원하니? 그리고 왼쪽과 오른쪽, 그리고 행동, 레이아웃하고 템플릿으로 디자인하십시오 그리고 나서, 당신이 당신의 주요 재료를 생산할 준비가되면, 당신은 단지 완전히 별개의 파일로 가서 그것을합니다 디자이너가 템플릿을 디자인하도록 도울 수 있습니다 그런 것들

우리가 ConstraintSet으로하고 싶었던 것들 중 하나 – 제한 집합을 사용하는 방법에 대해 조금 이야기하겠습니다 뷰를 완전히 분리 할 수 ​​있습니다 당신이 레이아웃을하는 방법부터 근본적으로, 일을하는 또 다른 방법입니다 전체 레이아웃을 캡슐화하는 것입니다

별도의 ConstraintSet으로 설정 한 다음 레이아웃에 적용합니다 그래서 당신은 궁금해 할 것입니다 그걸로하고 싶니? 글쎄, 너는 사용할 수있어 너는 둘 사이를 바꿀 수있어 ConstraintSets on the fly

조회수가 다시로드되지 않습니다 그것은 레이아웃을 전환하는 것과는 다릅니다 실제로 위젯을 옮기는 것입니다 다른 제약 조건 세트를 적용하여 따라서이 예에서는 두 개의 ConstraintSets을 만듭니다 레이아웃 파일에서 ConstraintSet을 가져옵니다

setContentView를 사용하여 다른 레이아웃을 화면에 표시했습니다 그런 다음 실제로 그 하나를 얻고 ConstraintSet을 가져옵니다 이 ConstraintSet도 있습니다 이제 두 ConstraintSets 사이를 전환하려면 모두 나는 ConstraintSet을 호출해야만한다 ConstraintLayout에 적용합니다

그리고 그것은 내가 전환하도록 허락 할 것입니다 그래서 나는 그렇게 영리한 애니메이션을 많이 만들 수 있습니다 그래서 간단한 예가 있습니다, 대화가 있다면 – 이것은 일반적인 ConstraintSet입니다 내 사진이 그려져 있고 가로로 또 다른 사진을 찍을 수 있습니다 이제 두 개의 별도 레이아웃을 만드는 대신 회전시킬 때 팽창시켜 당신은 자신을 회전시킬 수 있습니다

ConstraintSet 스위치를 직접 수행 할 수 있습니다 그리고 그런 식으로, 당신은 회전하는 동안 훨씬 덜 진행됩니다 그래서 많은 양을 돌리는 것을 좋아하는 앱을 가지고 있다면, 당신은 그렇게 할 수 있고, 약간의 속도를 줄일 수 있습니다 니콜라스 로어 : 음, 다른 건 ConstraintSet을 염두에 두는 것이 중요합니다 이 회전 예제는 흥미 롭습니다

물론 안드로이드에서 정상적인 시스템을 사용할 수 있습니다 런타임시 자원이로드되도록하십시오 ConstraintSet을 사용하면 실제로 ConstraintSet을 작성할 때 완전히 제어 할 수 있습니다 모바일에서 종종 그렇게 많이 시도하는 것은 아닙니다 당신이해야 할 일을하지 않기 위해서, 당신이 그것을해야하기 때문에

때로는 작업 비용이 많이 듭니다 당신은 여전히 ​​그것을해야합니다 적절한시기를 찾는 것이 더 중요합니다 그것을하기 위해 그리고 저에게 그것은 ConstraintSet이 허락하는 것입니다

당신은 기본적으로 모든 제약 조건을 미리 구울 수 있습니다 전에 그들을 적재하십시오, 그래서 당신은하지 않습니다 말장난 등을 일으켜야한다 갑자기 당신이 당겨야하기 때문에 전체 리소스 집합 그래서 ConstraintSet은 매우 유용합니다

우리가 일반적으로 모션을하고 싶을 때 ConstraintLayout의 장점 중 하나 평면 계층을 유지하려고하는 데 중점을 둡니다 클리핑 문제가 없다는 것입니다 당신은 씬 그래프로 생각할 수 있습니다 그 너는 모든 다른 물건들을 가지고있다

너는 화면에 보여주고 싶다 귀하의 버튼, 귀하의 이미지 등등 ConstraintSet에 대해 생각할 수 있습니다 어떤면에서는 키 프레임처럼 그리고 당신이 그렇게한다면, 기억한다면 방금 본 슬라이드, 한 줄을 추가하면됩니다 그리고 그게 다야

그리고 그것은 단순히 Android 전환 프레임 워크를 사용하는 것입니다 또한 [? industrylib ?] 그러면 자동으로 애니메이션이 적용됩니다 모든 유형의 레이아웃이 변경됩니다

그것은 개인적인 관점에서도 적용될 것입니다, 그렇죠? 그래서 그 예에서 저는 – 죄송합니다 리모콘은 만족스럽지 않습니다 이 예에서는 레이아웃이 있습니다 그것은 일반적인 ConstraintLayout으로 설정됩니다 매개 변수를 변경할 수는 없습니다

개별보기의 레이아웃이 그에 따라 자동으로 크기가 조정됩니다 내가 설정 한 제약 조건에 그러면 TransitionManager가 그 모든 것을 애니메이션으로 나타냅니다 그래서 여러분은 아주 복잡한 행동을 할 수 있습니다 아주 쉽게 그리고 코드 자체는 정말 사소합니다

너는 그 이상으로 많은 것을 할 수있다 그리고 그것은 또 다른 예입니다 화면의 한 상태를 만들 수 있습니다 하나의 레이아웃에서, 변화 – 기본적으로 두 번째 상태를 만들고로드합니다 ConstraintSet에서

런타임에 적용하고 전환 프레임 워크 나머지는 그냥 할거야 정말 멋진 점은 당신이 그래픽으로 그렇게한다는 것입니다 얼마나 많은 일을해야하는지 알아 내려고하지 않아도됩니다 차원이 뭐지? 아니요, 화면에 즉시 결과가 표시됩니다 장치를 왕복하지 않아도됩니다

그리고 그것은 순전히 ConstraintLayout에있었습니다 그러나 ConstraintLayout을 사용할 수도 있습니다 기존 프레임 워크를 활용함으로써, 그리고 프레임 워크의 기존 위젯들 그래서 여기, 이것은 단지 [? 새로운 전망?] 그리기 레이아웃에 사용 된 것 중 하나입니다 하지만 여기에서 단순히 ConstraintLayout으로 재사용 할 수 있습니다

그래서 여기, 이것은 간단한 서브 클래스입니다 좋은 점은 알다시피, 나는 격려한다

당신은 링크에서 그것에 대해 생각할 것입니다 자리 표시 자 개념에 기본적으로 일련의 일반적인 규칙을 정의 할 수 있습니다 UI가 어떻게 작동하는지 그래서 ConstraintLayout은 뭔가가됩니다 간단히 말해서 버튼을 배치하고 싶습니다

어떻게 서로 상호 작용하는지에 대한 정보를 제공합니다 오히려 전체 UI가 돌아 다니기에 더 가까워 질 수 있습니다 물론 사용자 정의 위젯을 사용하여 적용 할 수 있습니다 네가 원한다면 그것은 간단합니다

여기 전체 ConstraintSet 슬래시의 또 다른 예가 있습니다 전환 애니메이션 그래서 이전 예제와 같이 두 가지 상태를 정의했습니다 그림자가 적용된 것을 보면 높이가 바뀝니다 그리고 모든 것은 그래픽으로 이루어집니다

이 애니메이션의 유일한 문제점 그것은 좀 오래 부끄럽다 내 말은, 특별한 일은하지 않는다는거야 움직임이 없습니다 하지만 우리는 그 이상을 할 수 있습니다 또한 사용자 정의 전환을 사용하면 원하는 것을 정의하십시오

최근에는 물리학 라이브러리가 출시되었습니다 자신 만의 사용자 지정 전환을 쉽게 만들 수 있습니다 그들을 시스템에 연결하고 원하는대로하십시오 이 특정 UI를 복제하는 것이 좋습니다 이것은 테스트 예입니다

그러나 당신에게 유연성의 유형을주는 것 이 방법이 당신에게 줄 수 있습니다 그리고 그 메모에, 우리는 끝난 것 같아요 Q & A에는 몇 분이 걸립니다 그리고 제발 파일 버그, 기능 요청 당신은 우리에게 꽤 쉽게 연락 할 수 있습니다

ConstraintLayout의 문서 온라인으로도 이용할 수 있습니다 그리고 제가 말씀 드렸듯이 우리는 방금 11을 발표했습니다 시도해주세요 [음악 재생]