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

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

"그려진 것 – Android가 UI를 렌더링하는 방법 " 그것은 거의 다른 것으로 불 렸습니다 우리는 그것을 이것을, 그리고 몇몇 행정부에서 위치가 실제로 가고 있다고 결정했다 "앱을 최적화하는 방법 Top Rendering Performance "또는 뭔가 그 얘기가 아니 었습니다

다행히도, 우리는 그것을 다시 바꿨습니다 ROMAIN GUY : 아직도 그렇지 않습니다 CHET HAASE : 대신에, 우리는 당신에게 어떻게, 사실, 물건이 작동합니다 나는 쳇 하세입니다 나는 안드로이드 툴킷 팀 출신이다

Romain Guy : 나는 Romain Guy입니다 저는 Android 프레임 워크 팀에 있습니다 나는 실시간 그래픽을한다 CHET HAASE : 그것은 오늘날 우리가 이야기하고있는 것과 같습니다 그래서 우리는 이전에이 버전의 버전을 제공했습니다

우리는 우리가 끝난 줄 알았다 그리고 나서 우리는 충분한 것들을 깨달았습니다 어쩌면 시스템 내부에서 바뀌었다 이 일을 다시하고 우리가있는 곳을 볼 시간이었습니다 이것이 우리의 시도입니다

가자 그래서 우선, 렌더링이라는 단어가 있습니다 그게 무슨 뜻이야? 일반적으로 그것을 명확히하기 위해 지방을 녹이는 것을 의미합니다 그것은 우리가 오늘 이야기 할 내용이 아닙니다 대신, 우리는 실제로 선회하는 과정에 대해 이야기하고 있습니다

버튼과 체크 상자와 같은 모든 것들 화면의 모든 것을 픽셀 단위로 사용자가 볼 수있는 그리고 많은 일들이 진행되고 있습니다 우리가하는 많은 세부 사항이 있습니다 우리는 오직 오늘부터 이것을 40 분 안에하십시오 그러나 우리는 그 길을 따라 많은 세부 정보를 덤프 할 것입니다 그래서 우선, 나는 너를 데려 갈거야

~을 통해 색깔의 무리가 될 것입니다 상단에 도트가 표시됩니다 이야기의 나머지 부분에 대한 시각적 단서의 종류 그래서 저는 일종의 걸음마 단계를 밟을 것입니다 정보의 흐름에서 일어나는 일생의 화면의 픽셀까지 내려갈 수 있습니다 우리는 안무가라고 불리는이 물건을 가지고 있습니다

보통 60 초에 한 번 찰 때, Vsync라고합니다이 간격은 다음과 같습니다 프레임이 동기화되고 있습니다 버퍼가 화면에 나타납니다 우리가 많은 정보를 처리 할 좋은 시간입니다

그 정보의 렌더링 처리 그 결과로 Vsync 연산을 얻습니다 Java SDK 영역으로 보내졌으며 우리는 UI 스레드를 사용하고 있습니다 그리고 갑자기 우리는 입력 이벤트를 처리해야합니다 속성의 변경 사항을 트리거합니다 우리는 또한 모든 애니메이션을 실행합니다

그래서 우리는 속성 값을 변경합니다 다시 말하지만, 레이아웃 및 무효화와 같은 일이 발생할 수 있습니다 우리는 전체 통과 통과를 측정합니다 그들이 얼마나 큰지 알아 내기 위해서, 그것들을 실제로 배치하는 것입니다 어디로 가야하는지, 그리고 그 다음에 그려야합니다

일단 모든 정보가 완료되면, 해당 정보의 결과를 동기화합니다 렌더링 스레드라고 불리는 것에 이르기까지 그리고 렌더링 스레드가 그것을 받아서, 좋아, 글쎄, 나는 이것들을 실행하려고합니다 나는 기본적으로 이것을 돌릴거야 모든 정보의 기본 버전으로 우리는 Java 레이어에서 제작 한 다음 GPU에서 버퍼를 얻으려고 할 때, 그래서 나는이 정보를 쓸 곳이있다

그리고 나서이 모든 GPU 명령을 실제로 발행 할 것입니다 저기있는 OpenGL 같은 것들 그리고 나서 저는 말할 것입니다 좋아요, 이제는 버퍼를 바꿀 때가되었습니다 그런 다음 GPU로 넘깁니다

그리고 그래픽 시스템은 합성이라고하는 것, 우리는 오늘이 단계의 대부분에 대해 이야기 할 것입니다 그래서 합성은 생각합니다 우리는 전에 결코 설명하지 못했습니다 그래서 우리는 약간의 세부 사항을 들어갈 것입니다 안드로이드 렌더링 아키텍처의이 부분에 대해서

그럼 작은 색 점들 화면 상단에 주목할 것입니다 우리는 몇 가지 예를 거쳐 과정을 진행하고 있으며, 우리는 이것을 더 잘 이해할 수 있습니다 예제를 말하면, 여기 간단한 예제가 있습니다 따라서 사용자가 있다고 가정 해 봅시다 사용자가 항목을 클릭하면 나는이 굉장한 RecyclerView 응용 프로그램을 썼다

그 모양이 정확히 같습니다 나는 그것이 스크린 샷이기 때문에 그것이라는 것을 안다 내 멋진 응용 프로그램에서 그것에는 아이템이 잔뜩 들어있는 RecyclerView입니다 사용자가 하나를 클릭하면이 놀라운 일이 발생합니다

그것은 배경에 임의의 색상으로 변합니다 그것은 믿을 수 없다 나는 너에게 근원을 줄 수 있었지만 나는 모른다 그것은 꽤 복잡합니다 네가 이해할 수 있을지 확신 할 수 없다

여기 내 놀라운 데모 응용 프로그램을위한 놀라운 레이아웃이 있습니다 ConstraintLayout이 있습니다 내부에 RecyclerView가 있습니다 그런 다음 런타임에 채 웁니다 그 안에는 무작위적인 물건들이 잔뜩 있어요

이 것에 대한 뷰 계층 구조 기본적으로 이렇게 보입니다 실제로, 그것은 기본적으로 이와 같이 보이지 않습니다 그것은 정확히 이것과 같습니다 그래서 당신은 DecorView에서 내려갑니다 LinearLayout과 FrameLayout이 있습니다

나는 왜 우리가 깊은 둥지를 틀고 있는지 정확히 알지 못한다 하지만 뭐든간에 역사 우리는 거기에 행동 바에 대한 것들을 잔뜩 가지고 그게 정말 중요하지 않습니다

우리가 여기서 염려하는 것은 콘텐츠 계층 구조에서 실제로 무슨 일이 일어나고 있는지, 그것이 응용 프로그램에 영향을 줄 수 있기 때문입니다 그래서 우리는 내용 FrameLayout, 우리는 ConstraintLayout을 가지고있다 바깥쪽에는 RecyclerView를 감 쌉니다 그리고 나서 모든 항목 구체적으로 이들은 다음과 같은 항목입니다

그것들은 유일한 것들이기 때문에 화면에 있습니다 실제로 측정되고 배치되고 그려집니다 그래서 어떻게됩니까? 이 예제를 실행하고 우리가 처음부터 끝까지 간 모든 흐름을 통해 사용자가 클릭하면 Vsync 작업이 실행됩니다 그것이 전송되고 입력 단계에서 입력을 처리합니다 우리는 이것이 클릭이라는 것을 알게됩니다

나는 여기에 몇 가지 세부 사항에 광택을 쓰고있다 사실, 우리는 먼저 다운이 있다는 것을 알아 차릴 것입니다 그런 다음 위로 올라간 다음에 클릭으로 처리됩니다 우리가 결국은 당연한 것으로 받아 들여 여기를 클릭하여 처리 할 것입니다

이 항목에서 클릭 끝나는 방법 내가 가지고있는 놀랍도록 복잡한 예에서, 그 안에 배경색을 설정합니다 이 항목에 임의의 색상을 지정하십시오 그것이 내가이 방법을 무작위로 호출 한 이유입니다 viewjava에서 설정된 배경색으로 전송됩니다

배경에 색상을 설정하는 물건을 잔뜩합니다 drawable, 그리고 나서 결국 호출 이 메소드는 invalidate라고 불린다 무효화는 프로세스입니다 실제로 뷰를 다시 그리지는 않습니다 View Hierarchy에 무엇인가를 알려주는 과정입니다

다시 그려야합니다 그래서 클릭이 발생합니다 그것은 아래쪽에있는 항목에서 발생합니다 그 두 번째 아이템 – 당신은 녹색으로 둘러싸인 것을 보았습니다 우리는 약간의 무효화 메소드가 있습니다

그걸 부름 받았고 기본적으로 나무 위로 걸어 간다 나무 위로 줄곧 일련의 메소드를 호출합니다 뷰는 다시 그려야한다는 것을 알고 있기 때문에, 하지만 실제로 그 정보를 전파해야합니다 계급을 따라 올라간다 그래서 그때 우리는 앞으로 모든 것을 다시 그릴 수 있습니다

그래서 무효 심판을 계층 구조의 맨 위로 불러옵니다 결국 그것은 거대한 수업으로 끝납니다 우리가 ViewRootImpljava를 호출했다고하자 거기에이 무효화 자식 메소드가 있습니다

그리고 그것은 기본적으로 좋아, 나는 순회 일정을 잡아야한다 알았어, 누군가 정보를 가져 왔어 어딘가에서 무효화 됐어 즉 나중에 트래버스 코드를 실행해야합니다 이 과정이 끝나면 순회는 일을하는 과정입니다

실제로 필요한 모든 단계 해당 프레임을 렌더링합니다 구체적으로 말하자면, 보기가 얼마나 큰지, 레이아웃 – 뷰의 위치와 크기를 설정하고 뷰를 그립니다 이 모든 것을 순회라고합니다 그래서 우리는 순회를 계획했습니다 그것은 나중에 일어날 것입니다

그리고 나중에 시간이 지금이다 그래서 같은 프레임에서 우리는 traversal 코드로 끝납니다 이 performTraversals 메소드에서 그것은 PerformDraw를 할 것입니다 PerformDraw는 무승부를 요구합니다

메소드를 핵심 뷰에 추가하면됩니다 모든 방법으로 전파됩니다 그리기 방법은 실제로 최적화에서 끝납니다 허니 콤에서 다시 구현 한 Get DisplayList를 호출합니다 따라서 DisplayList는 렌더링을 저장하는 구조입니다 정보? 버튼 코드의 작성 방법을 보면 또는 일반적으로 코드보기, 그래픽 명령 호출 DrawBackgrounds, DrawDrawable, DrawLine, 도대체 무엇이

그러나 이것들은 DisplayList의 연산으로 끝납니다 이는 이러한 작업을 나타내는 간결한 방법이며, 뿐만 아니라 작업에 대한 매개 변수도 제공합니다 그래서 Get DisplayList를 호출합니다 사실 장식보기는 변경되지 않았습니다 그래서, 글쎄요, 저는 변하지 않았습니다

하지만 확실히 내 아이를위한 DisplayList를 얻을 수 있습니다 그리고 나무 아래로 내려 가면서, 그것이 항목 2에 도착할 때까지, 그리고 그것은 말합니다, 오, 나는 변했습니다 무효가 나를 불렀을 때, 뭔가를 유발해서 내가 다시 새겨 져야한다는 것을 알았습니다 그래서 Get DisplayList 실제로 끝납니다 뷰를 그리는 호출로서 재생성됩니다

자체 디스플레이 목록 자 이제이 onDraw 메서드로 끝납니다 DisplayList에있는 작업으로 끝납니다 DisplayList는이 항목에 대해 기본적으로 rect 정보와 텍스트 정보 – 꽤 기초적인 그리고 기본적으로 DisplayList가 있습니다

전체 계층 구조 그래서 그 자체가보기 자체가 아니 었습니다 하지만 우리는 계층 구조 자체를 가지고 있습니다 이 표시 목록의 계층 구조에서 재생됩니다 줄곧

이제 전체 트리에 대한 DisplayList가 있습니다 그게 우리가 UI 스레드에서해야 할 모든 것입니다 이제 우리는 그 정보를 렌더링 스레드 및 렌더링 스레드 GPU를 실제로 다루는 별도의 스레드입니다 이 작업의 측면 Java 측에서는 모든 정보를 생성했습니다

네이티브 측에서, 우리는 실제로 – 우리는 그 정보를 가지고 GPU로 동기화합니다 동기화 작업이 있습니다 기본적으로 우리는 저기서 핸들을 복사 해 또한 관련 정보를 일부 복사합니다 피해 지역을 복사 했으니 까

그 아이템 2 – 그게 중요하다는 걸 아는 것이 중요합니다 그 틀에서 변한 유일한 것 우리가 아무것도 다시 그릴 필요가 없다는 것을 의미한다 그렇지 않으면 그 지역 밖 그래서 우리는 클립 바운드를 복사 할 것입니다

그래서 우리는 다시 그려야 할 것을 알고 있습니다 이제 최적화를 수행 할 것입니다 비트 맵 업로드 같은 것들 따라서 이것은 프레임의 시작 부분에서 그것을 수행하기에 좋은 시간입니다 그들에게 실제로 그들을 돌려 줄 시간을주세요

길을 따라 텍스처에, 우리는 다른 것들을하고있어 ROMAIN GUY : 여기에 우리가 업로드 중임을 언급합니다 하드웨어가 아닌 비트 맵 하드웨어 비트 맵은 새로운 유형의 비트 맵 구성입니다 Android O에 추가되었습니다 일반적으로, 비트 맵을 가지고있을 때 메모리를 할당해야합니다

자바 측에서 그리고 그릴 시간이 왔을 때, 우리는 GPU에서 비트 맵 복사본을 만들어야합니다 이것은 비싸다 시간이 걸리며 사용하는 RAM의 양이 두 배로 늘어납니다 따라서 Oreo에서 사용 가능한 하드웨어 비트 맵을 사용하면, 당신은 방정식의 Java 측을 유지할 수 있습니다

GPU에만있는 비트 맵을 가질 수 있습니다 따라서이 비트 맵을 다시 수정하지 않을 경우, 이것은 메모리 효율적인 현명한 효율적인 방법입니다 비트 맵의 ​​메모리를 저장합니다 CHET HAASE : 이전에 렌더링 스레드에 대해 언급했습니다 이것은 우리가 롤리팝에서 소개 한 것입니다

해제 GPU 와만 통신하는 별도의 스레드입니다 그것은 네이티브 코드입니다 Java 코드 외부에는 호출이 없습니다 애플리케이션 코드에는 분명히 콜 아웃이 없다

그냥 GPU와 대화합니다 우리는 이것을했습니다 그래서 우리는 여전히 기본적으로해야합니다 우리가했던 것과 같은 일, 미리 렌더링 된 쓰레드, 우리는 모든 DisplayList 정보를 생성합니까? 그 다음 DisplayList 정보를 보냅니다 GPU에

그래서 일련의 직렬하지만 렌더 스레드 원형처럼 물건을 원자 적으로 할 수있다 리플 애니메이션뿐만 아니라 애니메이션도 보여줍니다 벡터 드로어 블 애니메이션으로서 – 렌더링 스레드에서 원자 적으로 발생할 수 있습니다 그래서 일어날 수있는 일 UI 스레드를 정지시키지 않아도됩니다 그리고 그 동안 UI 스레드 유휴 상태 일 때 다른 일을 할 수 있습니다

동기화 후, 유휴 프리 페치 중 일부 작년에 한 RecyclerView에서 일합니다 따라서 스레드가 실행됩니다 우리는 모든 것을 동기화했습니다 우리는 DisplayList를 가지고 있습니다, 피해 지역이 있습니다, DisplayList를 무언가로 바꿉니다 우리가 DLOps라고 부르는 것 – 표시 목록 조작

따라서 중간에 채우기 작업이 있음을 알 수 있습니다 그것이 우리가 녹색으로 변한 것입니다 그런 다음 우리는 우리가 수행하는 최적화가 있습니다 ROMAIN GUY : 여기서 우리는 다양한 최적화 작업을 수행합니다 그래서 예를 들어, 알파 렌더링을한다면 뷰에 Set Alpha를 호출하거나 하드웨어를 설정 한 경우 레이어를 선택하면 그리기 명령을 식별하려고합니다

해당 레이어를 대상으로해야하는 프레임의 시작 부분에서 이동시킵니다 이렇게하면 GPU 내부의 상태 변화를 피할 수 있습니다 매우 비쌉니다 따라서 이런 종류의 최적화를 수행하지 않고, 당신은 끔찍하고 끔찍한 성적을 보게 될 것입니다 GPU 자체가 느려지 기 때문이 아닙니다

GPU가 CPU를 기다리고있을뿐입니다 그것을 지시하기 위해 우리가하고있는 다른 하나, 우리는 당신에게 실제적인 실제적인 예를 보여주기 위해, 재정렬 및 ​​매칭이라고합니다 우리는 모든 작업을 살펴보고, 우리가 목록 항목을 가지고 있기 때문에이 예제에서 볼 수 있습니다 우리는 유사한 많은 작업을 인터리빙합니다

그래서 우리는 직사각형을 그릴 것입니다 그리고 나서 텍스트를 그릴거야 그런 다음 사각형과 텍스트를 다시 그릴 것입니다 그리고 다시 여기에서 우리는 GPU의 상태를 바꾸고 있습니다 여러 번, 대신에 우리는 명령어가 겹치지 않으면 할 수있다

우리는 모든 직사각형을 함께 그릴 수 있습니다 그리고 나서 우리는 모든 텍스트를 함께 그릴 수 있습니다 이것은 재정렬과 매칭의 일부입니다 그리고 때때로, 우리가하는 일은 우리가 말하길, 우리가 사용하는 많은 텍스트를 볼 수 있다면 동일한 색깔 및 동일한 글꼴, 다른 텍스트 불러 오기가 필요하지 않습니다 그것들은 전체 화면을 커버하는 단 하나의 것일 수 있습니다 CHET HAASE : 원본 DLOps를 볼 수 있습니다 채우기 작업을 한 다음 어떤 텍스트를 그리기를 원한다

텍스처 맵이 될 것입니다 글리프 캐시에서 복사합니다 그런 다음 채우기 작업이 있고 그 다음에 더 많은 텍스트와 채우기 그래서 우리는 이러한 모든 작업을 인터리브했습니다 따라서 재정렬 작업 후에, 그러면 좀 더 보입니다

일련의 채우기와 일련의 텍스트 작업이 있습니다 함께 배치 할 수도 있습니다 더 최적이 될 것입니다, 우리는 여기서 볼 것입니다 ROMAIN GUY : Gmail의 예입니다 그래서 그것은 허니 콤 시대에있었습니다

여기서 어떻게 파이프 라인을 수정했는지 알 수 있습니다 렌더링 속도를 늦추고 볼 수 있습니다 Gmail이 그리는 방법을 정확하게 설명합니다 그래서 우리는 많은 목록 항목을 가지고 있습니다 그것들을 정확한 순서대로 그려라

뷰 계층 구조에 코드 순서대로 존재해야합니다 사실은 캔버스에 그린 모든 그리기 호출은 그 명령을 존중해라 불행히도, 내가 말했듯이, 그것은 매우 비효율적입니다 대신에 일괄 처리 및 병합 및 재정렬 한 후, 우리는 이것을 얻는다

특히 모든 별들이 같은 시간에 그려지며, 대부분의 텍스트가 한꺼번에 나타납니다 흥미로운 점은 모든 목록을 그리는 것입니다 항목 배경이 차례로 나타납니다 그래서 좋았어 재정렬이 효과가있었습니다

일괄 처리가 작동하지 않았고 부분적으로 목록이 항목이 약간 겹쳐 있습니다 명령이 겹칠 때 우리는 명령을 하나로 그려야합니다 블렌딩을 존중할 다른 후, 알파 값이 올바른지 확인하십시오 따라서 효과는 실제로 응용 프로그램에 따라 다릅니다 KitKat에서 올바르게 기억한다면, 설정 응용 프로그램은 전체 화면을 그릴 수있었습니다

수십, 수십 개가 아닌 약 6 회의 무승부 요청으로, 뷰 계층 구조에서 볼 수 있습니다 따라서 이것은 우리에게 매우 중요한 최적화입니다 CHET HAASE : 나는 현재의 장치들에 대한이 작업을 생각한다 밀리 초와 같은 것을 저장했다 우리가 가진 것을 깨닫지 못한다면 16 세 안에 모든 것을 할 수 있습니다

그래서 실제로 큰 발전이었습니다 Gmail 덕분에 Gmail이 덜 복잡해질 수있었습니다 종종 다음 프레임으로 밀려 나왔다 그래서 모든 것에 대한 우리의 설명으로 되돌아갑니다 그런 다음 clipReject가 있습니다

그래서 이것은 우리가 피해에 대한 정보를 얻는 곳입니다 지역? 그래서 우리는 두 번째 항목이 화면에 있었는지 알고 있습니다 우리는 우리가 그릴 필요가 없다는 것을 안다 그 밖에는 아무것도 없어 따라서 우리는이 DLOps를 처리하면서, 우리는 기본적으로 버릴 수 있다는 것을 압니다

그 지역 밖에서 그려지고있는 모든 것 그래픽에서는 사소한 불량이라고합니다 따라서 우리는 모든 DLOps를 사소하게 거부합니다 그 지역과 교차하지 않은 이제 우리가해야 할 일은 채우기를 그리는 것뿐입니다 그리고 일부 텍스트와 라인

그래서 우리는 그렇게합니다 이를 수행하는 과정에서 우리는 GetBuffer를 수행 할 수 있습니다 이것은 대개 암시 적 작업입니다 우리는 완충을 요구하지 않는다 GPU 작업을 시작하자 마자, 그러면 GPU가 우리에게 버퍼를 넘깁니다

특히, SurfaceFlinger가 우리에게 버퍼를 건네줍니다 우리는이 명령들을 넣을 수 있습니다 그런 다음 명령을 실행합니다 이것은 일련의 GL 명령입니다 슬라이드에서 볼 수 있듯이 glCommand라고합니다

기본적으로 우리가 무엇을 필요로하는지에 상응합니다 채우기 또는 텍스트 수행하기 – 비트 맵은 줄을 복사합니다 그리고 우리는 버퍼를 교환합니다 그래서 이것은 우리가 말하고있는 것입니다, 우리는 우리의 모든 렌더링 작업 이 프레임을 화면에 표시 할 준비가되었습니다

SurfaceFlinger가 버퍼를 교환하라는 요청입니다 기본적으로, 우리는 버퍼로 드로잉을 마쳤습니다 앞면에있는 것과 이것을 바꿀 수 있습니다 그것을 화면에 표시합니다 한편, SurfaceFlinger에서 우리는 Romain이 가고있는 합성 단계가있다

나중에 많이 이야기하기 하지만 기본적으로 화면의 모든 창을 차지합니다 탐색 막대, 상태 표시 줄, 응용 프로그램의 실제 내용 창 그것은 하드웨어 컴포 지터에있는 모든 것을 결합합니다 그들을 화면에 놓은 다음, 타다 끝났어

그래서 정말 간단한 예였습니다 매우 복잡한 예를 살펴 보겠습니다 이것은 두 단계로 진행될 것입니다 하나, 그래서 우리는 목록을 끌어 올거야 그래서 우리는 그것을 끌고 갈 것입니다, 그리고 우리가 그것을 끌고 갈 때, 우리는 항목을 조금씩 옮길 것입니다

그리고 결국 우리가 계속 움직이면, 우리는 새로운 아이템을 나타낼 것입니다 그래서 우리는이 두 가지 버전을 살펴볼 것입니다 이동 전용 버전이 있습니다 그래서 우리가 그것을 끌어 올릴 때, 새로운 아이템 – 새 항목이 표시되지 않습니다 모든 것이 조금 바뀌 었습니다

우선 우선 처리해야합니다 그래서 우리는 Vsync를 가지고 있습니다 입력 이벤트를 처리 할 시간입니다 그래서 우리는 그렇게하고, 우리는 이런 식으로 끝납니다 RecyclerView의 터치 이벤트에서 잘, 아래 가동이 있었다는 것을 밝힌다

그리고 등록 만하면됩니다 그 일이 일어난 곳 아무것도 처리 할 필요가 없습니다 화면에서 아무 것도 바뀌지 않았습니다 우리는 방금 사용자가 실제로 눌렀다는 것을 등록했습니다

그래서 우리는 그것을 나중에 기록하고 아무런 작전도 없습니다 우리는 우리가 얘기 한 나머지 것들은하지 않습니다 아무것도 바뀌지 않았기 때문에 그들은 드래그를 계속하고 유사한 코드로 끝납니다 그래서 우리는 다음 프레임에서 입력을 처리합니다

우리는 터치 이벤트에서 OK라고 말합니다 오, 이제 우리는 그들이 실제로 움직 였다는 것을 알고 있습니다 우리는 이전 X를 저장했기 때문에 그들이 얼마나 많이 움직 였는지 압니다 우리는 델타를 계산합니다 그리고 이제 우리는 offset top와 bottom이라고 불리는 것을 호출합니다

기본적으로 화면의 모든보기에 대해 우리는 단순히 Y로 그들을 이동합니다 그리고 위쪽과 아래쪽 호출 오프셋 무언가 무효화 방법입니다, 하지만 약간 다릅니다

그것은, invalidateViewProperty 말한다 이것은 우리가 두는 최적화입니다 아마 허니 콤 두 번째 릴리스 또는 무언가 DisplayList 속성 그래서 이전에 DisplayList에 대해 이야기했을 때, 내가 빠뜨린 하나의 뉘앙스가있었습니다 우리는 운영에 관한 정보를 가지고 있습니다 그리고 그래픽 작업을위한 매개 변수

하지만 일부 핵심 디스플레이에 대한 정보도 있습니다 기본적으로 뷰의 속성 인 속성, 번역 속성과 마찬가지로 회전 알파 그리고 이것들은 우리가 필요로하지 않는 속성입니다 변경하려는보기를 다시 렌더링합니다 우리는 단순히 DisplayList 구조 자체에서 그것들을 변경할 수 있습니다

그런 다음 GPU 발행시에 선택됩니다 따라서 우리가 그렇게하는 것이 매우 빠릅니다 따라서보기를 무효화하는 대신 그 모든 것을 모두 다시 그리는 것 우리가하는 말은 번역을 바꾸는 것입니다 이보기의 속성 그래서 우리는 invalidateViewProperty를 호출합니다 그것은 나무 위로 모든 길을 전파합니다

우리는 여전히 최상위 계층에서 어떤 일이 발생 하는지를 알아야하기 때문에, 하지만 훨씬 더 최적의 단계입니다 이렇게되면 일정이 정해진 다 Traversals, 이전처럼 추첨에서, 그것은 performTraversals에서 끝나고, PerformDraw는 이보다 훨씬 간단한 버전을 수행 할 수 있습니다 DisplayList가 실제로 변경되지 않았기 때문입니다

DisplayList 속성을 변경하면됩니다 그것의 내부 그래서 우리는 즉시 그 정보를 렌더링 스레드로 그런 다음이를 실행하여 DisplayList 연산으로 변환 할 수 있습니다 버퍼를 얻는다

기본적으로 모든 것은 이전과 같습니다 두 번째 단계로 가자 그 복잡한 복잡한 예입니다 사용자는 드래그를 계속하고, 드래그 할 때, 하단에 새 항목이 나타납니다 따라서 Vsync는 입력을 처리합니다

우리는 이와 같은 방법으로 끝납니다 우리는 그들이 움직 였다는 것을 압니다 오,하지만 그건 우리가 창조를 촉발시킬 필요가 있음을 의미합니다 그리고 거기에 새 항목의 바인딩 결국이 코드에서 끝납니다

상위 뷰를 추가하십시오 그래서 RecyclerView는 새로운 시각을 갖게 될 것입니다 RequestLayout을 호출 할 것입니다 그래서 RequestLayout은 일종의 무효화입니다 그러나 말하는 대신에, 나는 다시 그려야한다

그것은, 내가 다시 측정하고 relaid 필요가 말합니다 그리고 그것은 모든 사람들에게 영향을 미칠 수 있습니다 그래서 우리는 기본적으로 RequestLayout을 모든 방법으로 전달합니다 무효처럼 나무를 올리십시오 그런 다음 전체 트리에서 측정 및 레이아웃을 수행합니다

거기서 무엇이 바뀌 었는지 보러 그래서 RequestLayout은 부모에서 일어나고, 그리고 그 모든 것이 전파됩니다 그리고 그것은 다시 일정에 잡 힙니다 여행자, 우리 친구 그런 다음 트래버스를 수행하십시오

지금 그릴 물건에 대해 우리는 performMeasure를 할 것입니다 및 performLayout 측정은 기본적으로 모든 의견을 묻습니다 그들이 얼마나 큰 지 알고 싶습니다

그것은 요청입니다 레이아웃이 말하길, 이것은 당신이 얼마나 커질 지에 대한 것입니다 그리고 이것은 당신이 위치 할 곳입니다 그것은 견해와 모든 부모 사이의 협상이다 시스템의 모든 제약 조건에 따라 그래서 우리는 수행을 수행합니다

그것은 기본적으로 측정을 상단에서 호출합니다 그 모든 것이 아래로 전파됩니다 그리고 우리는 모든 정보를 가지고 있습니다 모든 견해가 얼마나 커지고 싶어하는지, 그게 우리가 레이아웃을 계산하기에 충분하다 정보

그런 다음 레이아웃을 트리 전체로 전파합니다 그리고 그 일이 아이템과 부모에게 일어나면 변경된 다음, 실제로 그 항목을 배치합니다 우리는 갈 준비가되어 있습니다 이제 우리는 실제로 물건을 그릴 수 있습니다 모든 것은 이전과 같습니다

여기서 뉘앙스는 단지 레이아웃면이었습니다 중요한 뉘앙스를 제외하고는 우리 모두가 이 RequestLayout과 측정 및 레이아웃에 대한 정보 이 RecyclerView 상황 그러나 RecyclerView는이를 최적화합니다 부모와 자녀에 대해 충분히 알고 있습니다 실제로는 뷰를 상쇄 할 수 있습니다

RequestLayout을하는 대신, 실제로는보기를 이동시킬 수 있습니다 새 항목을 만듭니다 따라서 RecyclerView, 이전 목록보기뿐 아니라 ROMAIN GUY : 이제 우리는 이야기 할 것입니다 우리의 윈도우 컴포지션 인 SurfaceFlinger가, 화면의 모든 창을 합성합니다 이것은 흥미 롭습니다

음, 우선, 뭔가를 배우는 것이 항상 재미 있기 때문입니다 새로운 기술에 대해서뿐만 아니라 이해할 수 있기 때문에 어떤 개념 뒤에 일부 개념 Surface API, SurfaceTexture API, SurfaceView 또는 MediaCodec 그래서 우리가 구성을 이해하기 전에, 우리는 안드로이드에 대한 매우 중요한 개념을 이해해야합니다 버퍼 큐를 호출했다 따라서 이름에서 알 수 있듯이 버퍼 대기열은 우리의 그래픽 버퍼가있는 버퍼 큐에 불과합니다

일반적으로 1 ~ 3 개의 버퍼가 있습니다 내부적으로 다양한 옵션이 있습니다 여기서 우리가 버퍼 큐를 설정할 때, 우리가 원하는 버퍼 수를 요청할 수 있습니다 그리고 매우 중요하게도 버퍼 큐는 두 개의 끝점을 가지고 있습니다 우리에게는 생산자가 있고 우리에게는 소비자가 있습니다

따라서 일반적으로 버퍼 대기열을 사용하는 방법 – 생성자는 dequeueBuffer라는 메서드를 호출합니다 대기열에 있습니다 대기열에서 버퍼를 가져옵니다 이제는 그것을 소유하고 있습니다 그것은 모든 종류의 렌더링을 할 수 있습니다

이것은 픽셀 데이터를 직접 전송할 수 있으며, 그것은 OpenGL을 사용할 수 있습니다, 그것은 캔버스를 사용할 수 있습니다 별로 중요하지 않습니다 OpenGL을 사용하면 기본적으로 마지막에 썰매 버퍼를 호출하면 어떻게됩니까? 그 때 우리는 버퍼 안에 내용을 생성합니다 따라서 제작자가 컨텐트를 제작할 때, 그것은 큐 버퍼를 호출하고, 버퍼에 다시 준다 버퍼 큐에 저장한다

이제 소비자는 다음 버퍼를 잡을 수 있습니다 acquire를 사용하여 대기열에 있습니다 그래서 그것은 획득 버퍼를 호출합니다 큐 내의 최초로 이용 가능한 버퍼 그것은 그것과 관련이있는 것은 무엇이든합니다

그리고 그것이 끝나면, 그것은 release를 호출함으로써 그것을 되돌립니다 그래서 아주 간단한 개념입니다 물론 코드를 보면 모든 헤더 파일과 모든 코드 복잡하다 부분적으로 복잡하다 버퍼 큐의 두 끝점 다른 프로세스에서 살 수 있습니다

그리고 이것은 정확하게 일어납니다 이것은 우리의 곡면 작곡가가 작동하는 방식입니다 따라서 시스템에 창을 만들 때, Window Manager가 있고 SurfaceFlinger가 있습니다 따라서 창 관리자는 효율적입니다 이 시나리오의 제작자 및 SurfaceFlinger 우리의 소비자입니다

그래서 addView에서 Window Manager를 호출하면 – 이 작업은 자동으로 수행됩니다 당신은 토스트를 만들 때 대화를 만들고, 나는 믿습니다 활동을 만들 때 – 내부적으로 우리는 윈도우 객체를 생성한다 이 윈도우 객체는 SurfaceFlinger면에 형제가 있습니다 레이어라고합니다

이름은 조금 혼란 스러울 수 있습니다 그래픽에서는 버퍼와 대기열을 처리해야하기 때문에, 그것이 우리 모두가하는 일이며 우리는 빨리 이름이 없어집니다 그리고 그래픽 팀 – 그게 우리가 생각한 이유야 표면 및 표면 텍스처와 버퍼 큐 및 레이어 및 창 네

그래서 좀 지저분 해 그래서 SurfaceFlinger에 하나의 레이어가 있습니다 그것은 기본적으로 창입니다 레이어가 시스템의 구성 요소입니다 이는 응용 프로그램에 대한 버퍼 대기열을 생성하고 소유합니다

그래서 그것은 버퍼 큐를 생성하고 우리는 애플리케이션에 엔드 포인트를 보내는 방법이있다 서페이스를 만듭니다 따라서 API 중 하나에서 Surface를 볼 때마다 당신은 정말로 버퍼 큐의 프로듀서 끝 점이 있습니다 귀하의 프로세스에서 시스템의 다른 어딘가에 살고있는 또는 일부 다른 프로세스에서 대부분의 시간은 SurfaceFlinger 내부에있게 될 것입니다

이제는 전형적인 유스 케이스로, 애플리케이션 개발자로서 Surface API를 다루려고한다 SurfaceView를 만들 때 따라서 SurfaceView가 작동하는 방식은 자체 표면 인 창입니다 우리가 여기에서 볼 수 있습니다 그럼 우리는 그 표면을 통해 구멍을 효과적으로 잘라 냈습니다

그리고 창 관리자와 SurfaceFlinger에게 물어 봅니다 두 번째 서페이스를 만듭니다 그리고 우리는 그것을 밑으로 밀어 넣습니다 그것들이 같은 창문의 일부인 척하십시오 그러나 그들은 그렇지 않습니다

그것들은 두 개의 다른 표면입니다 그들은 두 개의 서로 다른 버퍼 큐를 가지고 있는데, 그들은 서로 완전히 독립적 일 수 있습니다 따라서 SurfaceView를 사용하면 아마도 OpenGL이나 Vulcan이나 미디어 플레이어를 사용할 것입니다 콘텐츠를 생성합니다 예를 들어,이 경우 OpenGL ES가 있습니다

짐을 뽑아 버릴거야 그것은 약간의 렌더링을 할 것입니다 버퍼를 Surface로 대기열에 넣고, 따라서 버퍼 큐에 저장됩니다 표면 질감을 사용하면 소비자가 OpenGL이됩니다 그래서 텍스쳐 ID를줌으로써 SurfaceTexture를 만듭니다

이 경우 SurfaceTexture가 생성하고 소유합니다 버퍼 큐, 그래서 종종 자신의 프로세스에있을 것입니다 그런 다음 SurfaceTexture를 전달해야합니다 어떤 제작자에게, 그리고 이것을하기 위해, 자신이 엔드 포인트를 작성하고, 서페이스를 만듭니다 SurfaceTexture를 취하는 Surface의 생성자가 있습니다

그래서 당신은 당신의 서피스를 만들고 그것을 보냅니다 다른 응용 프로그램으로 이동 한 다음 OpenGL 코드를 렌더링 할 준비가되면, 그것은 acquire를 호출하여 버퍼 큐에서 버퍼를 가져옵니다 렌더링을 수행합니다 다른 큐의 내부에 버퍼를 생성합니다 완료되면 릴리스를 호출 할 수 있습니다

TextureView는 UI 툴킷의 일부인 위젯입니다 SurfaceTexture의 혜택을 누릴 수 있습니다 이 특별한 경우 렌더링 스레드 우리가 얘기 한 것은 SurfaceTexture의 소비자입니다 당신은 여전히 ​​Surface를 얻는 책임이 있습니다 TextureView에서 그것을주고 당신이 선택한 프로듀서에게

당신은 그것을 멋진 이미지라고 생각할 수 있습니다 정말 효율적으로 업데이트 할 수있는 이미지보기입니다 하드웨어 가속을 사용합니다 최근 몇 년 동안 우리는 당신에게 말 했었습니다 TextureView가 해결책이었습니다

SurfaceView의, 비디오 또는 OpenGL을 통합하고자 할 때 복잡한 응용 프로그램 내에서 렌더링 예를 들어, ListView 또는 CountView 또는 움직이는 모든 것 SurfaceView는 두 개의 다른 창으로 구성되어 있기 때문에, 자연적으로 그렇게 효율적이었습니다 렌더링과 동기화되지 않았습니다 자신의 응용 프로그램의

이 문제는 Android 최신 버전에서 수정되었습니다 그래서 대부분의 시간, 안드로이드의 최신 버전에서, TextureView 대신 SurfaceView를 사용해야합니다 필요한 경우에만 TextureView를 사용하십시오 어쩌면 당신의 다른 견해들 사이에 끼어 있을지도 모릅니다 또는 SurfaceView에서 지원하지 않는 애니메이션을 사용하십시오

CHET HAASE : O 릴리스라고 생각합니다 그건 O– 어쩌면 N 이네 어쩌면 ROMAIN GUY : 둘 중 하나 테스트를해야합니다

CHET HAASE : 우리가 최근에 말한 이유입니다 ROMAIN GUY : 그리고 여기에 다른 제작자들의리스트가 있습니다 및 플랫폼의 소비자 그래서 우리는 SurfaceView와 SurfaceTexture를 보았습니다 OpenGL ES는 제작자입니다

또한 소비자 일 수도 있습니다 Chet가 그 라이프 사이클에서 어떤 시점에서, 우리는 버퍼를 얻는다 렌더링에서 dequeueBuffer를 호출 할 때입니다 thread로 보내고, 이것은 일반적으로, 우리가 첫 무승부를 할 때 마지막에는 eglSwapBuffer를 호출 할 때 운전자에게 우리가 우리의 프레임을 다 끝냈다는 것을 알리기 위해, 실제로 프레임을 생성합니다

다시 버퍼 큐에 넣으십시오 Vulcan, MediaPlayer, 및 MediaCodec 그리고 우리는 플랫폼 전반에 걸쳐 훨씬 더 많은 것을 가지고 있습니다 자, 실제 작곡 그래서 우리는 여러 창을 만들었습니다

각각 자신의 레이어가 있습니다 SurfaceFlinger는 모든 레이어에 대해 알고 있으며, 그리고 SurfaceFlinger는 실제로 디스플레이와 대화하기 위해 하드웨어 작곡가 (Hardware Composer)라고 불리는 것에 대해 이야기합니다 하드웨어 합성기는 하드웨어 추상화 레이어입니다 우리가 GPU 사용을 피하기 위해 사용하기 때문에 화면에 모든 창을 합성해야합니다 이유 중 하나는 배터리를 절약하는 것입니다

그렇게 효율적으로 전력을 소비합니다 하지만 응용 프로그램에 액세스 권한이 있는지 확인해야합니다 기본적으로 GPU의 모든 기능에 적용됩니다 우리는 당신을 멀리하지 않습니다 그리고 과거에는 들었을 수도 있습니다

창 수를 제한해야한다고 당신이 화면에 넣어 그리고 당신은 왜 몇 슬라이드에서 볼 수 있습니다 그래서 우리는 하드웨어 작곡가가 있습니다 효과적으로 하드웨어 블록입니다 멀티플 비트 맵을 사용하면 정말 빠릅니다

화면에서 함께 구성 할 수 있습니다 그리고 우리는 방금 이것에 대해 이야기했습니다 그래서 실제로 작동하는 방법 – 하드웨어 작곡가 정말 일종의 프로토콜입니다 여기에서는 이전 Hardware Composer에 대해 설명하겠습니다 하드웨어 작곡가 1 또는 하드웨어 작곡가 0이라고합니다

나는 항상 혼란 스럽다 우리는 Hardware Composer 2라는 것을 사용합니다 하지만 훨씬 더 복잡해 그래서 나는 그렇지 않다 여기에서 설명 할 것입니다 그러나 그것의 요지는 기본적으로 같은 방식으로 작동합니다

그래서 SurfaceFlinger는 많은 레이어를 가지고 있습니다 하드웨어 작곡가에서 준비를 할 것입니다 그리고 더 오래된 레이어를 Hardware Composer로 보냅니다 모든 계층에서 무엇을하고 싶은지 알려달라고 요청하십시오 모든 하드웨어 합성기는 독점적 인 조각입니다 사용중인 휴대 전화 또는 태블릿의 하드웨어 정보 우리가 쓸 수있는 방법이 없습니다

모든 다른 하드웨어 작곡가를위한 드라이버 저 밖에 그래서 대신, 하드웨어 작곡가의 그가하고 싶은 것을 우리에게 말해 줄 것입니다 따라서이 경우에는 레이어가 있습니다 하드웨어 작성자가 오버레이로 답장합니다 즉, 하드웨어 작성자가 픽셀 형식을 이해하고 있음을 의미합니다

그 창에 대해 그것을 처리 할 수 ​​있다고 알려줍니다 그리고 그 창문을 위해 작곡을 할 것입니다 그래서 우리는 계속 간다 두 번째 레이어에 오버레이가 표시됩니다 세 번째 레이어를 오버레이한다고 말하고 있습니다

그래서 훌륭합니다 즉, 모든 구성을 자동으로 수행 할 수 있습니다 우리를 대신하여 매우 효율적인 방법으로 이제 우리 지도자들은 모두 오버레이와 일치합니다 우리는 세트라고 부른다 이번에는 모든 레이어를 하드웨어 작곡가에게 보냅니다

실제 작곡을 위해, 그리고 하드웨어 작곡가 모든 것을 화면에 보냅니다 이제는 더 복잡한 예입니다 그래서 우리는 많은 수의 레이어를 가지고 있습니다 우리는 준비라고 부릅니다 처음에는 모든 것이 잘됩니다

하드웨어 작곡가는 오버레이라고 말합니다 그것은 그것을 처리 할 수 ​​있습니다 그러나 어떤 이유로, 다음 하나를 위해, 그것은 말한다, 프레임 버퍼 이렇게하면 픽셀 형식을 사용하는 경우에 발생할 수 있습니다 지원되는 것일 수도 있습니다

회전을 사용하여, 그리고 하드웨어 작곡가 알지 못한다 회전을 처리하는 방법 또는 화면에 너무 많은 레이어 또는 여러 가지 이유 그 하드웨어 작곡가에 특유한 것입니다 CHASE HAASE : 이것은 기기에서 훨씬 더 보편적이었습니다 아마 3 년에서 4 년 또는 그보다 더 오래 전에 그래, 맞아

우리는 약 4 개의 하드웨어 레이어를 사용했습니다 네가 사용할 수있는 네 명이야 5 점입니다 네 명이야 그래서 우리는 4 개를 가지고 있었고, Pixel 2에는, 너무 많은 세부 사항으로 들어가기없이, 당신은 기본적으로 7을 가지고 있습니다

그래서 예전보다 훨씬 나아졌습니다 그러나 Pixel 2 XL을 사용하는 경우 두 개의 레이어를 사용합니다 둥근 모서리를 그립니다 그래서 당신은 실제로 7이 없습니다 너는 5 명이있다

실제로 병합 될 수 있기 때문에 실제로 6 개입니다 하드웨어 작곡가 어쨌든, 많은 세부 사항은 정말 복잡 할 수 있습니다 모든 세부 사항을 알 필요는 없습니다 어쨌든이 경우 우리는 하나의 레이어를 가지고 있습니다

하드웨어 작곡가로 바로 갈 수 있습니다 프레임 버퍼로 표시된 두 개의 레이어가 있습니다 그리고 그것이 우리를 위해 어려운 부분이 시작되는 곳입니다 하드웨어에서 처리하지 않는 레이어가있을 때 작곡가, 우리는 그들을 합성하기 위해 GPU를 사용해야합니다 그래서 SurfaceFlinger는 모든 것을 할 수 있어야합니다

하드웨어가 할 수있는 것 그리고 그 상황에서, 우리는 기본적으로, 스크래치 버퍼 – 다른 레이어 – 우리가 알고있는 형식으로 하드웨어 작곡가 수락 할 수 있습니다 그런 다음 사용자 정의 OpenGL 코드를 사용합니다 그 두 계층의 구성을 스스로 할 수 있습니다 그럼, 일단 우리가 그 부분을 다 끝내면, 우리는 두 개의 레이어 만 남았고 우리는 그것들이 Hardware Composer로 보내질 수 있다는 것을 알아라

그래서 그것이 우리가하는 일입니다 우리는 set을 호출 한 다음 화면에 표시합니다 CHET HAASE : 그럼 언젠가 호기심이 생기면, 이 명령은 adb shell dumpsys SurfaceFlinger 명령을 실행할 수 있습니다 ROMAIN GUY : 자본금 S, 자본금 F CHET HAASE : 매우 중요합니다

그리고 그것은 당신이 원하는 것보다 더 많은 정보를 얻게 될 것입니다 그러나 그것이 당신에게 보여줄 것 중 하나 화면의 창에 대한 테이블입니다 현재 그들이 대표되고 있는지 여부 오버레이 또는 프레임 버퍼로 ROMAIN GUY :이 명령을 꽤 실행해야하지만 내부적으로 수많은 최적화가 있기 때문에 신속하게 처리 할 수 ​​있습니다 따라서 레이어가 잠시 동안 화면에 있었다

우리는 그들이 변화하지 않는다는 것을 알고 있습니다 그들의 하드웨어 작곡가가 그들을 붕괴시키고 있을지 모른다 다시 바뀔 때까지 단일 레이어로 그래서 그 명령의 출력은 때로는 조금 있습니다 오해의 소지가 있습니다 결과를 볼 수도 있기 때문입니다

시간에 기반한 최적화 따라서 가장 좋은 방법은 일반적으로이 작업을 실행하는 것입니다 애니메이션이나 무언가를 운영 할 때 화면에서 변경 중입니다 그것은 당신에게 가장 가치있는 정보가 될 것입니다 그래서 우리가 이야기하지 않은 몇 가지 다른 것들

텍스트를 무효화하는 변형을 사용하라고 알려 왔습니다 직사각형 뷰의 일부만 무효화 할 수 있습니다 당신이 다시 칠해야 할 필요가 있음을 알았습니다 이는 구형 Android 기기에서 특히 중요했습니다

대역폭이 극도로 제한 되었기 때문입니다 우리는 소프트웨어 렌더링을 사용하고있었습니다 그리고 우리를위한 GPU 렌더링의 초창기에도, 우리는 꽤 쉽게 GPU를 맥 아웃했다 그래서 그것들은 정말로 중요한 저축이었습니다 더 이상이 작업을 수행 할 필요가 없습니다

심지어 최신 버전의 Android에서도 이 기능이 사용 중지되기 전에 실제로는 시스템에서 무시됩니다 이제 어떻게 될까요? 무효화하거나 무효화 할 때마다 뷰에 직사각형이있는 경우 렌더링 스레드의 전체보기를 재검토하려고합니다 그 유일한 손상된 지역을 재 계산하십시오 그것에 대해 걱정할 필요가 없습니다 그리고 우리가 제거하고있는 이유 중 하나 저축을 위해 더 이상 필요하지 않을뿐만 아니라, 하지만 오류가 발생하기 쉽기 때문입니다

한 번에 하나씩 오류나 반올림하는 것이 쉽습니다 오류 및 화면에 아티팩트를 가져올 수 있습니다 그리고 쳇과 나는 그걸 증명할 수있어 우리가 너무 많은 버그를 링크 시켰기 때문에 API 사용 그리고 프레임 워크 자체에는 여전히 버그가 있습니다 그 주위에

이제는 걱정할 필요가 없습니다 RecyclerView는 이제 프리 페치를 수행 할 수 있습니다 항목의 미리 CHASE HAASE : 예, 우리는 이것을 일찍 언급했습니다 이것은 우리가 지금 나가고있는 승리 중 하나입니다

때문에 별도의 렌더링 스레드를 가지고, 지금, 음, 유휴 시간이 있어요 UI 스레드는 동기화 된 후에 작업이 완료되었습니다 음, 유휴 시간을 생산적으로 사용할 수 있습니다 물건을 가져 오는 것과 같은 다른 일을 할 때 그것은 다음 몇 프레임에서 필요할지도 모른다는 것을 알고 있습니다 로망 가이 : 작곡을 위해서, 내부적으로, 우리는 실제 디스플레이의 개념을 가지고 있습니다

이것은 사용할 수있는 API입니다 예를 들어, 그게 우리가 스크린 샷을 찍을 때 사용하는 것입니다 또는 비디오를 녹음 할 때 또는 우리가 캐스팅 할 때 – 예를 들어 Chromecasting 우리가 효과적으로하는 것은 SurfaceFlinger에게 컴포지션을 수행하지만 직접 표시하지는 않습니다 다른 표면으로

그래서 이것은 표면을 만드는 또 다른 방법입니다 관심이 있으시면 훌륭한 샘플 애플리케이션이 있습니다 GitHub에서 K를 사용할 수있는 Graphika가 있습니다 그것은 그래픽 회원이 썼다 몇 년 전에 팀에

그것은 기본적으로 모든 것을 모아 놓은 것입니다 당신은 SurfaceFlinger, Surface, 미디어 인코더가있는 SurfaceView와 가상 디스플레이가 결합되어 있습니다 이 코드는 매우 흥미로운 코드입니다 색상 변환 Android O에서는 색상 관리, 이것이 우리가 적용 할 수있는 색 변환 중 하나입니다

야간 조명과 같은 것들도 색상 변환입니다 우리는 또한 색맹 시뮬레이션을합니다 그것들은 하드웨어에 의해 처리 될 수 있습니다 특정 상황에서 작곡가, 그리고 그들은 성능 문제의 원인이 될 수 있습니다 예를 들어 잠시 후, 야간 조명 N5X 또는 N6B에서 지원되지 않았습니다

이유 중 하나는 하드웨어였습니다 우리는 색 변환을 할 수있는 드라이버가 없었습니다 그래서 우리는 GPU 구성으로 돌아 가야했습니다 정말 비쌌습니다 배터리를 아프게 했으므로 장치에 기능이 있습니다

그리고 Chet가 말했듯이, 더 많은 세부 사항들이 많이 있습니다 렌더링 파이프 라인에 대해 이것은 단지 매우 높은 수준의 개요였습니다 우리는 과거에 많은 회담을 가졌습니다 더 자세히 설명하는 우리는 예를 들어, UI 렌더링 자체에서, 일괄 처리 및 병합을 어떻게 처리할까요? 그런 종류의 최적화 그래서 당신이 관심이 있다면, 당신은 그들을 참조 할 수 있습니다

그림자 계산은 흥미 롭습니다 나는 우리가 우리가 이야기 한 이야기가 있었다고 생각한다 그 세부 사항의 그러나 렌더링 파이프 라인에 정확히 어디에서 적합합니까? 일종의 영리합니다 그러나 그렇다

더 많이 거기에서 계속하고있다 그러나 잘만되면, 이것은 Android에서 어떻게 작동하는지 일반적인 감각을 제공합니다 ROMAIN GUY : 그걸로 끝났습니다 우리가 거기 멈출거야 고맙습니다

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

Android Meets TensorFlow: How to Accelerate Your App with AI (Google I/O ’17)

[음악 재생] KAZ SATO : 고맙습니다 우리 세션에 참석해 주셔서 감사합니다

"Android Meets TensorFlow " 저는 사토 카즈입니다 저는 Google Cloud Platform 팀의 개발자 대행사입니다 과– HAK MATSUDA : 안녕하세요 좋은 아침

아주 이른 아침에와 주셔서 감사합니다 나는 아침에 사람이 아니기 때문에 나는 조금 졸려있다 어쨌든, 제 이름은 마츠다 하쿠로입니다 나는 안드로이드 게임 개발자 옹호자이다 및 고유 기술

KAZ SATO : 그래서 오늘,이 세션에서, 우리는이 주제들에 대해 토론하고 싶습니다 그래서 이번 세션의 첫 번째 부분은, 나는 AI, 기계 학습, 신경 네트워크, 깊은 학습, Google이 이러한 종류의 기술을 어떻게 사용하고 있는지 우리의 서비스를 구현합니다 그리고 TensorFlow는 무엇입니까? 그것은 건물을위한 오픈 소스 라이브러리입니다 너 자신의 신경망 그리고 나는 Hak에 그 무대를 전달할 것이다

그는 당신이 안드로이드를 어떻게 구축 할 수 있는지 논의 할 것입니다 TensorFlow에서 제공하는 애플리케이션 최적화 방법 마지막으로 미리보기를하고 싶습니다 TensorFlow Lite 및 Android와 같은 새로운 기술 신경 네트워크 API 그렇다면 기계 학습과 신경망은 무엇입니까? 얼마나 많은 사람들이 실제로 신경 네트워크를 시도 했습니까? 몇 명? 오, 너무 많은 사람들! 20 %처럼? 실제로 얼마나 많은 사람들이 신경망을 실제로 사용 했습니까? 모바일 장치에서? 매우 감사합니다 나는 10 명의 사람들을 발견했다

오늘은 TensorFlow를 사용하는 방법을 배우고 싶습니다 기계 학습 모듈 실행 내부 모바일 애플리케이션 너무 많은 유행어가있었습니다 인공 지능, 기계 학습, 신경 네트워크, 또는 깊은 학습 우리는 그 유행어에 대해 들었습니다

지난 몇 년간 차이점이 뭐야? 인공 지능이나 인공 지능 – 당신은 건물과 같은 똑똑한 것을 만들기위한 과학입니다 자율 주행 차 또는 아름다운 그림을 그리거나 음악을 작곡하는 컴퓨터 AI의 비전을 실현하는 한 가지 방법 기계 학습에 있습니다 기계 학습은 당신은 컴퓨터가 스스로 훈련하는 것을 허용 할 수 있습니다 모든 단계를 지시하는 인간 프로그래머, 자체적으로 데이터를 처리합니다

그리고 기계 학습에서 많은 다른 알고리즘 중 하나 신경 네트워크입니다 그리고 2012 년 이래로 우리는 큰 돌파구를 보았습니다 신경 네트워크의 세계에서, 특히 이미지 인식, 음성 인식, 또는 자연어 처리 및 기타 여러 응용 프로그램에 사용할 수 있습니다 그리고 Google에서 우리는 몇 년 동안 신경 네트워크 기술을 개발했다 그렇다면 신경 네트워크 란 무엇입니까? 수학의 함수처럼 생각할 수 있습니다

또는 프로그래밍 언어의 함수 따라서 모든 종류의 데이터를 입력으로 넣을 수 있습니다 일부 행렬 연산 또는 계산 수행 신경 네트워크 내부 그런 다음, 결과적으로 출력 벡터를 얻을 수 있습니다 많은 레이블이나 추측 값을 가지고있다

예를 들어 이미지가 많은 경우, 당신은 분류하기 위해 신경 네트워크를 훈련시킬 수 있습니다 어느 것이 고양이의 이미지인지 또는 개 이미지인지 그리고 이것은 사용의 한 예일뿐입니다 신경 네트워크의 경우 기술을 적용하여 모든 종류의 비즈니스를 해결할 수 있습니다

문제가 있습니다 예를 들어, 게임 서버가 많은 경우, 다음 모든 사용자 활동을 변환 할 수 있습니다, 플레이어 활동, 숫자의 무리로 그들을 변환, 벡터와 같은 신경망을 학습하고 신경 네트워크를 훈련 시키십시오 게임 서버의 플레이어 유형을 분류합니다 예를 들어, 어떤 치욕적 인 플레이어를 찾고 싶다면 자동화 된 스크립트를 사용하여 귀하의 서버에서 속이려고하거나 프리미엄 플레이어를 찾기 위해 신경망을 사용할 수 있습니다 게임 서버에서 점점 더 많은 아이템을 구입할 수 있습니다

그래서 이것은 하나의 가능한 예일뿐입니다 가능한 수천 가지 응용 프로그램 중 Google은 심층 학습 기술을 사용해 왔습니다 100 개가 넘는 스마트 기능 구현을위한 Google 검색, Android, Play, 및 많은 다른 응용 프로그램 예를 들어 Google 검색을 매일 사용하는 경우, 즉, 깊은 학습 기술에 액세스하고 있음을 의미합니다 매일 Google에서 제공합니다

2015 년에 RankBrain을 도입 했으므로, 이는 깊은 학습 기반 랭킹 알고리즘 인 정의 및 순위 지정을위한 신호를 생성합니다 검색 결과 모바일 애플리케이션을 살펴 본다면 Google의 예를 들어 Google 포토는 하나입니다 가장 성공적인 모바일 애플리케이션의 분석과 이해를 위해 깊은 학습을 해왔다 스마트 폰이 찍은 각 이미지의 내용, 그래서 직접 태그 나 키워드를 넣을 필요가 없습니다 대신, 당신은 단지 강아지, 당신의 친구의 이름, 또는 결혼식 파티 가이 콘텐츠를 기반으로 이미지를 찾을 수 있습니다

스마트 회신은 회신 옵션을 표시하는 기능입니다 각 이메일 스레드로 그래서 자연 언어 처리를 사용합니다 신경망 모델에 의해 구동 됨 전자 메일 교환의 컨텍스트를 이해하려고 시도합니다 그리고 지금, 응답의 12 % 이상 스마트 회신 기능으로 생성됩니다

이제 컴퓨터로 이메일을 작성했다고 말할 수 있습니다 더 이상 인간이 아닙니다 Google 번역 앱이 최근에 소개되었습니다 새로운 신경 번역 모델 인 품질, 특히 유창함이 향상되었습니다 번역 된 텍스트의 따라서 가능한 많은 유스 케이스가 있습니다

기계 학습 간의 결합 모바일 애플리케이션, 시작 이미지 인식, OCR, 음성 텍스트 텍스트 음성 변환, 번역 및 NLP가 포함됩니다 특히 기계 학습을 적용 할 수 있습니다 모션 감지 또는 GPS와 같은 모바일 전용 애플리케이션 위치 추적 그리고 왜 당신은 당신의 기계를 운영하고 싶습니까? 학습 모델, 신경 네트워크 모바일 애플리케이션 내부의 모델? 기계 학습을 사용함으로써, 상당한 양의 트래픽을 줄일 수 있습니다 그리고 당신은 훨씬 더 빠른 응답을 얻을 수 있습니다

귀하의 클라우드 서비스에서 원시 데이터에서 의미를 추출 할 수 있기 때문입니다 그게 무슨 뜻이야? 예를 들어, 기계 학습을 사용하는 경우 이미지 인식, 가장 쉬운 방법 이를 구현하기 위해서는 모든 원시 이미지 데이터를 보내야합니다 카메라에 의해 서버로 전송됩니다 대신에 기계 학습 모델을 실행하게 할 수 있습니다

귀하의 모바일 응용 프로그램 내부에서 귀하의 모바일 응용 프로그램 각 이미지에 어떤 종류의 물체가 있는지를 인식 할 수 있고, 그래서 당신은 단지 꽃과 같은 라벨을 보낼 수 있습니다 또는 사람의 얼굴을 서버에 보냅니다 트래픽을 1/10 또는 1/100로 줄일 ​​수 있습니다 상당한 양의 트래픽 절감 효과가 있습니다 다른 예는 모션 디텍션 일 수 있습니다

여기서 모든 움직임, 감각 데이터를 수집합니다 – 원본 이미지를 서버로 직접 보내지 않고, 기계 학습 알고리즘을 사용하여 추출 할 수 있습니다 소위 특징 벡터 기능 벡터는 숫자의 무리 일뿐입니다 특성을 나타내는 100 개 또는 1,000 개의 숫자 또는 모션 센서로부터의 모션의 서명 따라서 100 또는 1,000 개의 숫자 만 보낼 수 있습니다

특징 벡터에서 서버로 그리고 빌드의 출발점은 무엇입니까? 기계 학습으로 구동되는 모바일 애플리케이션? 출발점은 TensorFlow, 머신의 오픈 소스 라이브러리 Google의 정보 TensorFlow는 최신 프레임 워크입니다 기계 학습 또는 인공 지능 기반 서비스 개발을위한 개발 Google에 2015 년 11 월에 오픈했습니다 이제 TensorFlow가 가장 인기있는 프레임 워크입니다

신경 네트워크 또는 세계에서 깊은 학습을 구축합니다 TensorFlow로 얻을 수있는 한 가지 이점 개발의 용이성이다 시작하기가 정말 쉽습니다 몇 줄의 파이썬 코드를 작성할 수 있습니다 또는 수십 줄의 파이썬 코드를 사용하여 신경망을 정의하십시오

혼자서 실제로이 기술은 사람들에게 매우 가치가 있습니다 나는 정교한 수학적 지식이 없기 때문에 나를 좋아한다 배경 그래서 신경망에 관한 교과서를 읽기 시작했을 때, 나는 교과서에 많은 수학 방정식을 발견했다

차별 증식, 역 전파, 및 그라디언트 디센트 그리고 저는 모든 것을 혼자서 구현하고 싶지 않았습니다 대신, 이제 TensorFlow를 다운로드 할 수 있습니다 여기서 한 줄의 파이썬 코드를 작성할 수 있습니다 GradientDescentOptimizer와 같습니다

그 한 줄의 코드는 캡슐화 할 수 있습니다 그래디언트 디센트, 역 전파, 또는 구현 된 기타 최신 알고리즘 Google 엔지니어가 그래서 너는 너 자신을 가질 필요가 없다 신경망을 구현하도록 설정된 기술 기술을 처음부터 또한 TensorFlow의 이점 이식성과 확장 성입니다 예를 들어, 기술로 시작한 TensorFlow를 다운로드 할 수 있습니다

Mac 또는 Windows에서만 사용할 수 있습니다 아주 간단한 샘플의 Hello World 종류로 재생할 수 있습니다 그러나 기술에 대해 진지하게 생각하고 있다면 예를 들어 모델을 처음부터 렌더링하려는 경우 고양이의 이미지를 인식하려면 다음을 사용하십시오 GPU 서버 – GPU는 10 배 또는 50 배이기 때문에 CPU 또는 Mac 또는 Windows보다 빠름 – 모델 훈련 하지만 Google 어스와 같은 많은 대기업 또는 다른 모든 기업에서 클라우드에서 수십 또는 수백 개의 GPU 실행 컴퓨팅 파워가 가장 크기 때문에 깊은 학습 기술에 대한 도전

하지만 여전히 큰 변화는 필요 없습니다 귀하의 TensorFlow 신경망에, TensorFlow는 확장 가능하도록 설계 되었기 때문에 따라서 일단 신경 네트워크를 정의하면, 너는 그것을 배우고, 훈련하고, 사용할 수있다 단일 CPU 또는 다중 GPU에서, 또는 수백 개의 GPU 또는 TPU 또는 Tensor 처리 장치, Google에서 설계 한 ASIC 또는 맞춤형 ADSI입니다 그리고 일단 모델 교육을 마치면, 당신은 모델을 복사 할 수 있습니다 예를 들어, 이미지 인식을 위해, 단일 모델은 100 메가 바이트 데이터, 매개 변수

이러한 매개 변수를 모바일 장치에 복사 할 수 있습니다 Android, iOS 또는 Raspberry Pi와 같은 그리고 TensorFloworg 웹 사이트에 가면, 당신은 임베디드 시스템을위한 샘플 코드를 찾을 수있다 및 휴대 전화 그런 다음 TensorFlow에서 얻을 수있는 이점 지역 사회와 생태계입니다

따라서 실용적인 제작 품질을 원한다면 솔루션을 제공한다면 TensorFlow는 그 최선의 대답 너무 많은 대기업과 개발자가 있기 때문에 심각한 개발을 위해 TensorFlow를 사용하는 사람들, ARM, 이베이, 인텔, 드롭 박스, 트위터 등이있다 그들은 모두 TensorFlow를 사용하고 있습니다 이제는 무대를 Hak에 전달하고 싶습니다 누가 당신이 안드로이드를 어떻게 구현할 수 있는지 이야기 할 것입니다

TensorFlow에서 제공하는 애플리케이션 [박수 갈채] 오 감사합니다 Hak MATSUDA : 고마워요, Kazu Android 부분으로 넘어 갑시다 Kazu가 말했듯이, 우리는 많은 것을 발견했습니다

TensorFlow를 실행하는 유용한 사용 사례 모바일 장치에 대한 추론 우리가 어떻게 통합 할 수 있는지 살펴 보겠습니다 모바일 장치의 TensorFlow 추론 우리가 어떻게 그것을 최적화 할 수 있는지에 대해 설명합니다 TensorFlow는 다음을 포함한 여러 모바일 플랫폼을 지원합니다 Android, iOS 및 Raspberry Pi와 호환됩니다

이 강의에서는 Android와 같은 휴대 기기에 중점을두고 및 IOS TensorFlow 공유 객체를 처음부터 빌드하기 조금 까다 롭습니다 여러 단계를 거치기 시작했습니다 GitHub의 [INAUDIBLE], Bazel 설치, 설치 안드로이드 스튜디오, 안드로이드 SDK 및 NDK, 마지막으로 설정 파일을 편집하는 등의 작업을 수행 할 수 있습니다 그러나 우리에게는 오늘 좋은 소식이 있습니다

이 IO를 발표하면서 방금 JSON 통합을 추가했습니다 그 단계가 훨씬 쉬워집니다 [박수 갈채] 고마워요, 고마워요 빌드 줄에 하나의 선을 추가하기 만하면됩니다 Gradle은 나머지 단계를 처리합니다

도서관 자료실에서 [INAUDIBLE] TensorFlow 공유 객체가 JCenter에서 다운로드되면, 응용 프로그램과 자동으로 연결됩니다 또한 미리 작성된 모델을 가져올 수 있습니다 파일 (예 : 시작, 스타일 화, 등등, 구름 에서뿐만 아니라 iOS에서도 쉽게 사용할 수 있습니다 우리는 Cocoapod 통합을 시작했습니다

지금은 아주 간단합니다 TensorFlow API를 사용하는 방법을 살펴 보겠습니다 Android 유추 라이브러리를 출시했습니다 Java 응용 프로그램 용 TensorFlow를 통합합니다 라이브러리는 Java의 [INAUDIBLE]입니다

네이티브 구현에 성능에 미치는 영향은 최소화됩니다 처음에는 TensorFlow 유추 인터페이스를 만들고, APK의 자산에서 모델 파일을 엽니 다 그런 다음 피드 API를 사용하여 입력 피드를 설정하십시오 모바일에서는 입력 피드가 카메라, 가속도계, 등등

그런 다음 추론을 실행하십시오 마지막으로 결과를 가져올 수 있습니다 거기에 fetch 메소드를 사용합니다 이 통화가 모두 통화를 차단하고 있음을 알 수 있습니다 따라서 작업자 스레드에서 실행하는 대신 작업 스레드에서 실행하려고합니다

API는 길고 오랜 시간이 걸릴 것이기 때문에 메인 스레드, 몇 초 이것은 Java API입니다 물론 일반 C ++ API도 사용할 수 있습니다 당신이 C ++을 사랑한다면 내가하는 것처럼 승인

데모로 넘어 갑시다 이것은 Android에서 실행되는 TensorFlow 샘플입니다 샘플에는 세 가지 모드가 있습니다 첫 번째는 Inception v3을 실행 중입니다 카메라 이미지를 분류합니다

또한 분류 된 얼굴과 양식화 된 사진이 있습니다 견본 이 사진은 카메라 미리보기에 예술적 필터를 적용하고 있습니다 [박수 갈채] 고맙습니다 그리고 데모에서 한 가지 특별한 점 GPU를 사용하여 데모를 약간 수정 한 것입니다

[INAUDIBLE] 계산 쉐이더를 사용하십시오 [INAUDIBLE] 샘플은 CPU를 지원합니다 새로운 최적화 하지만 GPU를 사용하여 그것을 조정했습니다 그리고 이것은 단지 실험을 위해서 였고 재미를 위해서였습니다

그것은 꽤 재미 있었다 그리고 저는 TensorFlow를 GPU에 맞게 최적화하는 방법을 많이 배웠습니다 기본적으로 Android 기기에서 성능 제한 요소 대부분 메모리 대역폭에서 발생합니다 컴퓨팅 자체가 아니라 메모리 대역폭 줄이기 많은 도움이되었습니다 예를 들어, 어떤 [INAUDIBLE] 커널에서, 그것은 32 32 x 32 32 x 4 샘플을 가져 오는 중입니다

하나의 출력 값을 생성하기 만하면됩니다 Compute의 관점에서 엄청난 양의 데이터입니다 셰이더 따라서 메모리 대역폭은 안드로이드에있어 결정적으로 중요합니다 및 모바일 장치 최적화

어쨌든, 모두 TensorFlow 코드를 조정할 수 있습니다 오픈 소스이기 때문입니다 오픈 소스의 아름다움입니다 맞죠? 이제 모바일에 TensorFlow 추론을 통합 할 수 있습니다 내가 아주 쉽게 설명했다

그러나 성능에는 아직 문제가 있습니다 심지어 모바일 장치 성능 상당히 증가했다 클라우드 나 데스크톱보다 컴퓨팅 성능이 떨어집니다 또한 제한된 RAM을 가지고 있습니다 모바일에 소중한 자료

응용 프로그램이 1 기가 바이트의 RAM을 사용한다면, 그때 응용 프로그램은 매우 가능성이 높습니다 시스템 자체에 의해 죽임을 당한다 응용 프로그램이 백그라운드로 이동하면 행복한 상황이 아니지, 그렇지? TensorFlow를 최적화 할 수있는 방법에 대해 살펴 보겠습니다 그래픽, 메모리 사용 공간 감소, 런타임 성능 향상 및로드 시간 개선 잘 이 모델은 Inception v3 모델의 모델입니다 이 모델은 약 91 메가 바이트의 저장 공간을 필요로하며, 2,500 만 가지 매개 변수가 있습니다

그리고 바이너리 크기는 12 메가 바이트 걸릴 것입니다 그것은 거대합니다 그리고 우리는 그래프를 최적화하는 여러 기법을 가지고 있습니다 Graph Transform (그래프 변환)을 사용하여 그래프 고정 도구, 양자화, 메모리 매핑 등 가자

그래프 정지는로드 중 하나입니다 시간 최적화, 변수 노드를 변환 상수 노드에 변수 노드 란 무엇입니까? TensorFlow에서 변수 노드는 다른 파일에서 시작됩니다 그러나 상수 노드가 포함되어 있습니다 그래프 def 자체에서

따라서 변수를 상수 노드로 이동하십시오 여러 개의 파일을 하나의 파일로 연결할 수 있으며, [INAUDIBLE]처럼 그것은 약간의 성능이 될 것입니다 모바일에서 이기고 다루기가 더 쉽다 그렇게하기 위해 우리는 동결 그래프 점 파이썬 스크립트를 준비합니다

그래프 변환 도구는 친구입니다 이 도구는 다양한 최적화 작업을 지원하며, 추측을 위해 사용되지 않는 노드를 스트립하는 것과 같은 하지만 그것은 학습 문구에서만 사용됩니다 추론 노드를 배울 때 필요하지 않습니다 나는 그것이 현재 약간의 작은 단계가 필요할 것이라고 생각한다

어떤 노드가 시작 노드인지 판단한다 어느 노드가 출력 노드인지를 결정한다 따라서이 도구는 시작과 출력이 모두 필요합니다 포인트는 수동으로 지정됩니다 양자화에 대해 이야기 해 봅시다

신경망 작업에는 무리가 필요합니다 매트릭스 특성의, 곱하기의 톤을 의미 추가 작업 현재 모바일 장치는 일부 기능을 수행 할 수 있습니다 전문 하드웨어 예를 들어, [INAUDIBLE] 명령 CPU, 범용 컴퓨팅 GPU, DSP 등에서

대략적으로 모바일 CPU에서는 총 10 ~ 20GB FLOPS GPU를 사용하면 300 ~ 500 기가 플롭스 이상을 달성 할 수 있습니다 큰 숫자처럼 들리지만 여전히 데스크톱 또는 서버 환경 기반 그래서 우리는 최적화를 수행하기를 원합니다 양자화는 기술 중 하나입니다 메모리 사용 공간과 컴퓨터 부하를 줄입니다 일반적으로 TensorFlow는 단 정밀도 부동 값을 사용합니다

입력 및 수학을 위해 또한뿐만 아니라 출력 아시다시피, 단 정밀도 부동 소수점 각각 32 비트 걸린다 그러나 우리는 정밀도를 16 비트, 8 비트로 줄일 수 있다는 것을 발견했습니다 비트 또는 심지어 더 적은 결과를 유지하면서, 우리의 학습 과정에는 자연에 의해 약간의 잡음 그리고 약간의 여분의 소음을 추가하는 것은별로 중요하지 않습니다

따라서 양자화 된 가중치가 최적화입니다 저장 공간의 크기를 줄이면 정밀도가 떨어집니다 그래프 파일의 상수 노드의 값 그러나 양자화 된 가중치 최적화와 함께, 값은 메모리에 확장됩니다 그래프가로드됩니다

그래서 우리에게는 또 다른 최적화가 있습니다 우리는 그것을 양자화 된 계산이라고 부를 수 있습니다 양자화 된 계산으로, 우리는 양자화 된 값을 사용하여 계산 정밀도를 줄일 수 있습니다 예배 규칙서 이것은 첫 번째 메모리 대역폭에 좋으며, 이는 모바일 장치의 제한 요소입니다

또한 하드웨어는 이러한 정밀도 값을 더 빨리 처리 할 수 ​​있습니다 단 정밀도 부동 값보다 그러나 우리는 여전히 열려있는 문제가 있습니다 양자화 된 계산을 수행하기 위해 최대 값과 최소값이 필요하다 양자화 된 값의 범위를 지정합니다 우리는 여전히 훌륭한 해결책이 없습니다

그것은 여전히 ​​수동입니다 그러나 활발한 연구가 진행되고 있으므로 희망적으로이 문제는 곧 해결 될 것입니다 이것은 양자화 된 특성화의 예입니다 최적화는 TensorFlow에서 작동합니다 TensorFlow에는 양자화를 지원하는 일부 연산이 있습니다 예를 들어, 행렬에 대한 컨볼 루션 [INAUDIBLE] 등을 곱하십시오

우리는 그것이 충분히 다루기에 충분하다고 생각합니다 대부분의 추론 시나리오 그러나 우리는 여전히 연산 순서를 양자화하지 않았습니다 아직 값을 양자화하고 값을 역 양자화해야하기 때문에 각 노드의 앞과 뒤 바로 출력 그리고 그래프 변환 도구는 부품을 분석합니다

각 그래프 노드의 때로는 불필요한 양자화 및 역 양자화 된 값 메모리 매핑은 로딩 시간에 대한 또 다른 최적화입니다 이 최적화를 통해 모델 파일 변환되어 직접 매핑 될 수 있습니다 약간있을 수있는 memmap API 사용 일부 Linux 기반 운영에서 성능 최적화 Android와 같은 시스템입니다 또 하나는 실행 파일 크기를 줄이는 것입니다

모바일에서 중요한 주제입니다 모바일 장치에서, 실행 가능한 패키지 크기는 특정 크기로 제한됩니다 Android의 경우 100 메가 바이트, 이진, 그래픽 및 기타 리소스를 포함하여 기본적으로 휴대 장치는 선택한 여러 개의 거의 충분하다 추론 작업을 커버하지만, ops는 학습 프로세스를 사용 누락 따라서 모바일 장치에서 학습을하고 싶다면, 추가 작업을 등록해야합니다

또한 그래프에 일부 사전 등록 된 작업, 또한 그 중 일부를 제거합니다 그렇게하기 위해 선택 등록을 할 수 있습니다 예를 들어, Inception v3의 경우, 선택 등록을함으로써, 원래의 바이너리 크기는 12 메가 바이트였습니다 최적화 후에는 15 메가 바이트로 줄일 수 있습니다

이 최적화를 위해서는 공유를 다시 빌드해야합니다 당신 지역의 물건 따라서 빌드 환경을 구축해야합니다 따라서 이러한 최적화를 통해 Inception v3 그래프 이제 23 메가 바이트와 15 메가 바이트가됩니다

현재 바이너리 크기는 75 % 작아집니다 카즈 돌아 가자 KAZ SATO : Hak 고맙습니다 하크 (Hak)가 언급했듯이, 너무 많습니다

[박수 갈채] 고맙습니다 Hak이 언급했듯이, 많은 팁과 트릭이 있습니다 TensorFlow 모델 최적화 안드로이드 모바일 응용 프로그램으로 짜내다 그리고 바로 지금 할 수있는 일입니다 이러한 기술은 현재 사용 가능합니다

하지만 지금은 조금 이야기하고 싶습니다 가까운 미래에 출시 될 새로운 기술에 대해, TensorFlow Lite 및 Android Neural Network API 등이 있습니다 NNAPI 란 무엇입니까? 신경망 처리를위한 새로운 API입니다 안드로이드 안쪽에, 그리고 안드로이드 프레임 워크에 추가됩니다 새로운 API 추가의 목적 캡슐화하고 추상화하는 것입니다

계층은 GPU, DSP, 및 ISP 최신 스마트 폰은 강력한 컴퓨팅 리소스를 갖추고 있습니다 GPU 또는 DSP와 같은 CPU 이외의 다른 장치 특히 DSP는 거대한 양의 행렬 및 벡터 계산, DSP 나 GPU를 사용하는 것이 훨씬 빠릅니다 신경 네트워크 추론,보다는 CPU를 사용하여

하지만 지금 당장 당신이 그렇게하고 싶다면, 도서관에 직접 가야합니다 하드웨어 공급 업체가 바이너리를 빌드합니다 혼자서 지루한 작업입니다 또한 휴대용이 아닙니다

대신 표준 API를 제공하여 개발자가 하드웨어 가속기를 인식 할 필요가 없다 각 개별 공급 업체로부터 Neural Network API 위에는, 우리는 TensorFlow Lite를 제공 ​​할 것입니다 그것은 새로운 TensorFlow 런타임이 될 것입니다 모바일 및 임베디드 애플리케이션에 최적화되어 있습니다

따라서 TensorFlow Lite는 스마트하고 컴팩트 한 모바일 용으로 설계되었습니다 또는 임베디드 응용 프로그램 또한 Android와 결합되도록 설계되었습니다 NNAPI 그래서 당신이해야 할 일은 TensorFlow Lite로 모델을 작성하면됩니다

결국 모든 이점을 얻게 될 것입니다 당신은 안드로이드 NNAPI에서 얻을 수 있습니다, 하드웨어 가속과 같은 가까운 장래에 오픈 소스로 등장하게 될 것입니다 그러니 계속 지켜봐주십시오 이러한 새로운 기술에 관심이 있다면, 이 QR 코드의 사진을 찍어주세요 Android 용 ML에 대한 설문 조사에 참여할 수 있습니다

의견이나 요청을 할 수있는 곳 새로운 제품을 위해 네, 고마워요 그래서 마지막으로, 아주 흥미롭고 재미있는 것을 보여주고 싶습니다 TensorFlow로 구축 된 실제 응용 프로그램 모바일 및 임베디드 시스템에서 첫 번째 응용 프로그램은 Raspberry Pi에서 실행 중이며 일본인 오이 농부에 의해 사실, 나는이 사진을 찍었다

나는 오이 농장에 가서이 사진을 찍었습니다 그리고 그들은, 당신은 볼 수 있습니다 – 오, 미안 포인터가 없습니다 [CHUCKLE] 그래서 당신은 한 사람을 중간에두고 있습니다 그는 [부적절하다]

그는 2 년 전에 오이 농업을 돕기 시작했습니다 그리고 그는 오이를 올바른 부류로 분류하는 것을 알았습니다 가장 지루한 작업입니다 그의 어머니는 하루 8 시간을 보냈다 길이, 또는 색깔에 기초하여 각 오이를 분류하고, 9 개의 다른 수업으로 그녀를 돕고 싶지 않았어

그래서 대신 그는 TensorFlow를 다운로드했습니다 그 자신의 오이 선별기를 만들었습니다 [박수 갈채] 그가 한 일은 9,000 장의 사진을 찍은 것입니다 다른 오이 중에서 그의 어머니에 의해 분류 된 레이블, TensorFlow 모델을 혼자서 교육했습니다 그리고 그는 $ 1,500을 지출함으로써 스스로로 분류기 로봇을 만들었습니다

그리고 TensorFlow 모델은 Raspberry Pi에서 실행됩니다 접시에 놓은 오이를 감지 할 수 있습니다 그리고 그것은 오이를 9 개의 다른 종류로 분류 할 수 있고, 모양과 색상을 기반으로합니다 그리고 이것은 시스템의 시스템 다이어그램입니다 그래서 세 부분으로 구성됩니다

Arduino Micro는 서버 제어에 사용됩니다 및 모델 그리고 라스베리 파이에는 오이의 사진을 찍을 카메라가 있습니다 접시에 그리고 아주 작은 TensorFlow 모델을 실행합니다

그리고 이것은 실제로 아주 훌륭한 예입니다 작업을 분할하는 방법, 작업 에지 장치 및 클라우드 파트로 기계 학습을위한로드 그는 TensorFlow 전체 세트를 실행했기 때문에 Raspberry Pi 내부의 모델이 너무 무겁습니다 그래서 그는 그것을 두 가지 과제로 나누기로 결정했습니다 따라서 TensorFlow 모델은 Raspberry Pi에서만 실행됩니다

접시에 오이가 있는지 여부를 감지합니다 그리고 접시에 오이가 있음을 감지했을 때만, 그것은 그림을 서버로 보냅니다 그는 더 강력한 TensorFlow를 가지고 있습니다 오이를 9 개로 분류 할 수있는 모델 다른 클래스 흥미로운 또 다른 응용 프로그램을 살펴 보겠습니다

Android 및 iOS에서 실행되는 체조 운동 득점자 그게 뭐야? 사실 모든 일본인은 운동을 잘 알고 있습니다 우리는 전국 라디오 방송을 가지고 있기 때문에 방송 네트워크 그들은 동시에 같은 운동 음악을 연주한다 매일 아침

그리고 수천만 명의 일본인 매일 아침 같은 운동을하고 있습니다 당신은 알고 계십니까? [웃음] 이 응용 프로그램은 – 우리는 그것을 득점자라고 부릅니다 당신은 음악으로 당신의 운동을 해왔습니다 그리고 모션 센서로 모션을 캡처하려면, 그들은 TensorFlow를 사용했습니다 그리고 그들은 TensorFlow 모델을 포착하도록 훈련시킬 수있었습니다

데이터에서 패턴 또는 피쳐 추출 모션 센서에서 인간의 손으로 만든 동작을 평가할 수 있습니다 또한 TensorFlow 컴파일러를 자체적으로 구축했습니다 그래서 그들은 기술을 적용 할 수있었습니다 양자화 또는 근사와 같은 그리고 그들은 TensorFlow를 줄일 수있었습니다

모델을 수십 메가 바이트에서 수 메가 바이트로 모델링합니다 따라서 이것이 생산 품질을 구축하는 핵심 기술이었습니다 TensorFlow 기능을 갖춘 Android 및 iOS 애플리케이션 운동 실황 시범을 보도록하겠습니다 득점자 그럼 내가 여기로 바꿀 수 있을까? 선택할 수있는 응용 프로그램입니다 다양한 종류의 운동

그리고 나는 가장 표준적인 것을 연주 할 것이다 [음악 재생] 그래서 이것은 음악입니다 [웃음] [일본 축구 연발 스코어] [박수 갈채] 나는 잘하고 있니? 그래서 그렇게 그러니 그만하자 [웃음꾼과 박수] [음악 스톱] 충분 해 충분 해 [웃음] 이제 TensorFlow 모델이 시도하고 있습니다 이 운동을 얼마나 잘 수행했는지 평가하십시오

그리고 당신은 막대 차트를 여기에서 볼 수 있습니다 그것이 TensorFlow의 변형입니다 이 애플리케이션 내부의 모델 그것은 진짜입니다 승인? 슬라이드로 돌아가십시오

그것이 우리가 보여주고 싶은 것입니다 이 세션에서는 다음을 포함한 많은 것을 배웠습니다 일본에서 또 다른 이상한 물건, 그런 다음 몇 가지 최적화 기술 TensorFlow 응용 프로그램 구축 용 양질의 안드로이드 및 iOS 애플리케이션을 제공합니다 관심이 있으시면 TensorFloworg로 이동하십시오

시작하기에 많은 자료를 얻을 수 있습니다 그리고 훌륭한 codelab이 있습니다 codelab 웹 사이트에서 정말 고맙습니다 Hak MATSUDA : 고마워

[박수 갈채]

Sound Amplifier and the new Dynamics Processing Effect (Google I/O ’18)

[음악 재생] BRIAN KEMLER : 안녕하세요, 여러분 내 이름은 Brian Kemler입니다

저는 제품 관리자이고 Android 접근성을 연구하고 있습니다 리카르도 가르시아 : 안녕하세요, 저는 리카르도 가르시아입니다 안드로이드의 오디오 프레임 워크 팀의 소프트웨어 엔지니어 BRIAN KEMLER : 모두가 I / O의 마지막 날 이었습니까? 마지막 세션, 우! 너는 그것을 통해 만들었다 나와 줘서 고마워

그것은 훌륭한 I / O였습니다 오늘 우리는 얘기 할 정말로 흥미로운 것들이 많이 있습니다 주로 개발자 용입니다 우리는 새로운 사운드 강화 된 미래에 대해 이야기 할 것입니다 안드로이드 P라는 ​​Sound Amplifier에 있습니다

우리는 약간의 라이브 데모를 할 것입니다 어떤 상황에서도 사운드를 개선 할 수있는 방법을 보여줍니다 사용자 및 개발자와 동일한 방식으로 수행 할 수있는 방법에 대해 설명합니다 우리는 내부 활동에 대해 깊이 잠수 할 것입니다 앰프 및 다이내믹 처리 효과 코드 예제를 바탕으로 구축되었습니다

그게 정말 멋지다 바로 들어가자 비어있는 분야에서도 듣기가 어렵다 엄청난 귀 세트 그러나 매일의 현실은 우리가 살고, 일하고, 환경 소음의 증가로 재생할 수 있습니다

사실 원치 않는 사운드는 가장 일반적인 것 중 하나입니다 환경 문제 그것은 짜증나게 할뿐만 아니라 우리를 방해합니다 우리의 친구, 동료 및 사랑하는 사람들을 이해하는 것에서 우리가 얼마나 잘들을지라도, 우리는 다음의 음향 적으로 도전적인 상황 – 시끄러운 식당에서 데이트 상대를 이해하려고 노력 중이다

또는 시끄러운 술집, 정말에서 발신자의 말을 듣고 시끄러운 공항 라운지, 듣고 싶다 내게 너무 부드럽게 말하는 사람에게 환경 소음을 생각할 수 있습니다 상황 장애의 형태로 하지만 당신이 더 잘 듣는다면 당신이 놓치지 않을 스마트 폰 대화에서 한 마디? 이제 우리는 Sound Amplifier를 소개하기 때문에 가능합니다

사운드 앰프 란 무엇입니까? 사운드 앰프는 새로운 접근성 서비스입니다 사용자가 실제 대화에 집중할 수 있도록 도와줍니다 Android 스마트 폰과 헤드폰 세트 만 사용자는 수백 가지 맞춤 레벨을 조정할 수 있습니다 청취 경험을 최적화하기 위해 현재 환경으로 소리의 크기와 동적 조정을위한 두 개의 슬라이더 백그라운드에서 100 개가 넘는 오디오 사전 설정을 조정할 수 있습니다 이 설정은 각 귀에 독립적으로 적용 할 수 있습니다 그들을 조정하면 음질이 향상됩니다

다음과 같은 일련의 상황에서 시끄러운 소리, 불협화음 소리 등의 소리를 강화 음향 적으로 어려운 상황, 너무 부드럽게 말하는 사람의 볼륨을 높이는 것, TV 볼륨을 방안에있는 모든 사람들이 받아 들일 수있는 다른 사람을 폭파하지 않고 이제 저는 어떻게 들어가야하는지 잠깐 이야기 할 것입니다 우리는 API와 API가 만들어지는 효과를 만들었습니다 나는 데모를 할거야 사운드 앰프는 Android P의 새로운 역학을 기반으로합니다

처리 효과 이 효과는 4 단계 신호 처리 아키텍처로, 당신을 각 단계로 안내 할거야 그리고 리카르도가 조금 올거야 이 문제에 대해 깊이 생각해보고 개발자에게 보여줍니다 잠재 고객이 정확히 어떻게 적응할 수 있는지 그들의 응용 프로그램에

그래서 우선, 1 단계 1 단계는 사전 균등화입니다 사전 균등화에 대해 생각할 수 있습니다 프로그래밍 방식으로 사용할 수있는 이퀄라이저로 오디오 주파수를 조정하십시오 중음역, 고음, 전체 오디오 스펙트럼을 생각해보십시오

2 단계는 멀티 밴드 압축기입니다 멀티 밴드 컴프레서는 마음과 영혼입니다 다이나믹 처리 효과에 대해 정말 독특합니다 그것은 정말 크게 또는 자극을 조정할 수 동시에 소리는 – 걱정하지 마라, 나는 아무것도 만들지 않을 것이다 – 너무 부드러운 소리를 조정하십시오 그것은 변화없이이 모든 것을 할 수 있습니다

기본 오디오의 특성 당신이 시스템에 넣었던 세 번째 단계는 [INAUDIBLE] 평등화입니다 포스트 이퀄라이제이션으로 미세 조정 가능 원래의 NBC와 원래의 프리 이퀄라이저의 출력 그리고 마지막으로 리미터입니다 리미터가하는 것은 사용자를 보호하는 것입니다 추가 이득 또는 추가 볼륨으로부터 특정 개발자 지정 임계 값 초과 그래서 큰소리로, 거칠게, 또는 불편한 소음

자 이제 전환하고 약간의 데모를 할 것입니다 그래서 저는 아주 전형적인 Google 마이크로 키트를 사용할 것입니다 시원한 에스프레소가있는 곳의 워터 쿨러 타입의 휴식 백그라운드에서 제조 업체입니다 그리고 나는 이것에 빠져있다 나는 이것에 별표를 붙인다

[비디오 재생] – 너 진짜? 와우 – [INAUDIBLE] – [INAUDIBLE] BRIAN KEMLER : 소리가 들리네요 당신은 정말로 대화를들을 수 없습니다 – [INAUDIBLE] – 그래야 알카트라즈에서 탈출 할 수 있었어 – 나는 알 카트 라 즈에서 탈출 할만큼 충분히 멀리 수영했다

– 정말로 그랬니? 와우 알 카트 라 즈에 수영해야합니다 [끝내기] BRIAN KEMLER : 저는 동적으로 할 수 있습니다 이것을 조정하고 대화 듣기를 시작하십시오 이것은 모든 사용자에 맞게 사용자 정의 또는 조정할 수 있습니다

다시해라 나는 다시 별표를 얻는다 나는 정말로 나 자신이 아니다 저는 지금이 이야기를 리허설하는 것을 말하고 있습니다 그리고 나는 너무 조용히 말하기 때문에 내가 어떻게 소리를 조절할 수 있는지에 대한 또 다른 예가 될 것입니다

나는 더 잘들을 수있다 나도 언급하는 것을 잊었던 다른 물건 이걸 당신의 헤드폰과 함께 사용 했습니까? 그래서 당신은 비디오의 내용을 당신이 생각하는대로 생각할 수 있습니다 당신의 헤드폰을 듣고 있어야합니다 [비디오 재생] – 듣기가 어렵습니다 최선의 상황에서, 조용한 분야에서 배경 소음이없고 큰 귀가 있습니다

[끝내기] BRIAN KEMLER : 부스트를들을 수 있습니다 [비디오 재생] – 그러나 시끄러운 환경에서 일상의 현실 우리가 일하고, 놀고, 살며 환경 소음의 양 때문에 청취가 어렵습니다 [끝내기] BRIAN KEMLER : 조정하기가 아주 쉽습니다 환경에 대한 모든 음향 적 상황, 귀에 대한 청각 적 상황, 기타 등등 그리고 리카르도는 좀 더 깊숙이 뛰어 들어 조금 더 이야기 할 것입니다

역학 처리 효과에 관해서, 개발자들이 어떻게 이것을 오늘부터 사용할 수 있는지에 대해 설명합니다 리카르도 가르시아 : 고마워, 브라이언 리카르도, 너에게 리카르도 가르시아 : 고마워 음, 이제 우리는 데모를 보았고 사운드 앰프를 보았습니다

실생활에서 실제로 일하고 있습니다 그래서 우리는 내려 가서 볼 것입니다 사운드 앰프가 실제로 어떻게 작동하는지, 그리고 그 뒤에있는 마법은 무엇입니까? 그래서이를 위해 청력 역치를 알려 드리고자합니다 나는이 슬라이드에 잠깐 머물 것이다 나는 여기에있는 것을 당신에게 설명 할 것입니다

그리고 여기에서는 평균 청력 역치가 무엇인지보고 있습니다 평균적인 인간의 경우 청력 역치는 실제로 얼마나 많은 에너지가 필요합니까? 소리를들을 수있다 그래서이 음모에서, 우리는 왼쪽에서 오른쪽으로 볼 수 있습니다, 낮은 주파수에서 높은 주파수로, 20 헤르츠에서 20 킬로 헤르쯔 그리고 수직축에서 우리는 진폭을 볼 수 있습니다

우리는 얼마나 많은 에너지를 우리가 실제로 볼 것인가? 소리를들을 필요가있다 그래서 이것은 조용한 곳에서의 청력의 한계이기 때문에, 이 [INAUDIBLE]은 아무것도 말하지 않고 그 문턱 아래에있는 사람들은 사람들에게 들리지 않을 것입니다 예를 들어, 우리가 가서 4,000 헤르츠를 들여다 보면, 우리는 임계 값이 더 낮다는 것을 알 수 있습니다 그것은 우리가 더 적은 에너지를 필요로한다는 것을 의미합니다 소리는 더 희미 할 수 있고, 부드러울 수 있으며, 우리는 그것들을들을 것이다

그러나 우리가 같은 수준의 소리를 내면 주위에, 나 몰라, 100 헤르츠, 너 그것을들을 수 없을 것입니다 많은 기업들 이러한 곡선을 사용하면 이러한 종류의 청력 역치 곡선 장비를 설계하는 것 당신이 디자인 할 때, 나는 모른다, MP3 또는 CD 플레이어, 이 커브가 있습니다 또는 헤드셋, 스피커, 마이크, 이 모든 곡선들은 정말 중요합니다 사람들이 실제로 듣게 될 내용과 민감한 내용

그러나 이러한 커브는 이동할 수 있습니다 그래서 우리는 청력 역치를 가질 수 있습니다 많은 상황 때문에 – 말하자면, 환경의 소음 1 분 전에, 우리는 여기에 AC 폭파를했다 임계 값 변화가있었습니다

우리는 소리가 더 커야 할 필요가있었습니다 소리를들을 수 있도록 그 임계 값 이상 AC가 1 분 전에 꺼 졌을 때, 우리는 더 부드럽게 말할 수 있고 우리는 그것을들을 수 있습니다 우리의 문턱은 그 순간에 이동되었습니다 임계 값 이동은 당신이 그것을 알아 차릴 수 있도록 더 많은 에너지가 필요합니다

우리에게는 다른 변화가 있습니다 우리는 광대역이 아닌 교대를 가질 수 있습니다 스펙트럼 전체가 아닙니다 이전에 우리는보다 현지화 된 교대를 가질 수 있습니다 이 파란색 곡선은 우리에게 변화를 보여주고 있습니다

약 500 헤르츠 정도입니다 정말로, 정말로, 정말로 높다 거기에 약간의 소음이나 장애물이 있습니다 너에게 물건들을 수있게하지 않을거야 아주 잘 주위에 500 헤르츠

이 변화는 영구적 일 수 있습니다 – 너의 모든 삶은 그 변화가있을거야 일시적 일 수 있습니다 Brian이 언급했듯이, 일시적인 상황 일 수 있습니다 또는 장애 즉, 그 기간 동안, 너는 사물을들을 수 없을거야

당신의 헤드폰이 잘 작동하고, 당신은 시끄러운 환경에 있습니다 그 순간 당신의 귀가 잘 작동하지 않습니다 임계 값보다 낮은 소리, 시프트 된 문턱 값, 당신은 그 소리를들을 수 없을 것입니다, 이것이 중요한 부분입니다 임계 값보다 낮 으면 소리를들을 수 없습니다 그래서 우리가 관심을 가질 때 어떻게됩니까? 음악을 듣고 있다고 가정 해 봅시다

또는 누군가가 말하고 있거나, 당신에게 흥미있는 어떤 소리 그래서 줄거리에서 나는 그 안에 푸른 얼룩 (blob)을 넣었습니다 광대역 사운드입니다 그것은 많은 주파수를 가지고 있으며 에너지를 가지고 있습니다 여기 저기

하지만 다시 500 헤르츠 정도를 알아 차리면, 임계 값 이하의 많은 에너지, 이동 된 임계 값 인 파란색 임계 값이 손실됩니다 관심있는 소리가 들리면 상기 임계 값, 상기 시프트 된 임계 값, 들리는 것은 어려울 것입니다 또는 명료성은 정말 나쁩니다 소리를 이해할 수 없습니다 그래서 이것은 모든 사람들이 사운드 앰프가 지금 우리에게 어떻게 도움이 될 수 있습니까? 그래서 네가 물어 봤기 때문에 기쁩니다

사운드 앰프가 소리를 들으려고합니다 실제로 그들을 부양하려고합니다 가장 필요한 곳 500 헤르츠에서 1 킬로 헤르츠의 범위에서 다시 살펴보면, 우리는 소리를 들었고이 새롭고 처리 된 소리에서, 우리는 정말로 부드러운 소리를 들었습니다 그렇게 많은 에너지를 가지고 우리는 이동 된 임계 값 이상 끝까지 그래서 지금 우리는 그것들을들을 수 있습니다

하지만 매우 중요합니다 우리는 실제로 그 소리를 들었습니다

큰 소리로, 우리는 그들을 위로 움직였다 그러나 너무 많이 올라가지 마라 큰 소리는 크게 들리지만 너무 크게 들리지는 않습니다 따라서 일어난 과정을 보면, 그것은 스펙트럼 전체에 균일하지 않았습니다 그것은 물건을 변화시키고 그들을 수용하려고 노력했습니다

전환 된 임계 값 이상 그래서 거기에서 매우 지능적인 향상을하고있었습니다 이 모든 프로세싱은 새로운 다이내믹 프로세싱에 의해 수행됩니다 Android P에서 도입 한 효과 그리고 저는 더 이야기 할 것입니다 나는 [INAUDIBLE]을 1 분 안에 보여 드리겠습니다

약속 할께 Brian이 언급 한 것처럼 역학 처리 효과는 우리가 가진 새로운 처리 효과입니다 네 단계가 있습니다 프리 EQ, 멀티 밴드 컴프레서, 포스트 EQ 및 리미터가 있습니다 그리고 우리가이 효과를 사용할 때, 우리는 우리가 대답 할 필요가있는 두 가지 큰 질문을 가지고 있습니다

특히 Sound Amplifier에 적합합니다 첫째, 우리가 실제로 어떤 종류의 가공을 하는가? 소리를 듣고 싶니? 가능한 한 우리가 가진 필요에 따라 – 우리가 시끄러운 환경에 있거나 우리가 나쁜 관계에 있다면, 또는 우리는 공항에있다 어떤 종류의 가공이 필요한가? 우리가 가지고있는 변화된 문턱보다 높은 것을 만들기 위해서? 두 번째 방법은 사용자가 실제로 이동하고 올바른 매개 변수를 찾으십시오 그들은 당신을 위해 필요합니다 그래서 우리는 대답 할 두 가지 큰 질문을 가지고 있습니다

첫 번째는 처리를 위해 우리가 원하는 어떤 종류의 가공, 우리는 Google이 정말 잘한 일을 해냈습니다 우리는 많은 양의 데이터를 가져 와서 그 데이터를 처리하기 시작했습니다 그래서 우리는 청각 역치에서 데이터를 가져 왔습니다 일반 및 청각 장애가있는 사용자의 경우, 실제로 사람들이 어떻게들을 수 있는지, 귀가 어떻게 반응하는지, 우리는 그들을 거기에 넣었습니다 우리는 서로 다른 환경에서 임계 값 교대를 취했습니다

및 다른 환경 소음 우리는 공항, 식당, 우리가 소음 방해물이있는 장소 – 청력의 한계를 바꿀만한 것들 – 우리는 또한 그들을 믹서기에 넣습니다 그리고 우리는 가서 오디오 콘텐트를 얻으려고 노력했습니다 실제로 듣고 싶다 대화, 영화, 음악, 라이브 콘서트, 강의 – 우리는이 모든 것을 끌어낼 수있었습니다

함께 그리고 일련의 조리법, 매개 변수, 그게 처리에 좋을거야 많은 상황에서 소리 네가 그 일을 끝낼 때 너는 끝이 난다 나는 말할 것이다 다차원 공간, 수많은 솔루션, 그게 꽤 복잡해

다이내믹 효과 프로세서에 알려주는 매개 변수, 오, 이런 상황에 소리를 바꾸는 것이 좋다 이 상황에서는 그럴 것입니다 그러나 그것은 관리하기 어려운 것입니다 사용자에게 말하고 싶다면, 음, 이렇게 움직이는 매개 변수를 시작합니다 수백 가지 매개 변수가있을 것입니다

사용자에게는 매우 어려울 것입니다 이걸로 뭔가 좋은 걸 만들기 위해서 그래서 우리는 한 걸음 더 나아가서 어떤 차원 감소 그 모든 요리법, 다차원 공간, 그들을 평평하게하고 2 차원으로 그려 냈다 그리고 여기, 오른쪽 그림에서, 당신은 우리가 각각의 것을 볼 수 있습니다

일종의 수식 또는 가공법 우리가 역학 처리를 공급하기를 원한다 사운드를 변경하는 효과 그리고 차원 감소와 함께, 우리는 두 가지 주요 축을 발견했습니다 톤과 부스트 그래서 이것은 우리가 가지고있는 두 번째 질문을 해결합니다

사용자가이를 탐색하는 방법 음, 모든 매개 변수를 알 필요는 없습니다 우리가 필요로하는 것, 우리는 단지 그들에게 두 개의 슬라이더를 줄뿐입니다 우리가 방금 데모에서 본 두 슬라이더 그리고 그 슬라이더를 움직여 실제로 매우 지능적인 매핑을 수행하고 있습니다

수백 개의 매개 변수 이동 및 이동 거기에있는 각 채널에 대해 이동합니다 사용자가 이동하여이 슬라이더를 사용하여 반복 할 때, 그들은 실제로 조리법의 낱단을 통해 가고 있습니다, 일련의 가공들, 그리고 그들은 온다 그 순간 가장 잘 어울리는 것을 찾는다 해당 위치의 해당 사용자에 대한 그게 바로 우리가하고 싶은 일입니다 그래서 그것은 일종의 조감도였습니다

사운드 앰프 작동 원리 이제 우리는 더 깊이 가서 코드에 대해 이야기 할 것입니다 다이내믹 프로세싱 효과로 무엇을 할 수 있습니까? 따라서 다이나믹 처리 효과를 찾을 수 있습니다 안드로이드 미디어 오디오 효과의 [INAUDIBLE] 라이브러리에서 – 역학 처리 이제 유스 케이스에 대해 이야기 해 보겠습니다 언제 다이나믹 처리 효과를 사용할 수 있습니까? 우리가 처음 보았던 첫 번째 유스 케이스는, 당신은 사운드 앰프를 할 수 있습니다

그래서 오늘 가면, 지금 이니까 Android P 개발자 미리보기에서 사용 가능하며, 너 오늘 밤 갈 수있어 모두가 파티를 건너 뛰 겠어 가서 자신 만의 사운드 앰프를 만들어보십시오 사운드 앰프와 다이내믹 프로세싱 효과, 우리는 사람들이 자체 사운드 앰프 또는 자체 솔루션 생성 더 잘 듣고 더 잘들을 수 있도록

또 다른 예는 일어날 수있는 다른 [INAUDIBLE]입니다 기기, Android 기기, 스피커 또는 헤드폰을 조정하고 싶습니다 많은 회사들이 이퀄라이제이션 또는 할 소프트웨어를 가지고 있습니다 소리를 더 평평하게 만들기 위해 헤드폰에 무엇인가, 더 나은 저음을 갖기를 바랍니다 이제이 효과로 당신과 고객이 쉽게 할 수 있습니다

정말 흥미로운 또 다른 응용 프로그램 TV 자정 모드입니다 오전 2시에 TV를 시청하는 경우 잠을 잘 수 없으며, 그러나 당신이 영화를보기 시작하면, 때때로 누군가 영화에서 속삭이는 데, 그냥 정말 조용한 것을 말하고, 즉시, 빵, 음악은 거기에, 정말로 큰 무엇인가 들어온다 너 집 안의 모든 사람들을 깨웠다 다이내믹 프로세싱 효과로, 당신은 실제로 그들이 속삭이는 것을 가질 수 있습니다 – 영화의 매우 부드러운 부분은 위로 올릴 수 있지만 아주 시끄러운 음악이나 총소리 등 영화에서 일어나고있다, 그것은 내릴 수있다 모든 것이 더 많은 일을 할 것입니다

소리의 레벨, [INAUDIBLE] 소리 또 다른 예로 미디어 플레이어가 있습니다 당신은 당신의 자신의 미디어 플레이어를하고 있습니다 당신은 실제로 어떤 소리의 최대화를 원한다 또는 마스터 링

미디어 플레이어에서 클래식 음악을 듣고 싶습니다 너는 기차에있다 너는 통제권을 갖고 싶다 시끄러운 소리를 재빨리 짠다 부드러운 소리가 모든 것이 잘 작동하도록 당신이 거기에 가지고있는 다이나믹 레인지를 위해

이제 건축에 대해 조금 이야기 할 것입니다 코드가 올 것이라고 약속하지만 아키텍처를 보여주고 싶습니다 우리는 당신에게이 효과로 많은 힘을주고 있습니다 그래서 우리가 이전에 보여준 아키텍처, 우린 좀 친절 했어 단순하지 않습니다

조금 더 복잡합니다 아키텍처 – 네, 네 단계가 있습니다 우리는 프리 EQ, 멀티 밴드 컴프레서, 포스트 EQ, 리미터가 있지만 거기에서 더 많은 일을 할 수 있습니다 그 단계들 각각의 내부에서, 우리는 당신이 통제 할 수있는 많은 매개 변수를 가지고 있습니다 우리는 밴드를 가지고 있으며 pre-EQ에서 멀티 밴드 컴프레서, 포스트 EQ를 사용하면 원하는만큼의 밴드를 가질 수 있습니다

그리고 당신은 그 밴드들 각각을 제어 할 수 있습니다 그리고 그 밴드들의 매개 변수들 리미터는 싱글 밴드 리미터이며, 그러나 당신은 또한 그것을 제어 할 수 있습니다 이 모든 것이 하나의 채널에 포함됩니다 우리는 채널을 다음과 같이 정의했습니다

당신은 스테레오 신호를 가지고 있습니다 스테레오 신호에는 왼쪽과 오른쪽의 두 채널이 있으며, 그래서 우리는 채널 0과 채널 1을 가지려고합니다 그리고 당신은 그것들 모두를 독립적으로 제어 할 수 있습니다 또는 더 많은 채널을 가질 수 있습니다 5

1 신호가 있다고 가정 해 봅시다 실제로 6 개의 채널을 제어 할 수 있습니다 그 모든 채널을 색인화하고 말할 수 있습니다 멀티 밴드 컨트롤러를 변경하고 싶습니다 채널 2에서 밴드 번호 3, 그리고 이것을 바꾸고 싶습니다

Google은 이러한 모든 작업을 수행 할 수있는 API를 제공합니다 제가주의해야 할 한 가지는 리미터입니다 리미터는 링크 된 리미터입니다 나는 그것에 대해 더 이야기 할 것이다 그러나 당신이 말할 때 중요합니다

모든 리미터를 변경할 수있는 [INAUDIBLE] 채널 정보 필요한 경우 즉시 한 번에 자 이제 마침내 코드 예 우리는 코드를 약속했습니다 코드가 있습니다

그래서 이것은 역학의 인스턴스화 예제입니다 처리 효과 이를 위해 많은 매개 변수가 있으므로 구성 할 수있는 많은 것들, 구성 빌더를 가지고 있습니다 구성 빌더를 만든 다음 실제로 효과를 인스턴스화하려고합니다 먼저,이 예제에서 config 빌더를 사용하여, 우리는 변형과 같은 몇 가지 매개 변수를 가질 수 있습니다

채널 수 – 저는 그것에 대해 잠시 후에 더 이야기 할 것입니다 그런 다음 각 단계를 사용 또는 사용 중지 할 수 있습니다 이 예에서는 모든 단계를 사용할 수 있습니다 예, pre-EQ, 멀티 밴드 컴프레서, 포스트 EQ, 리미터 – 및 밴드의 수 스테이지 유형별로 원하는 밴드의 수를 말할 수 있습니다

그래서 모든 프리 EQ가 가질 수 있습니다 8 밴드, 멀티 밴드 압축기 10 밴드, EQ 13 밴드 이후 유일한 제한은 스테이지 유형 요구 사항과 같습니다 같은 수의 밴드를 가지려면, 원하는 밴드를 원하는만큼 선택할 수 있습니다 앞서 언급 한 것처럼 몇 가지 추가 매개 변수가 있습니다

채널의 변형 및 수와 선호 집합 프레임 지속 시간 – 구성 빌더에서 설정할 수 있습니다 마지막 줄에서 우리는 실제로 구성을 작성합니다 우리는 빌드를 말하고 있으며 우리는 설정 객체를 가지고 있습니다 그런 다음 구성을 직접 사용하고 싶지 않습니다 때로는 내 효과의 아키텍처를 끝내기를 원한다

가서 기본 매개 변수를 변경하십시오 따라서이 예에서는 채널이 생겼습니다 config에서 첫 번째 줄에 채널 객체가 생겼습니다 그리고 저는 채널 번호 0에서이 경우, 멀티 밴드 압축기를 얻으십시오 멀티 밴드 압축기가 있습니다

그런 다음 8 개의 밴드를 반복합니다 내 멀티 밴드 컴프레서에있는 것, 그리고 나는 가서 각각의 매개 변수를 변경했습니다 이것은 I / O의 예입니다 확실해 실제 응용 프로그램에서는 더 많은 것을 할 수 있습니다 그러나 우리는 우리가 가서 각각의 것들을 설정할 수 있음을 봅니다

우리가 원하는 것은 – 그 석방, 공격, 비율 문턱의 – 당신이하는 방식 밴드 하나 하나를 원해 마지막으로 우리는 가서 인스턴스화합니다 내 역학 처리 효과, 그리고 그것을 인스턴스 수 있습니다 우리가 설정 한 설정 파일 생성 된 세션 ID 및 세션 ID 이 효과를 어디에 붙여야할까요? 미디어 플레이어 또는 관심 오디오 트랙

그리고 나서 프로그램을 시작하십시오 모든 것을 통제하고 있습니다 API를 사용하지 않고 [INAUDIBLE]을 표시하는 대신 좀 더 메타, 좀 더 개념적으로 갈 것입니다 이것을 그래픽으로 조금 보여줄 수 있습니다 따라서 구성에서 또는 우리가 실시간으로 실행될 때, 우리는 당신에게 보여준 채널에 접근 할 수 있습니다

그리고 우리는 많은 채널을 가지고 있습니다 따라서 채널 객체와 우리는 색인을 생성 할 수 있습니다 인덱스 번호에 의한 채널 그래서 0, 1, 2, 3 – 우리는 채널을 얻을 수 있습니다 각 채널 객체에는 실제로 몇 가지 매개 변수가 있습니다

채널에서 이동하고 변경할 수있는 입력 게인과 비슷합니다 아니면 단계가 있습니다 [? pre-q?] 다중 대역 압축기, [? post-q,?] 또는 리미터 그리고이 순간, EQ에서, 실제로 EQ를 잡을 수 있습니다 두 EQ는 API 레벨에서 완전히 동일하게 보이지만, API 관점에서

그리고 EQ의 파라미터를 변경할 수 있습니다 또는 각 밴드에서 파라미터를 변경하십시오 미안 해요, 아주 깊어 질거야 그래서 우리는 밴드에서 EQ로 갈 수 있습니다 채널에서 다음 채널 모음

따라서 모든 세분화 된 요소에 액세스 할 수 있습니다 우리가 원하는 곳 멀티 밴드 압축기도 마찬가지입니다 우리는 멀티 밴드 압축기에 접근 할 수 있습니다 채널 측면에있는 다음 매개 변수에 액세스합니다

우리가 각 밴드에서 가지고있는 마지막으로 리미터입니다 리미터에는 밴드가없고, 파라미터 만 있습니다 그곳에 그리고 우리는 그것에 접근 할 수 있습니다 이제 저는 좀 더 다이빙을 할 것입니다

각 스테이지 유형 및 우리가 가지고있는 접근자가 무엇인지, 우리가 가진 세터들과 게터들? 첫째, 이퀄라이저입니다 나는 대부분의 사람들이 이퀄라이저에 익숙하다고 생각한다 이퀄라이저가하는 일 그러나, 아주 빨리 – 이퀄라이저로 다른 주파수를 지정하려고합니다 밴드

우리는 0에서부터 밴드를 가질 것입니다 500 헤르츠, 500-3000, 3,000-7,000 그리고 우리는 에너지, 레벨 또는 이득을 바꿀 것입니다 우리는 그 밴드들 각각에 있습니다 여기서 우리는 원하는대로 밴드를 설정할 수 있습니다

그래서 우리는 많은 밴드를 가질 수 있고 어떤 색깔도 가질 수 있습니다 우리가 원하는 주파수 그리고이 그래프는 오해의 소지가 있습니다 모든 밴드가 같은 너비를 가지고 있기 때문입니다 그건 사실이 아니야

원하는 너비를 할 수 있습니다 그리고 일단 밴드를 만들면, 당신은 갈 수 있습니다 그리고 여기에있는 접근 자와 함께, 우리는 이득을 얻을 수 있습니다 – 현재 이득은 무엇입니까? 또는 우리는 이득을 설정할 수 있습니다 그리고 우리는이 모든 것을 실시간으로 변경할 수 있습니다 우리는 가고있다– 그런 다음 멀티 밴드 압축기

그러니 먼저 면책 조항 누군가 너를 지적했다 다중 대역 압축기에 하나의 대역을 보여줍니다 그리고 네, 하나의 밴드를 보여주고 있지만, 멀티 밴드 압축기가하는 일을 쉽게 보여줍니다 Brian이 언급하고 언급 한대로, 압축기, 멀티 밴드 압축기, 큰 목표 인 소리를 듣는 것이 주요 목표입니다

그 (것)들을 더 연약하고, 아주 연약한 소리에하십시오 그들을 더 크게 만든다 여기에 우리가 표현한 방식, 우리는 전에도 같은 문장을 가지고 있습니다 우리는 문장이 크고, 중간이고, 상단에는 부드럽고 그리고 우리가 처리를 적용한 후에 멀티 밴드 컴프레서의 모습은 이후처럼 보일 것입니다 즉, 큰 소리는 조금 부드럽습니다 매체 1은 매체를 유지합니다

그리고 부드러운 하나는 아주 크게 움직입니다 멀티 밴드 압축기가 작동하는 방식, 또는 매개 변수가 작동합니다 그래픽– 우리는 입력을 가지고 있으며, 신호의 레벨은 무엇입니까? 가로축에 숫자는 마이너스 100에서 10까지입니다 숫자가 낮을수록 마이너스 50과 같습니다 어쩌면 마이너스 10보다 부드럽습니다

따라서 마이너스 10은 크게 들릴 것입니다 압축기는 입력을 분석합니다 입력 값이 임계 값보다 높으면 임계 값을 갖습니다 매개 변수 – 말하기로 결정할 겁니다, 알다시피, 너무 시끄러워 내가 너를 데려다 줄거야

그러나 그것이 문턱보다 낮아지면, 그것은 건드리지 않는다 예를 들어,이 그래픽에서 마이너스 40을 선택합니다 입력 값은 마이너스 40 레벨입니다 출력은 정확히 마이너스 40입니다 우리는 한계점을 밑돌고 있습니다

우리는 그 신호를 수정하지 않을 것입니다 그러나 임계 값은 약 25입니다 따라서 마이너스 20의 값을 선택하면, 실제 출력은 주변에있을 것입니다 죄송합니다 10의 충동을 선택합시다

미안, 그게 더 낫네 입력 인 마이너스 10은 출력 20에 마이너스로 매핑됩니다 즉, 소리가 부드러워졌습니다 임계 값을 초과했습니다 이러한 모든 매개 변수와 압축 비율을 사용하면, 임계 값 및 입력 게인, 출력 게인, 그리고 우리가 할 수있는 다른 매개 변수들 우리가 약속 한 바를 우리가 소리를 들려주고 소리를 크게 할 수있다

큰 소리를 듣고 부드럽게 만듭니다 이것이 멀티 밴드 컴프레서가하는 일입니다 그리고 그것은 다른 밴드에서 이것을하고 있습니다 우리는 0에서 1,000 헤르쯔의 주파수 범위를 가질 수 있습니다 1,000에서 다른 지역과 다른 방식으로 행동합니다

5,000 명이 행동합니다 우리는 당신에게 통제 할 수있는 모든 힘을주고 있습니다 가장 복잡한 것 중 하나 인 멀티 밴드 압축기는, 당신은이 세터와 게터를 얻을 수 있습니다 따라서 공격 시간, 릴리즈 시간, 비율 등을 얻을 수 있습니다 실제로 구성해야하는 모든 매개 변수 압축기

그리고 당신은 밴드 당 이것을합니다 – 음 한 가지는, 모두가 이것을 요구하고 있다고 확신합니다 왜 당신은 pre-gain, post-gain, 멀티 밴드 압축기가 전후에 있다면 균등화? 그리고 그것은 사실입니다, 그들은 중복됩니다

그들은 거의 똑같이하고 있습니다 그러나 우리는 한 가지 이유로 그렇게했습니다 우리는 많은 개발자와 사람들과 이야기했습니다 실제로는 이러한 알고리즘이 실제로 많이 사용됩니다 그리고 그들 중 상당 부분은 정말로 평등화를 원한다

멀티 밴드 컴프레서로 튜닝 스피커 또는 마이크를 연결합니다 그들 중 일부는 멀티 밴드 압축기를 원한다 균등화 상태 그래서 우리가이 효과를 매우 보편적으로 만드는 가장 쉬운 방법입니다 일부 중복성을 구축하고 API를 그런 식으로 수행하는 것이 었습니다 이전 알고리즘을 쉽게이 포트에 포팅 할 수 있습니다

마지막 단계는 리미터입니다 리미터는 거의 동일합니다 그것은 멀티 밴드 컴프레서지만 싱글 밴드입니다 그래서 우리는 여러 밴드를 가지고 있지 않습니다 그리고 이것이하는 일은 거의 동일합니다

그것은 소리를 내고 있고, 너무 시끄러운 소리라면 – 임계 값의 특정 수준 이상인 경우 그냥 그걸 내려 버릴거야 매우 유용합니다 오디오 처리가 끝나면 보통 발견됩니다 체인, 특히 스피커를 보호합니다 그 처리를 원하지 않는다

뭔가 펑키하고 소리가 정말 크게 들렸어요 그리고 너는 그 큰 소리를 원하지 않는다 스피커에서 나옵니다 그래서 당신은 가고, 리미터는 말할 것입니다, 좋아, 미안, 너무 큽니다 나는 클립하지 않을 것이다, 그러나 나는 정당하다 스피커를 망가 뜨리지 않도록 스쿼시를 내려갑니다

그래서 리미터가 정말 좋습니다 그리고 나는 그 링크에 대해 언급 할 것을 약속했다 리미터는 링크 리미터이며 링크 그룹이 있습니다 여러 채널을 보유하고 있다면 우리는 두 개의 채널이 있다고 말하십시오 그리고 그들은 같은 그룹에 속해 있습니다

그리고 채널 중 하나, 왼쪽 채널, 그 채널에서 정말 큰 일이 일어난다 매우 시끄 럽습니다 그것은 왼쪽 채널 만 아래로 모두 질질 질거야 스테레오 이미지가 오른쪽으로 끝까지 이동합니다 왜냐하면 이것은 올바른 것이었기 때문에 아무것도하지 않았습니다

그러나 그들이 연결되어 있고, 어떤 이유로 든, 채널 중 하나가 큰 소리를 내었고 두 채널 모두 다운됩니다 동시에 스테레오 신호, 스테레오 이미지, 움직이지 않을거야 그것은 중심에 머무르고 그들이 필요한 곳에서 머무를 것입니다 따라서 스테레오 신호의 링크 그룹을 제어 할 수 있습니다 또는 다중 채널 환경에서 – 스테레오 스피커를 연결하려는 경우, 다른 그룹의 서라운드 스피커, 따라서 공간 이미지를 손상시키지 않아도됩니다

그리고 그것은 우리에게해야 할 또 다른 특징이었습니다 글쎄, 다이나믹 처리에 대한 더 많은 코멘트가 있습니다 효과 첫 번째는 실시간 컨트롤입니다 여기에 요약하려고했던 API의 모든 컨트롤은 그러나 그것은 정말로 크다

계속해서 API 문서를 읽으시기 바랍니다 이 모든 컨트롤은 대부분 실시간 컨트롤입니다 당신은 그것들을 사용할 수 있고, 당신의 효과가 실행되면, 당신은 갈 수 있고 거의 모든 매개 변수를 변경할 수 있습니다 당신이 원하는 그 여기서 레벨을 변경할 수 있습니다

당신은 공격, 릴리스, 비율을 변경할 수 있습니다 – 어떤 채널에서나 원하는 모든 것, 모든 밴드에서 인스턴스화를 위해 거의 동일한 API를 사용할 수도 있습니다 때로는 효과를 만들고 싶습니다 즉시 갈 준비를하십시오 재생이 시작되면 바로 모든 매개 변수로 재생

그래서 그렇게 될 것입니다 우리는 또한 약간의 구현을 가지고있다 현재 우리는 두 가지 구현을 제공하고 있습니다 우리가 선호하는 빈도라고 부르는 두 가지 변종 때로는 이러한 효과를 위해 주파수 도메인이있는 경우 구현, 그것은 당신이 밴드에서 매우 정확한 주파수 스플릿을 가질 수있다

당신이 나가는 데 필요할 수도 있습니다 동시에 원하는 프레임을 제공합니다 크기 당신이 오디오 엔진에 줄 수있는 힌트 – 효과 엔진에 – 말하자면, 음, 음, 나는 주파수를 좋아한다 그리고 나는 약 10 밀리 초, 20 프레임 밀리 초입니다

그래서 보증은 아니지만, 당신은 엔진을 말할 수 있습니다, 나는 그것을하고 싶습니다 이 효과가있는 또 다른 중요한 것 그것이 AOSB에 내장되어 있습니다 따라서 모든 AOSB, Android AOSB가이 효과와 함께 출하됩니다 그러나 OEM으로 대체 할 수있는 효과입니다 따라서 OEM이 정말로 스 내퍼와 함께하기를 원한다면 효과 또는보다 나은 구현 또는 무엇인가, 그들은 그것을하도록 격려받습니다

그리고 우리가 청중에 OEM 사람들이 있다면, 나중에 나 한테 말해줘 그러나 그렇습니다, 계속 해보세요 그리고 유일한 것은, 이것들과 함께 아주 멋진 효과를하십시오 아주 좋은 품질의 효과 다른 하나는 개발자가이 효과를 사용할 수 있다는 것입니다

인서트 이펙트로서 응용 프로그램에서 구현되지 않은 상태로 이동할 수 있습니다 미디어 플레이어가 있습니다 음악 응용 프로그램이 있습니다 당신은 단지 가서 안드로이드 미디어, 모든 효과, 동적 처리 효과를 제공하며 사용자가 사용할 수 있습니다

거기에 구현합니다 오늘 요약하면, 우리는 많은 것들을 배웠습니다 첫 번째는 새로운 기능을 도입 한 것으로, 사운드 앰프 따라서 새로운 접근성 기능입니다 스마트 폰과 헤드폰 세트 만 사용합니다

청취 경험을 향상시키는 데 도움이됩니다 Brian은 몇 가지 멋진 데모를 보여 줬습니다 건전한 사람들에게 감사드립니다 그 순간에 그들은 AC를 꺼 버렸다 그래서 우리는 사물을 조금 더 잘들을 수있었습니다

우리는 청력 역치와 청력에 대해 배웠습니다 한계점 교대와 그들이 어떻게 힘을 얻는 지 사운드 앰프가 작동한다는 것 그리고 마지막으로 우리는 역학 처리 효과를 보여주었습니다 코드, 스테이지의 작동 방식, 이동 및 생성 방법 당신 자신의 다이나믹 프로세싱 효과 자신의 응용 프로그램에 포함 할 수 있습니다 그래서 그걸로 우리는 감사를 드리고 싶습니다

이 프로젝트에 참여한 많은 사람들에게 Brian의 팀인 Android 접근성 팀 우리 팀, 안드로이드 미디어 프레임 워크 팀; Google 연구 팀 소리 이해 팀; 그들이 도와 준 타이베이의 우리 팀 오늘 본 애플리케이션을 구현하십시오 그리고 내가 머물고있어서 고맙다 너무 늦게 I / O의 마지막 날 제발, 저희에게 연락주세요 만약 질문이 있다면

고맙습니다

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

[환호와 박수] 체타마, 제가 도입부에 대해 조금 긴장하고 있다는 걸 말씀 드리고 싶네요 이걸 정말 제대로 리허설을 했는지 모를 정도로 말이에요 [웃음] 이건 완전히 즉흥적으로 진행될 거예요 제가 여기서 얘기하는 것에 대해 끊임없이 반복해서 연습하긴 했지만요 굉장히 즉흥적인 강연이 될 거예요 특히 이 도입부가 정말로 걱정되네요 안녕하세요, 안드로이드의 새로운 점을 보러 오신 분들을 환영합니다 [환호와 박수] 이곳까지 오셔서 정말로 감사드립니다 해안선에서 가장 작은 공간에서 강연을 하게 되어서 죄송합니다 사실이에요 설 수 있는 자리가 마련되어 있고요 만약 옆자리가 비어있다면 손을 들어 주세요 다른 분들이 비어있는 자리를 찾을 수 있게 말이에요 그러면 좋겠네요 저는 안드로이드 UI 툴키트 팀의 쳇 하제입니다 저는 안드로이드 시스템 UI 팀의 댄 샌더스입니다 저는 안드로이드 팀에 있는 로만 가이입니다 다시, 한번 더 한번 더 [환호와 박수] 하지만 쳇의 팀에 있지는 않아요 절대로 들어가지 않을 거예요 아뇨, 아뇨 [웃음] 그 반란은 성공적이었다고요 다시는 그런 문제를 반복해서 일으키지 않을 거예요 자, 오늘 우리는 안드로이드의 새로운 점들에 대해서 얘기할 거예요 특별히, 프리뷰가 진행되고 있기 때문에 N의 새로운 점에 대해서 얘기해 봅시다 아니면, 안녕하세요 이걸 보시죠 우리는 이걸 안드로이드의 새로운 점이라고 했어요 사실 우리는 이걸 이렇게 불러야 해요 안드로이드의 새로운 것 같은 점이라고요 이러한 것들에 대해서 이미 어느 정도는 얘기를 나누었고 바라건대, 모든 분들이 프리뷰에서 들었으리라 생각하고 이러한 것들을 사용하며 버그를 신고하고 새로운 특징과 기능을 사용하고 있으리라고 말이죠 그래서 이러한 점들을 볼 거고요 개발자 프리뷰3에서 더욱 새로운 점들에 대해서 그리고 다른 관련된 점들에 대해서 얘기를 나눠볼 거예요 자, 시작해 봅시다 가장 중요한 질문으로 N이 무엇을 나타내는 걸까요? 제 생각에는 말이죠 러시아어로 생각해 봤어요 물론 니엣(nyet)은 아직 또는 말하지 않을 거라는 걸 뜻하지만 현재 이것이 뜻하는 것은 N 프리뷰에요 좀 더 자세히 말해서 N 프리뷰 3를 뜻하는 거죠 이러한 특징에 대해서 관찰하게 되는 다양한 관점과 분석으로 인한 의견이 많지만 사용자들이 실제로 보게 되는 관점과 개발자들의 측면에서 보게 되는 것을 함께 얘기하는 게 좋을 것 같다고 생각했어요 그리고 개발자들이 접하게 되는 특징에 대해서 얘기를 할 거예요 그러한 특징을 이용해서 실행할 때와 그 뒤에 있는 코드에 대해서 말이에요 데모를 이용해서 시작해 보겠습니다 [환호] 그래요 콘스트레인트 레이아웃에 대해서 얘기를 할 거예요 오늘 오전에 있었던 기조연설에서 잠시 언급이 됐었죠 스테프가 이에 대해서 말했어요 로만이 이것이 어떻게 실행되는지 보여드릴 거예요 자, 콘스트레인트 레이아웃은 안드로이드에 있는 완전히 새로운 레이아웃이에요 언번들 라이브러리가 될 거예요 프레임워크를 업데이트 하지 않고도 여러분의 앱에 통합시킬 수 있는 거죠 진저브레드까지 전부 호환이 가능해요 여러분이 원하는 모든 앱에서 사용할 수 있어요 여기에 있는 것은 자체적인 툴과 함께 고안된 첫 번째 레이아웃이에요 안드로이드 레이아웃 매니저를 만들면서 또한 안드로이드 스튜디오의 사용자경험을 고안하는 거예요 기조연설에서 간단하게 보셨겠지만 이게 약간 보기 어려웠어요 자동적으로 제한을 나타내는 시스템을 가지고 있으니까요 새로운 시스템에는 레이아웃을 만들 수 있는 여러가지 방법들이 있어요 예를 들어, 여기에서 저는 버튼을 가지고 있어요 보시다시피 움직일 수 있고 여러분에게 가이드라인을 제공하죠 머티리얼 디자인의 가이드라인이 있는 폴더를 보여주고 있는데요 다양한 위젯사이에서 여러분이 사용해야 하는 올바른 여백을 나타내주고 있어요 위젯사이에 있는 올바른 여백과 화면의 가장자리를 보여주고 있죠 이제, 두 번째 버튼을 추가하면 여기에 있는 두 개의 버튼에 제한을 둘 수 있어요 이제 나란히 정렬되어 있죠 새로운 레이아웃 편집기에서 정말로 효율적인 것은 1초마다 60개의 프레임으로 안드로이드 스튜디오에 있는 안드로이드 레이아웃 이면에서 알고리즘을 작동시킬 수 있다는 거예요 그래서 제가 첫 번째 버튼을 옮기게 되면 여러분도 실시간으로 보시겠지만 레이아웃이 모든 제한을 변형시키는 지 보이실 거예요 이로 인해서 현재 상황에 대해서 훨씬 더 빠르게 많은 피드백을 줄 수 있어요 제한을 두기 전 상태를 보여드릴 수도 있어요 이 제한을 드래그하면서 화면의 가장자리로 당겨서 마우스에서 손을 놓기 전의 모습을 여러분에게 보여드릴 거예요 어떤 일이 일어날지에 대해서 애니메이션으로 보여드릴 건데요 이러한 제한을 두게 되면 렐러티브 레이아웃 뷰를 사용하는 분들이 물론 있으실 건데요 추가적인 위젯을 보내게 되었을 때 때때로 발생하는 상황에 대해서 놀라신 분들도 있을 겁니다 모든 것들이 갑자기 화면에 있는 다양한 위치로 이동하게 되죠 이제는 그런 일이 없어요 그래서 정말 빠르게 더 많은 제한을 생성할 수 있고 제가 가진 두 개의 버튼을 하단에 추가할 수 있어요 오토커넥트를 사용하셔도 됩니다 오토커넥트를 활성화 해서 새로운 버튼을 화면에 두면 예를 들어, 가이드라인을 보시게 되면 화면에 중심에 있죠 이곳에 제 버튼을 놓겠습니다 그러면 시스템에서 자동적으로 저를 대신하여 제한을 생성해줍니다 그래서 저는 제한을 따로 생성하지 않아도 되죠 물론 그 다음에 제한을 수정할 수 있어요 규모를 유동적으로 수정할 수 있어서 모든 공간을 다 차지하게 해도 되고요 아니면 그 반대로도 가능하죠 백분율을 기반으로 하여 위치를 정할 수도 있어요 여기에서는 버튼이 중심에 놓여 있지만 만약에 여러분이 다른 위치를 원한다면 예를 들어, 화면 상단의 25%가 될 수 있어요 여러분의 화면 크기에 맞춰서 조절이 될 거예요 이외에 다른 특징들에 대해서 금요일 오전 9시에 데모를 보여드릴 거예요 예를 들어, 종횡비에 대해서 다룰 거예요 여러분의 위젯을 항상 1:1의 종횡비나 16:9로 원하는 대로 설정할 수 있어요 그리고 마지막으로, 이러한 특징도 기조연설에서 짧게 다뤄졌는데요 여러 가지 위젯을 화면에 두겠습니다 상단에는 텍스트 필드를 두고 레이블에는 텍스트뷰를 넣을 거예요 여기에 있는 위젯의 위치는 제가 원하는 방향에 맞춰서 꼼꼼하게 배치할 거예요 모든 제한은 다 제거하겠습니다 이제, 여기에 있는 필드 레이블 아이콘을 클릭하면 제가 여기에서 의도한 바를 파악할 거예요 그리고 제 레이아웃이 작동할 거예요 이건 잠겨지는 게 아니에요 계속해서 제한을 추가할 수 있어요 행위를 계속해서 변경해도 되고요 다른 위젯을 추가할 수도 있고 자동 추론을 다시 실행할 수도 있어요 여러분은 이러한 과정을 처리할 권한을 가지고 있어요 여러분의 UI를 도울 수 있고 빠르게 만들 수 있도록 말이에요 [박수] 고마워요, 로만 그리고 죄송해요, 한 가지만 더 말씀 드릴게요 이건 프리뷰에요 우리는 알파1이라고 부르죠 개략적으로 설명 드리는 거예요 안드로이드 22 프리뷰를 다운로드 하셔서 직접 사용해보시고 버그를 신고해주세요 제가 직접 버그 트래커를 사용해서 볼 거예요 그리고 엔지니어들을 마구 괴롭혀서 대다수의 버그를 고칠 수 있도록 할 거예요 더욱 많은 것들이 나올 거고요 지금은 아직 작업 중에 있습니다 지금 나온 레이아웃과 레이아웃 편집기가 최종 버전이 아니라고 말씀 드리고 싶어요 마지막으로 질문이 있어요 얼마인가요? [웃음] 100킬로바이트요 좋은 건가요? [웃음] 그러면 쳇에게는 얼마죠? 4백만 달러요 [웃음] 좋아요, 이걸 사용해보시길 바랍니다 피드백을 제공해주세요 슬라이드로 돌아가보겠습니다 정말로 멋진 데모였지만 슬라이드로 다시 돌아가볼까 해요 잘 해보시길 바랄게요 좋아요 멀티윈도, N에서 눈에 띄는 변화 중에 하나이죠 한번에 화면에서 다수의 활동을 할 수 있는 기능이지요 여러분이 볼 수 있는 두 개의 주요한 모드에요 하나는 나란히 정렬되어 있는 분할 화면이고 위에서 아래로 수직으로 분할시킬 수도 있어요 최근 버튼을 보면 여기에서 동영상 캡쳐 기능을 볼 수 있습니다 최근에서 이 기능을 드래그해서 화면의 한쪽에 놔둘게요 그 다음으로 하는 일은 화면의 나머지 반쪽에 있죠 그 다음활동을 하기 위해서는 하나를 탭하기만 하면 되요 드래그를 하다 보면 윈도우 매니저에서 제가 손을 떼기 전까지는 단순히 배경색으로 빠르게 보여주고 있어요 그렇게 하면 전체적인 환경설정을 할 수 있는 거죠 여러분의 앱에 대해서 색다르게 생각하는 거예요 안드로이드 레이아웃의 마술이죠 환경설정을 변경하는 방법을 알아봤습니다 새로운 크기에 맞춰서 레이아웃을 조정하는 법도 알아봤어요 화면의 폼 팩터에 대해서도 봤고요 윈도우 매니저는 이러한 것들을 기반으로 하여 만들어졌어요 여러분이 새로운 사이즈와 나란히 정렬되는 레이아웃을 이용하여 앱이 간단하게 작동될 수 있도록 하실 수 있어요 직접 사용해보시고 테스트 하세요 나란히 정렬시키는 모드 또는 분할 화면 모드를 여러분이 원하는 대로 선택하여 이용해보시길 바래요 필요하시면 API도 사용해보세요 선별하셔서 사용하시면 됩니다 기본값으로 선택할 수 있도록 자동적으로 설정되어 있어요 만약 여러분이 크기 조정이 가능한 활동을 원하지 않으신다면 기본값과 최소한의 사이징으로 정할 수 있는 몇 가지 매개변수가 있습니다 여러분이 소리를 듣고 시스템에서 멀티윈도 모드가 작동되는지 혹은 현재 멀티윈도 모드를 사용하고 계시는지 알 수 있도록 하는 몇 가지 API도 있습니다 그리고 마지막으로, 여러분이 멀티윈도 모드를 사용하고 있고 또 다른 하위활동이 나란히 보여지도록 만들면서 실행시키고 싶다면 하위활동이 인접할 수 있도록 요청하면 됩니다 직접 이걸 확인해보시길 바랍니다 픽쳐 인 픽쳐 모드에서도 확인해보세요 안드로이드 TV에 있는 멀티윈도 모드의 또 다른 기능입니다 이제 여러분은 픽쳐 앤 픽쳐에서 활동을 할 수 있는 기능을 사용할 수 있습니다 비디오를 완전히 재생시키면서 사용자가 보는 컨텐츠를 선택할 수 있는 런처와 같은 다른 활동을 동시에 사용할 수 있습니다 전면에 비디오를 재생시키는 동안에 말이죠 이러한 두 가지 특징보다 더 많은 것들이 있습니다 오늘 오후 4시에 멀티윈도 세션에 참여해보시길 바랍니다 픽쳐 인 픽쳐 모드에 보면 몇 가지 활동을 더 할 수 있는데요 멀티윈도 모드에서 본 것과 굉장히 유사해요 이렇게 진행되는 것들을 볼 수 있고 어떤 일을 할 수 있는지 볼 것입니다 새로운 드래그 앤 드롭 기능이 있어요 적어도 진저브레드 이후부터 드래그 앤 드롭 플랫폼을 가지고 있었는데요 이제는 이것이 기능으로 추가되었습니다 이제 여러분은 멀티윈도 모드를 사용하기 때문에 하나의 활동에서 다른 활동으로 드래그해서 이동시키는 것이 좋지 않을 까요? 이전의 드래그 앤 드롭에서는 허용되지 않는 기능이었어요 그렇게 할 필요가 없었으니까요 하지만 이제는 콘텐츠를 다양한 활동들 앞뒤로 이동하면서 드래그 할 수 있어요 몇 가지 API와 이러한 기능을 이용할 수 있도록 몇 가지를 추가했어요 여기에서 몇 가지 API를 볼 수 있습니다 대다수는 승인에 관련된 거예요 패스워드 필드에서 여러분의 활동으로 복사하고 싶지 않은 활동이 있을 수도 있으니까요 아니면 여러분의 활동으로 인기 있는 동영상을 옮기고 싶지 않을 수도 있고요 그러므로 올바른 승인을 받기 위해서 앞뒤로 주고받는 과정이 이루어집니다 동작을 시작하거나 드래그 셰도우를 업데이트하는데 매우 부적절한 이름이 있다면 동작을 실행하는 동안에 취소할 수 있는 방법이 항상 있어요 사실상 여기저기로 드래그되는 콘텐츠의 섬 네일을 나타내는 거예요 여러분이 원하는 걸 업데이트 할 수 있게 말이에요 셰도우 표현으로 애니메이션을 나타내고 싶으시면 계속해서 업데이트할 수 있어요 오, 그렇군요 그렇게 하고 싶으시다면 말이죠 동영상 캡처를 간단하게 보자면 여기에서의 동작을 볼 수 있어요 어디 봅시다, 그래요 이건 우리가 내부적으로 가지고 있는 몇 가지 데모에요 이건 곧 기사로 공개될 것이고 그러면 외부에서 작동할 수 있어요 승인이 필요 없는 것과 승인을 받아야 하는 것들을 드래그하고 앱 사이로 드래그할 수 있는 기능을 사용하는 것에 대한 기본적인 상호작용을 보여드렸어요 다음으로 넘어가겠습니다 알림 기능이 있어요 자, 바라건대 여러분 모두 이에 대해서 얘기하는 걸 보셨을 거예요 그리고 이제 제가 이 부분에서 15분간 설명을 할 건데요 알림 기능에 대해서 정말로 멋진 모든 부분들에 대해서 얘기할 거예요 끼어들지 마세요 지금은 제가 말하는 시간이니까요 그러니 내일 오전 9시에 다시 방문해주시길 바래요 기조연설에서 본 안드로이드와 안드로이드 웨어2

0에 있는 알림 기능에서 정말로 멋진 새로운 점들에 대해서 자세하게 알아볼 거니까요 그러니까 저는 클릭커를 이리 줘봐요 아뇨, 아직 끝나지 않았어요 있어봐요 [웃음] 저는 여러분이 아셨으면 하는 몇 가지에 대해서 설명 드리고 싶은 거예요 조금 더 알아보고 싶다면 개발자 문서를 확인해보세요 먼저, 새로운 템플릿을 최초로 보여드릴게요 허니콤 이후에 처음으로 공개하는 거예요 약간의 머터리얼 업데이트를 하고 몇 가지만 출시하긴 했지만 몇 가지 새로운 템플릿은 어느 정도 이동을 할 수 있고 앱에 새로운 속성을 만들 수 있어요 알림에 보낼 수도 있고요 이렇게 하면 누군가 어떤 걸 올렸는지 바로 알 수 있어요 번들 알림 기능도 있어요 원래 안드로이드 기어에서 개발했던 기능이죠 마침내 휴대폰과 태블릿에서도 이용 가능해요 몇 가지 알림들을 하나로 묶을 수 있는 기능이죠 바로 답장 기능도 있어요 답장버튼을 클릭하고 글을 쓰면 텍스트가 바로 나타나요 다시 말씀 드리지만 안드로이드 웨어에서는 이미 있었던 기능이에요 시계를 이용하여 얘기할 수 있고 메시지를 보낼 수 있죠 이제는 닫힌 화면에서도 그렇게 할 수 있는 거예요 사용자가 그러한 기능을 설정하면 말이죠 시스템 UI에 관련된 것들에 대해서 설명하고 있는데요 빠른 설정에 대해서 설명 드리고 싶네요 사용자들이 오랜 기간 동안 요청해온 기능이 마침내 나오게 되었는데요 편집 가능한 기능이에요 여러분이 원하는 대로 빠른 설정에 있는 메뉴를 추가하거나 제거할 수 있어요 사실 이 기능에는 더욱 빨라진 빠른 설정이라는 이름도 지어졌어요 제가 방금 지어내긴 했지만요 더욱 빨라진 빠른 설정은 다섯 가지로 이루어진 목록인데요 여러분이 언제든지 볼 때마다 알림 목록의 상단에서 나타나는 빠른 설정으로 다섯 가지가 있습니다 원하시는 다섯 가지의 기능을 빠른 설정으로 이동하면 한번의 터치로 바로 사용하실 수 있습니다 언제든지 여러분이 알림을 볼 때 말이에요 [박수] 잠시만요 그게 다가 아니에요 집에서 이 영상을 보고 계시는 개발자들이 있으시다면 아시다시피 프리뷰 후반이 되면 여러분이 고유의 빠른 설정 타일을 만들 수 있어요 안드로이드N을 사용하는 모든 사용자들이 사용할 수 있어요 그러니 타일서비스에서 API문서를 한번 보시길 바래요 빠른 설정 타일에 대한 전체 라이프사이클을 생성할 수 있어요 언제 사용자가 타일을 목록에 추가하고 언제 타일이 실제로 보여졌는지 확인할 수 있죠 라이브 업데이트가 필요하다면 그렇게 할 수도 있어요 그리고 물론 가장 중요하게도 사용자가 타일을 클릭했을 때 무엇을 할지도 알 수 있어요 getQsTile을 호출하면 타일 오브젝트에서 포인터가 나타나고 여러분의 모든 상태를 보여주며 아이콘의 변경, 이름의 변경과 동작 상태로 들어가고 나올 수 있도록 허용하여 리소스의 사용 가능 여부에 따라서 밝기를 이용하여 알려줍니다 모든 변경사항을 적용하고 난 뒤에 업데이트타일을 호출하는 것을 잊지 마세요 여러분만의 설정을 맞추기에 완벽한 방법이에요 잠금 화면에서 접근을 하기를 원하는 사용자들을 위한 앱의 몇 가지 빠른 기능이에요 만약 여러분이 스마트 홈을 만드느라 바쁘시다면 여러분에게 가장 먼저 필요한 것은 휴대폰에서 쓸 수 있는 빠른 버튼이에요 클릭하기만 하면 집에 도착하는 즉시 여러분의 테마 음악을 재생할 수 있어요 이렇게 하기 위해서 빠른 설정이 만들어졌어요 마지막으로 여러분이 해야 할 일은 매니페스트에서 나머지 작업을 하는 거예요 시스템 UI에서 여러분의 빠른 설정을 인식하고 어떻게 다룰지 알 수 있도록 하기 위해서 모든 것들에 대해서 올바르게 승인 받도록 신경 쓰시길 바래요 화면 사이즈에 대해서 얘기를 해볼게요 이건 사실 접근성에 관련된 기능이에요 폰트 크기를 늘리고 심지어 대체할 수 있도록 N에 도입한 기능이에요 폰트 크기는 안드로이드에서 오랫동안 사용할 수 있었던 기능이에요 개발자들이 ASPI에서 고유의 활자체를 명시하게 되면 사용자가 선택한 폰트 크기에서 크게 증가하여 사용자들이 이에 관련된 도움을 요청하거나 화면에서 전체적인 텍스트를 봤으면 좋겠다는 얘기를 하게 됩니다 하지만 개발자들도 아시다시피 ASPI는 굉장히 제한적이잖아요, 그렇죠? 폰트 크기를 기반으로 해서 레이아웃을 변경하지는 않아요 이를 해결하기 위해서 랩 콘텐츠를 사용하면 됩니다 하지만 시스템에는 특정한 부분들이 있어요 예를 들면 [헛기침] 알림 기능 [헛기침] 이러한 기능은 알림 기능과 잘 맞지 않아요 구조의 크기가 모든 추가적인 텍스트를 수용할 수 있도록 변경되지 않기 때문이에요 안드로이드 N에서는 디스플레이 크기 기능을 가지고 있어요 표시창 설정 단추에 가서 클릭을 하면 런타임에서 장치의 dpi를 변경시켜요 장치에 있는 모든 UI에서 단지 텍스트뿐만 아니라 새로운 밀도를 가지도록 변경할 수 있는 새로운 방법이에요 여러분은 모든 걸 크게 확장하거나 여러분이 가지고 있는 작은 화면에 맞춰서 매우 작은 크기로 축소할 수 있어요 085에서 거의 1과 1/2까지 설정할 수 있어요 이제는 제가 말하지 않아도 아실 거라 믿어요 하지만 레이아웃에서 px는 피하시길 바래요 이게 장치의 밀도를 변경하는 것이기 때문에 레이아웃에서 dps를 사용할 때 증가되거나 다른 계산을 사용할 수 있거든요 그 다음으로 여러분이 원했던 것을 보여드릴 거예요 비디오를 이용해서 바로 보여드리면서 정말로 명확하게 여러분의 앱이 sw320p에서 정말로 잘 작동되는 것을 보실 수 있을 거예요 많은 분들이 커다란 화면을 가진 휴대폰을 사용하고 있는 걸 알고 있지만 작은 화면을 가진 휴대폰을 쓰시는 분들도 계시니까요 갑자기 사용자가 밀도를 바꾸게 되면 화면이 곧바로 sw320dp로 바뀌게 될 거예요 이제 여러분의 앱을 조금 더 우아하게 만들어 보겠습니다 여기에 있는 비디오에서 어떻게 할 것인지 보여줄 건데요 이건 라이브 리사이즈에요 화면 크기로 들어가서 슬라이더를 움직이면 더 커지고 작아지죠 모든 것들의 크기가 변경되는 것을 볼 수 있을 거예요 텍스트뿐만 아니라 내비게이션 바, 상태 바 그리고 모든 다른 것들이 변경됩니다 사실 지금 이 부분에서 문제가 생겼어요 기본크기가 원래 이렇게 보이고 폰트 크기를 바꾸게 되면 다른 것들도 커져야 하는데요 하지만 변경되지 않았어요 하지만 화면 크기는 모든 걸 변경시킬 수 있죠 이제 여러분은 휴대폰에서 모든 정보들이 여러분에게 적절하게 보여질 수 있도록 UI의 모든 부분들을 더욱 크게 혹은 더욱 작게 만들 수 있어요 로컬에 대해서 얘기를 해볼게요 자, 해봅시다 좋습니다 고마워요, 댄 멀티 로컬 [박수] 아뇨, 아뇨 아직 안 끝났어요 [웃음] 정말로 보기에 놀라운 것은 객석에서 차양을 따라서 비어있는 좌석의 구조와 형태에요 뒷자리에 앉으면 정말로 덥죠? 이래서 360 피드로 봐야 해요 [웃음] 네 라이브 스트림으로 집에서 보면 덥지 않죠 집에서 영상을 통해서 보시는 분들을 위해서 멀티 로컬에 대해서 얘기하겠습니다 이건 정말로 많은 요청을 받았던 기능이에요 제가 속한 국가에 있는 사람들이 아니라 하나의 언어 이상을 사용하는 사람들이 요청했더군요 [웃음] 진짜에요 이런 말을 많이 들었어요 사람들이 절 좋아한다고요 그리고 이런 분들에게는 UI를 다루는 것이 매우 힘들 수 있어요 때때로 적절한 리소스가 없거나 다른 문제가 있을 때 여러분은 몇 가지 콘텐츠나 앱이 여러분이 선호하는 언어로 알려주거나 다른 시스템 기본값보다는 다른 대비책을 가지기를 원해요 다양한 언어로 설정하고 다룰 수 있는 로컬을 설정하고 싶은 많은 상황들이 있어요 이제는 그렇게 할 수 있습니다 이제 여러분은 이러한 다양한 언어를 선택할 수 있을 뿐만 아니라 여러분이 원하는 대로 장치에서의 보여지는 순서를 설정할 수 있어요 그리고 여러분은 또한 새로운 언어와 우리가 추가한 별어를 넣을 수도 있어요 작은 동영상 캡쳐 기능이 여기에 있고요 여러분이 여기에서 선택할 수 있어요 언어로 들어가면 저는 하나의 언어만 선택했는데요 왜 그랬는지는 모르겠지만요 여기에서 Deutsche를 선택하겠습니다 이건 네덜란드어가 아니라 독일어를 뜻합니다 참고하시길 바래요 저는 리히텐슈타인 변화를 선택했는데요 재미있을 것 같아서 골랐어요 그리고 순서를 다시 정렬해서 이걸 첫 번째에 놓을게요 이렇게 하니 제 UI를 읽을 수가 없네요 이제 독일어가 전체적인 시스템의 주 언어가 되었기 때문이에요 멀티 로컬이었습니다 이걸 사용해보시길 바래요 도즈 모드에 대해서 얘기해볼 거예요 이미 마쉬멜로우에서 도즈 모드가 있었는데요 간단하게 검토만 하겠습니다 시스템 상태를 다루는 직원의 다이어그램을 가져와봤는데요 이걸 보시게 되면 바로 아실 것 같았어요 다이어그램을 바로 여러분에게 보여드리겠습니다 도즈 모드가 무엇인지 곧바로 이해하시게 될 거예요 이건 좀 뻔한 것이긴 하지만 하지만 하이라이트를 사용하고 몇 가지를 지목하여 중요한 부분을 표시했어요 도즈 모드는 화면이 꺼진 이후에 작동됩니다 장치가 정지된 상태이고 배터리로 작동될 때에 나타나죠 얼마 동안 작동하고 있다가 도즈 모드로 들어가게 되요 여기에 보시면 초록색으로 표시되어 있는 부분들이에요 그리고 여기에는 관리 창이 있어요 갑자기 활동이 허용되어서 시스템에 참여하고 있는 거예요 관리 창에서 일반적인 것들을 실행하고 있는 거예요 그리고 여기에서 다시 반복되는데요 여기에 있는 관리 창 사이에서 기하급수적으로 소요 시간이 늘어나요 이렇게 반복적으로 일어나고 그 사이에는 도즈 모드가 있어요 이러한 활동이 발생되지 않는 시간이죠 네트워크 활동이 없고요 지연된 작업과 싱크도 없어요 웨이크록도 없죠 전부 좋아요 배터리가 더욱 오랫동안 지속되게 하죠 이 화면을 보면 다 알 수 있지만 계속 진행하면서 N에 대해서 얘기해볼게요 N에는 이렇게 모든 것들이 있지만 추가적으로 경량인 부분들도 있어서 도즈 모드에서는 이제 정지할 필요가 없어요 사람들의 주머니에서 오랜 시간 동안 있으면서 사용되지 않은 채로 있으니 활동으로 인해서 많은 배터리를 사용하지 않는 게 좋지 않을까요? 정지되지 않은 채로 있는 부분을 발견하여 잠시 동안 기다린 다음에 도즈 모드로 들어가게 되요 그리고 관리 창이 실행되고요 마쉬멜로우처럼 제한적이지는 않지만 그와 비슷한 개념을 가지고 있는 것이죠 여기에서도 보면 바로 알 수 있어요 다이어그램에서 유사한 구성 요소에서는 비슷한 색상을 가지고 있다는 게 보이실 거예요 즉, 유사하게 도즈 모드에 들어간다는 걸 뜻해요 그리고 비슷한 바코드 형태도 있죠 이것 또한 마찬가지에요 [웃음] N에 있는 기능을 다시 정리해보면 제가 방금 말씀 드린 경량 도즈가 있고요 사실상 이미 기능의 수퍼세트에요 장치가 정지된 상태이면서 동시에 경량의 기능을 가지고 있는 모든 기능이 N에 있어요 다이어그램을 이렇게 합친 것보다 더욱 제대로 된 기능을 만들면 이렇게 보이겠죠 [웃음] 제가 말씀 드렸다시피 이건 좀 뻔한 거예요 [박수] 몇몇 사람들은 제가 단어를 좀 더 사용해야 한다고 얘기해요 빨리 넘어가도록 할게요 마쉬멜로우에서 여러분이 장치를 가지고 있고 화면은 꺼져있어요 배터리로 작동하죠 정지된 상태이고 동시에 여러분은 네트워크를 사용하는데 제한되었고 지연된 작업 싱크, 알람이 있고 웨이크록은 없어요 N에서 다음과 같은 기능을 가지고 있고 서비스가 제한되어 있고 경량이에요 하지만 정지된 상태일 필요가 없어요 여러분의 주머니나 다른 곳으로 이동해서 사용해도 됩니다 그러면 여러분에게 덜 제한적이게 되죠 백그라운드 활동이 있기 때문에 동시에 실행되는데 있어서는 여전히 유효해요 오늘 오후 5시에 진행되는 배터리와 메모리 최적화와 강연에 참여하셔서 시스템 상태와 더 많은 것들에 대해서 알아보세요 시스템 상태에 관련해서 말이 나왔으니 스벨테 프로젝트에 대해서 말씀 드리겠습니다 최근에 제품들을 출시했을 때 시작된 프로젝트에요 시스템에서 배터리를 크게 소모시키는 것이 무엇인지 알아내고 앱에서 고쳐야 하는 것들과 필요한 것들을 해결하기 위해서 플랫폼에서 어떻게 할 수 있는지 개발자들에게 알려주기 위해서 만들었는데요 결국 완성해냈습니다 N에서, 이제는 다음과 같은 동작을 더 이상 겪지 않아도 됩니다 물로 이러한 동작들이 그리울 수 있어요 하지만 이제는 보내야 합니다 조사과정 속에서 이러한 상황들을 우리는 발견했어요 팀이 하고 있는 일 그리고 연결성과 관련하여 어떤 일이 발생할지 메시지가 발송되고 이러한 모든 동작들이 활성화 되도록 만들었어요 사용자들이 와이파이 네트워크가 변경됐을 때를 정말로 알고 싶어 하더라고요 그래서 회사 안에서 걸어 다니면서 한 라우터에서 다른 라우터로 옮기면서 모든 활동들을 활성화 할 수 있어요 그렇게 되는 거예요 그 다음은 뭘 해야 할까요? 아무것도 없어요 그리고 다시 자러 갈 거에요 그 동안에 시스템에서는 스래싱을 하고 있어요 전부 다 활성화되어 있으니까요 한 번에 메모리로 다 들어갈 수 없기 때문에 오래된 것부터 정리해서 새로운 파일이 시작될 수 있도록 하는 거예요 그리고 이렇게 지긋지긋한 스래싱이 시작되는 거죠 비슷하게도, 새로운 비디오나 새로운 이미지를 사용자가 촬영하면 그러면 여러분의 휴대폰에 있는 사용 내역 앱에서 결정을 내려요 오, 새로운 이미지에 대해서 인식하려고 하네요 사용자가 영수증을 사진으로 찍었을 수 있으니까요 그래서 활동이 관련된 40개의 파일과 함께 활성화되죠 그리고 여러분이 고양이의 이미지를 찍었기 때문에 그 사진에 대해서 인식할 것이 없다는 걸 알게 되면 다시 비활성화가 되요 트래싱과 비슷하죠 왜 우리가 그러한 기능을 줄이면서 단순히 이러한 전달 과정을 없애고 사용자의 편의를 위하여 배터리를 연장시켜 장치의 수명을 더욱 늘리지 않았을 까요? 대신에 새로운 접근을 이용했어요 잡스케줄러를 사용했죠 우리가 최근의 출시에서 얘기를 나눠본 주제에요 특히 새로운 API가 있는데요 콘텐츠를 변경에 대해서 요청을 허용하는 기능으로 여러분의 주의를 기울였으면 해요 곧바로 실행되지는 않아요 이전의 접근에 관련하여 문제가 있거든요 하지만 작업이 스케줄에 들어가기만 하면 새로운 미디어에 대해서 여러분이 알 수 있을 거예요 다시 말씀 드리지만, 배터리와 메모리 최적화 세션에서 더 많은 것을 알아보시길 바래요 그러면 앱은 여러분이 고양이 사진을 찍을 수 있도록 허용하겠죠 네 [웃음] 그럴 거예요 알고 보니 [청취불가]가 사용내역에 유효한 사진이었던 거죠 네, 좋은 지적이에요 고마워요 데이터 세이버는 사용자들에게 몇 가지 기능을 가능하게 만들어줘요 [청취불가] 장치에게, 그러니까 시스템에 특정한 앱이 사용하는 데이터의 양을 제한하도록 알릴 수 있어요 제가 살고 있는 이곳에서는 와이파이에 대해서 그다지 신경을 쓰지 않는데요 저는 데이터 플랜을 사용 중이고 데이터가 무제한이라서 그렇게 중요한 게 아니에요 물론, 전 세계적으로 보면 그렇지 않죠 네트워크 접근에 대해서 정말로 큰 비용을 부과해야 할 수도 있으니까요 아니면 정말로 속도가 정말로 느릴 수도 있고요 모든 사람들이 가지고 있는 제한된 대역폭이나 요금제로 사용 중인 대역폭을 다 사용하길 원하지 않으실 거예요 그래서 우리는 사용자들이 데이터 사용을 관리할 수 있는 기능을 제공합니다 더 적은 데이터를 사용하도록 알려줄 뿐만 아니라 특정한 앱에서 데이터 사용을 허용하거나 제한 또는 허용하지 않는 거죠 시스템 설정에 들어가면 이제는 여러분이 이걸 각각의 앱에 기반하여 토글하면 되는 거예요 개발자의 측면에서 보면 여기에 주의를 기울여야 한다는 거겠죠 여러분의 앱이 언제든지 제한될 수 있으니까요 이러한 것이 이루어지는 지에 대해서 여러분이 알아낼 수 있는 메커니즘이 시스템에 있으니 여러분은 접속 서비스에 대해서 문의하여 여러분이 A, 사용하는 만큼 계산되는 요금제 네트워크에 있는지 B, 백그라운드 접근이 사실상 제한되어있는지 알 수 있어요 다이렉트 부트, 안드로이드 N에서 제가 가장 좋아하는 특징 중의 하나에요 여러분의 장치에 PIN 코드를 설정해놓으면 장치는 암호화될 것이고 몇 가지 이유로 인하여 재시동되면 업데이트를 했거나 자동업데이트를 했을 수도 있고 아니면 즉흥적으로 재시동을 했을 수도 있죠 그렇게 되면 때때로 장치에서 PIN 코드 화면으로 나타날 수도 있어요 여러분이 PIN 코드를 입력해야 하죠 그렇게 되면 여러분은 문자 메시지나 이메일 또는 전화를 못 받을 수 있어요 하지만 지금의 시스템에서 다른 점은 여러분에게 PIN 코드를 요청하기 전에 잠금 화면으로 나타나면서 시동될 것이에요 여러분이 PIN 코드를 입력하고 몇 가지 앱이 작동시키고 다이렉트 부트 모드를 작동시킬 수 있는 여러분의 앱을 등록시킬 수 있을 때까지 말이에요 즉, 잠금 화면에서도 여러분은 몇 가지 기능에 접근할 수 있는 거예요 전화를 받거나 메시지를 받는 기능 말이죠 이에 대해서 더 많은 것들을 알고 싶으시거나 이러한 모드를 사용할 수 있는 여러분의 앱에서 어떠한 것들을 할 수 있는지 알고 싶으시다면 목요일 오전 9시에 있는 강연에 참여해주시길 바랍니다 안드로이드 보안에 대한 강연이 될 거예요 많은 요청을 받았던 또 다른 특징은 외부의 저장공간에서 특정한 디렉토리에 대한 접근이에요 만약 여러분의 앱이 사용자의 외부 저장공간에 있는 이미지, 음악, 비디오 또는 다른 것들을 인식해야 한다면 지금까지는 여러분이 전체적인 저장 공간에 대한 접근을 요청해야 했어요 플레이 스토어에서 앱을 다운로드 받을 때 사용자들이 약간 두려움이 될 수 있는 승인 이었어요 그 대신에, 여기에 있는 스크린 샷을 보시면 여러분의 앱은 특별하게도 이미지나 음악과 같이 하나의 디렉토리에 대한 접근을 요청할 수 있어요 N의 새로운 승인 시스템과 조합하여 사용자들이 어떤 앱을 사용하려고 하는지 그리고 어떤 앱이 접근할 수 있는지 확실하게 볼 수 있어요 안드로이드 포 워크에 관해서 여러분이 이에 관한 세션에 참여했으면 좋겠는데요 정말로 많은 것들에 대해서 다뤄요 이번 출시에서 안드로이드 포 워크에 있는 몇 가지의 특징만 여러분에게 말씀 드리려고 해요 그러니 목요일 오전 2시에 있는 작동 중인 여러분의 앱에 관한 세션에 참여하세요 그 동안, 여러분의 휴대폰에 업무 프로필이 설치되어 있다면 새로운 기능인 워크 모드가 있는데요 이건 워크 모드를 비활성화 하는 기능이에요 이에 대해서 조금 더 강조해서 말씀 드려야 할 것 같네요 워크 모드가 아니에요 빠른 설정에 들어가서 토글을 해제하면 되요 그렇게 하고 보시면, 여러분이 화면에서 볼 수 있을지 모르겠지만 작업 프로필 앱이 비활성화 되었어요 여기에 있는 것들 중에서 하나를 클릭하고 다이얼로그가 나오는데요 이걸 비활성화 할게요 이걸 켜고 끄기만 하면 되요 정말로 쉬워요 여러분이 선택하기만 하면 주말 동안에 업무용 이메일을 확인하지 않고 시간을 보낼 수 있어요 워크 챌린지라고 불리는 것도 있는데요 회사에서 해야 하는 불편한 인증과 같은 것들을 하지 않아도 되도록 하는 거예요 추가적으로 잠금 화면에서 제한하는 패스워드를 회사에서 요청하는데요 이제는 그렇게 하지 않아도 됩니다 대신에 여러분은 업무 프로필 앱이 작동될 때를 위해서 하나의 패스워드를 제공하면 됩니다 동영상 캡쳐한 것을 보여드릴게요 업무 프로파일 앱을 작동시키면 여러분의 패스워드를 확인하죠 그리고 앱이 실행되요 그리고 이제는 다른 워크 앱을 작동시켜볼게요 곧바로 실행될 거예요 여러분이 이미 전체적인 시스템에 인증했기 때문이에요 이제는 우리가 여기에 있는 진짜 이유를 말씀 드릴게요 개발자들을 위해서죠 처음으로 말씀 드릴 중요한 부분은 이미 기조연설에서 다뤄졌는데요 런다임을 변경하는 거예요 이제는 훨씬 빠른 인터프리터를 사용할 수 있어요 즉, 여러분의 앱이 설치될 때에 롤리팝이나 마쉬멜로우처럼 예정보다 빨리 편집되지 않아요 먼저 인터프리팅 모드로 작동되어서 JIT이 여러분의 앱에서 매우 자주 작동되거나 높은 성능으로 효율적인 코드의 부분들을 인식하면 제 시간에 모든 것들을 곧바로 편집할 거예요 여러분의 장치가 대기모드로 들어가면 앱애서 예정보다 미리 작동되는 부분의 프리컴파일로 JIT에서 모인 정보를 사용할 것이에요 이렇게 세가지를 알아볼 거예요 인터프리터, JIT 그리고 예정보다 빠른 컴파일 이러한 작업을 하는데 몇 년이 걸렸어요 이러한 세 가지 모두를 작업했어요 이제는 이러한 세 가지를 동시에 할 수 있어요 금요일 오후 1시에 미술 팀에서 진행하는 미술에 발전에 관한 강연에 참석하길 바랍니다 미술에 대한 모든 것들에 대해서 상세하게 강연할 것입니다 새로운 런타임 라이브러리도 있는데요 ICU4J의 새로운 기능으로 이제는 프레임워크의 일부분이에요 ICU는 라이브러리에요 여러분의 앱의 세계화와 인터넷 문명화에 유용하죠 꽤 큰 규모의 라이브러리에요 이제는 프레임 워크의 일부에요 다양한 패키지 이름을 가져서 기존에 있는 패키지 이름과 충돌하지 않아요 이제 여러분은 프레임워크의 기능을 사용하는 거예요 APK의 규모를 줄일 수 있죠 몇 가지 새로운 javautil 패키지도 추가했어요 여기에 javautil기능이 있는데요 Predicates와 같은 기능적인 스타일의 프로그래밍에 유용한 클래스와 API를 가지고 있어요 새로운 스트리밍 API도 있어요 새로운 언어 기능과 함께 조합하여 사용할 때에 굉장히 유용해요 새로운 자바 8 프로그래밍 언어 기능을 사용하기를 원하신다면 여러분의 그래이들 빌드 파일을 새로운 잭 컴파일러로 변경하셔야 합니다 또한 프로그래밍 언어 18 소스와 바이너리가 호환성을 갖도록 해야 해요 그렇게 하면, 여러분은 람다 기능에 접근할 수 있어요 람다는 여러분의 클래스에서 익명으로 실행되며 빠르게 인식되어서 진저브래드까지 호환이 가능해요 람다가 어떤지에 대한 예시가 몇 가지 있어요 어떤 것인지 잘 모르시거나 한번도 써보신 적이 없다면 이에 관한 문서와 기사 가 온라인에 많이 있어요 확인해보시길 바랍니다 여러분의 삶을 훨씬 더 좋게 만들어 줄 거예요 RxJava와 같은 것들을 사용하거나 안드로이드 UI 프레임 또는 람다를 많이 필요로 하는 경우에는 훨씬 더 쉬울 거예요 하지만 조심하셔야 해요 이러한 것들은 익명의 클래스를 생성해내니까요 보여지는 것보다 대가가 큰 편이에요 하지만 대다수의 앱에서는 그렇게 문제되지 않아요 기본값과 동적 인터페이스 방법은 두 개의 매우 유용한 기능이에요 이전의 기능과는 호환되지 않지만요 만약 기존의 인터페이스를 가지고 계시다면 새로운 방법을 추가하고 우리의 기본값을 실행할 수 있어요 추상 클래스에서 할 수 있는 것과 매우 유사하죠 다시 한번 말씀 드리지만 어떠한 파일이든지 고객과의 문제 없이 여러분의 APS를 보낼 수 있어요 많은 수신자들이 보게 될 유명한 어댑터 패턴을 생성하는데 쓸 수도 있어요 몇 가지 콜백 메소드를 가지고 있는 수신자가 있어요 일반적으로 그 다음으로 제공되는 어댑터 클래스는 이러한 모든 메소드를 실행하여 여러분이 그 중에서 한 가지의 메소드를 실행하려고 할 때에 모든 메소드를 선언할 필요가 없어요 그래서 이제는 기본값 메소드를 사용하는 것이 매우 쉽습니다 또한 인터페이스에서 동적 메소드를 가질 수 있어요 주석을 반복에 대해서 얘기하자면 여러분들 중 대다수는 수 많은 주석이 있지만 그러한 기능에 만족해하는 멋진 프레임워크를 가지고 있을 거예요 또한 불행하게도, 이전의 버전과 호환되지는 않아요 하지만 이제는 하나의 주석을 가지고 있어요 하단에 보면 @Exportable이라고 예시가 있죠 같은 종류로 여러 번 적을 수 있어요 예를 들어, 클래스를 하나 가지고 있다고 해볼게요 다른 포맷으로 직렬화 할 수 있는 클래스를 가지려고 하기 위해서 주석에 값을 정렬하는 방법을 사용하는 대신에 주석을 그냥 반복하기만 하면 됩니다 오디오 팀과 미디어 팀이 정말로 열심히 일했어요 안드로이드의 이전의 버전에서 오디오 지연을 줄이기 위해서 말이죠 대다수의 작업은 시스템의 본질적인 부분을 다루면서 이전에 이미 처리 되었어요 그리고 결국 오디오의 지연을 줄이기 위한 일은 더욱 높은 수준에서 이루어 졌죠 물론 여러분의 장치에 따라서 다를 수 있지만 오디오를 재생하면 40에서 70밀리세컨드의 지연이 줄었어요 활성화 하기에 굉장히 쉽죠 화면에 보시면 바로 예시가 있는데요 여러분의 미디어 플레이어에 오디오 속성을 생성할 때에 단지 저 지연 표시를 설정하기만 하면 되요 그리고 새로운 특징에 여러분이 접근할 수 있도록 만들었는데요 재생을 개선시키기 위해서 사용할 수 있는 몇 가지 새로운 API입니다 여러분이 미디어를 다시 재생할 때에 실행되는 언더런의 수를 생성할 수 있는데요 역동적으로 크기를 조절할 수도 있어요 지나치게 많은 언더런이 있으면 여러분의 버퍼가 실행을 하기 시작해요 이에 대해서 더 많은 것을 알고 싶으시다면 특히 여러분의 지연을 더욱 더 개선시키기 위하여 근본적인 API의 본질을 사용하는 방법을 알고 싶으시다면 목요일 오후 3시에 있는 강연에 참여하세요 렌더스크립트, 수 많은 부분이 개선되었어요 이제는 단일 소스 파일이에요 이제 여러분은 서로 호출할 수 없는 많은 커널을 가질 수 있어요 복잡한 컴퓨터 프로그램을 생성하기에 훨씬 더 쉬워졌죠 우리는 또한 축소판 커널을 만들었어요 그래서 여러분은 맵리듀스 종류의 API를 사용할 수도 있어요 예를 들어, 여러분이 히스토그램을 계산해야 한다면 축소판 커널을 이용하여 할 수 있죠 다양한 이미지에도 접근할 수 있어요 Allocation

getByteBuffer도 추가했어요 렌더스크립트 커널을 작동할 때에 생겨서 여러분이 가지고 있는 할당량을 줄이는데 도움을 줄 수 있어요 마지막으로, 여러분이 정말로 많은 데이터를 다루신다면 여러분을 위하여 우리는 16비트의 부동 소수점을 지원합니다 여러분의 데이터의 크기를 반으로 줄일 수 있도록 도와주죠 정확성이 여러분에게 중요한 요소라면 이에 대해서 알아보시는 게 좋을 거예요 OpenGL ES 32은 그래픽에 관심이 있는 사람들을 위한 거예요 OpenGL ES의 가장 최신 버전이죠 안드로이드 N에서 공개하는 건데요 효과적인 OpenGL ES 31 플러스로 안드로이드 확장팩으로 불려요 안드로이드 확장팩은 OpenGL 확장판의 묶음이죠 이러한 확장팩이 여러분의 장치에 도입되면 여러분은 이러한 모든 확장 기능에 접근할 수 있어요 이건 OpenGL ES 개발자들의 삶을 훨씬 더 편하게 만들어 줄 거예요 이러한 내용은 OpenGL ES 32 설명서에 다 포함되어 있어요 단 한가지만 빼고 말이죠 슬라이드를 보면 아실 수 있어요 고급 혼합 방식을 포함하여 강조되어 있는 부분이에요 이제는 하드웨어가 이러한 모든 혼합된 모드를 감당할 수 있어요 포토샵이나 여러분의 이미지 프로세싱 앱에서 볼 수 있는 모드 말이죠 이를 위해서 셰이더를 더 이상 적을 필요가 없어요 이제는 OpenGL의 한 부분이에요 여러분은 테셀레이션과 지오메트리 셰이더를 쓸 수 있어요 런타임에서 지오메트리를 생성하는데 매우 유용한 것들이에요 일반적으로 여러분이 할 수 있는 것은 꽤 간단한 메쉬에요 카메라가 물체에 점점 더 가까워지면서 더욱 더 많은 삼각형을 역동적을 추가할 수 있어요 화면에서 더욱 부드럽게 보이게 말이에요 이렇게 추가적인 삼각형이 필요하지 않을 때에는 메모리를 많이 사용하거나 성능에 신경 쓰지 않아도 되요 새로운 텍스쳐 압푹 포맷이 있는데요 ASTC 라고 불려요 그리도 다른 기능도 있죠 OpenGL ES를 사용하시면 기조연설에서 이미 언급되었던 불칸에 대해서 신경을 많이 쓰실 건데요 더 많이 알고 싶으시면 오늘 오후 6시에 이에 관한 강연이 있을 거예요 참여하시면 좋겠죠 불칸은 그래픽에서 낮은 수준의 API에요 OpenGL보다 더 낮아요 어떻게 보면 여러분은 사실상 드라이버가 되는 거예요 여러분이 다중 스레드에서 GPU에 명령을 생성할 수 있는 거죠 그렇게 되면 여러분의 앱의 효율성을 개선시킬 수 있어요 드라이버 자체에 오버헤드가 지나치게 있을 수 없어요 더 많은 드로우 콜을 만들 수 있죠 화면에 더욱 많은 오브젝트를 둘 수 있고 여러분의 셰이더를 오프라인으로 프리컴파일 할 수도 있어요 확인하는데 굉장히 유용하겠죠 규모가 큰 최적화에도 말이에요 장치에 있는 드라이버가 여러분의 셰이더를 최적화 하는 것과 셰이더를 편집하는데 너무 많은 시간을 보내지 않으면서 균형을 찾으려 하기 때문이에요 크로스 플랫폼 API도 있어요 안드로이드 N에 있는 불칸은 윈도우나 리눅스에서 볼 수 있는 불칸과 같아요 오늘 드라이버에서 전달되죠 여러분의 컴퓨터에서 여러분만의 코드를 적을 수도 있어요 그 이후에 휴대 기기에서 작동시킬 수 있죠 또한 OpenGL ES보다는 약간 더 어려워요 정확한 메모리 관리와 동기화를 해야 해요 우리는 미들웨어에서 불칸의 상당히 증가할 것이라고 생각해요 유니티나 언리얼 엔진과 같은 엔진들은 불칸을 지원하거나 불칸의 지원을 받아서 작동해요 이러한 엔진 중에 하나를 사용하신다면 아무 문제 없어요 여러분의 앱이 무료로 더욱 좋아지는 거니까요 기능성 뿐만 아니라 성능에 관련하여 adb를 위한 개선점들이 있어요 우리는 더욱 완전한 기능을 만들려고 했어요 더욱 전체적으로 말이에요 그래서 여러분은 꽤 많은 컨텐츠를 사용할 수 있어요, 예를 들어 LS 이러한 것들에 관해 adb에서 일어난 결과를 볼 수도 있어요 호스트를 이용하여 다른 프로세스로 이걸 보낼 수도 있고요 여러분이 사용할 수 있도록 더욱 완전한 기능을 제공하고 있어요 또 다른 거대한 성능 개선점이 있는데요 정말로 복잡한 알고리즘에서 특별히 노력해서 이뤄낸 건데요 버퍼 크기를 늘리는 거죠 [웃음] 구글에서는 이런 걸 해요 [웃음] 그래서 해 보세요 adb를 아신다면 선택권이 별로 없다는 걸 아실 거예요 하지만 즐겁게 이용하죠 예를 들어, 프로세스 종료 상태를 설정하고 멀리 있는 장치에 표준 입력을 전송할 수 있는 것은 특히 테스를 자동화하는데 유용해요 여러분의 장치에서 많은 것들을 자동적으로 실행시킬 수 있고 올바른 결과를 얻어낼 수 있죠 NDK의 모든 변경사항에서 우리는 클랭을 38로, 그리고 GCC를 4

9로 업그레이드 했어요 우리가 GCC를 업데이트 했지만 이번 GCC는 NDK에서 지원되는 마지막 버전일 거예요 만약 여러분이 아직도 GCC와 NDK를 사용하신다면 이제는 여러분의 앱을 클랭에서 테스트 하시는 게 좋을 거예요 이제는 바꿔야 할 때라고 생각합니다 우리는 또한 기본값을 만들었어요 arm7 아키텍처 기본값이죠 기존의 아키텍쳐는 잊으셔도 되요 그래서 여러분의 배너는 더 나은 최적화로 인해 이득을 볼 것이고 이것은 오늘날의 기기와 더욱 잘 연동이 되어야 하죠 VR, 이에 대해서 기조연설에서 간단하게 들으셨을 건데요 이번 주에 이에 대해서 조금 더 상세하게 알아볼 거예요 여러분이 알아야 하는 API의 거대한 서버 영역에 대해서 얘기할 거예요 먼저, 여러분은 장치에 있는 기능에 대해서 알아야 해요 장치는 기능보다 조금 더 구체적이에요 기조연설에서 들어서 아시겠지만요 그리고 여러분이 아셔야 할 API가 있습니다 나머지 세부사항에 관해서는 세션에 참가하셔서 알아보시길 바래요 정말로 많은 API가 있거든요 저번에 제가 봤을 때는 VR에 관해 대략 18개의 세션이 있었어요 그러니 한 번 보시길 바래요 제 생각에 이 중에서 가장 중요한 건 몇 가지 기술적인 세부사항에서 다룬 건데요 내일 아침 9시에 있는 것 같네요 하지만 스케줄을 확인해보세요 VR단계를 사용하면 아마 바로 아실 거예요 이건 마치 미안하지만, 뭐, VR? VR 보시다시피, 네 개를 인용했어요 두 개가 아니에요 네 개에요 네 개를 인용했어요? 네 개별적으로 말이죠 그렇군요 제가 덧붙일게요, 여러분이 VR에 관한 경험이나 게임, 가상 미술관이나 뭐든지 이러한 API가 여러분을 위한 게 아니라면 여러분의 앱에서 작동시키지 마세요 여러분의 앱을 더욱 빠르게 만들 수 있을 거라고 생각하신다면 이건 여러분을 위한 게 아니에요 VR을 사용하는 사람들을 위해서죠 맞아요 여러분을 위한 게 아니에요 절대 아니죠 [웃음] 서포트 라이브러리, 이건 N의 새로운점이 아니에요 하지만 간단하면서 빠르게 최근의 출시에 관해 몇 가지를 설명 드리려고 해요 232 출시에서 사람들이 고대하던 여러 가지 기능을 제공했는데요 나이트 모드 기능이에요 여러분의 앱이 밝고 어두은 테마 사이에서 빠르게 토글할 수 있는 기능이에요 머티리얼 디자인을 위한 하단메뉴 UI와 벡터/드로어블 그리고 애니메이티드벡터드로어블은 롤리팝에 있는 원래의 기능을 출시했을 때부터 사람들이 요청하던 기능이었어요 우리는 잘 몰랐죠 알고 보니 실행하기 꽤 까다로웠어요 리소스가 프로세스 되는 방식뿐만 아니라 드로어블과 이전의 버전과 호환되는 방식으로 작동되는 것 때문이었어요 처리하는데 좀 걸렸지만 결국 완성했어요 조금 이전의 출시에 있기 때문에 한 번 찾아서 확인 해보시고 사용해보시길 바래요 더욱 작은 규모인 APK로 이동해보세요 벡터가 같은 규모의 이미지보다 더 작은 경우가 많거든요 PNG나 JPEG같은 파일말이에요 리사이클뷰 오토매져, 또한 랩 컨텐츠 이러한 것들은 오랫동안 요청을 받아온 거예요 그래서 출시에 포함되었죠 231에서, 우리는 API를 리사이클뷰로 약간 조정했어요 더욱 좋은 성능을 허용할 뿐만 아니라 더욱 많은 기능이 있는 아이템을 가진 애니메이션을 위해서 말이죠 이러한 기능도 확인해보세요 벡터드로어블에 대해서 말해서 말인데요 콜트가 진행하는 강연이 있는데요 언제인지는 모르겠네요 이미지 압축과 여러분의 APK의 규모를 줄일 수 있는 방법에 대해서 다뤄요 벡터드로어블에 대해서도 얘기할 거예요 PNG와 JPEG 그리고 WebP를 사용하여 여러분의 앱을 더욱 작고 좋게 보일 수 있도록 만들 수 있는 기능도 얘기하고요 아, 그 기능이요 서포트 라이브러리에 관하여 제가 말씀 드리고 싶은 건 저는 이걸 미래라고 부르기도 하는데요 개발자들이 정말로 큰 관심을 가질 만한 흥미로운 점들이 있는데요 하지만 서포트 라이브러리에서의 새로운 점에 관한 세션이 있으므로 여기에서 말씀 드리는 것보다는 오늘 오후 4시에 진행되는 세션에 참석하셔서 앞으로 출시될 서포트 라이브러리에 관련하여 새로운 사실에 관해 알아보시길 바래요 이에 대해서 간단히 말씀 드릴게요 제가 좋아하는 주제니까요 실행에 관련된 세부사항이에요 외부에 있는 사람들은 알 리가 없는 부분이에요 하지만 N 프리뷰의 출시에서 벡터드로어블 성능은 크게 개선되었어요 로딩 측면뿐만 아니라 퍼스트드로우 측면에서의 성능과 개선에 중점을 두고 작업했으니까요 그래서 비트맵을 생성하고 여기에 만들었죠 이러한 경로를 만들어내는데 오랜 시간이 걸렸어요 여기에 시간을 투자했죠 파싱을 하는데도 시간을 투자했고요 정말로 복잡한 경로를 가지고 있으면 자바 수준에서 경로가 있는 파싱 작업에서 시간이 많이 소요돼요 여기에서 정말로 속도를 내며 작업했죠 벡터드로어블을 사용할 수 있도록 말이에요 플로트속성과 인트속성을 볼게요 제가 가장 좋아하는 속성이에요 왜냐하면 이걸 확인하게 되면 정말로 N에서 이 코드만 가지고 작업하신 거예요? 그럴수도 있죠 난 확신해요 아뇨, 아뇨 사실 저는 다른 코드도 많이 만들었어요 그리고 확인해보니 문제가 몇 가지 있더라고요 그래서 다시 확인했죠 [웃음] 플로트속성과 인트속성을 위하여 저는 많은 코드를 만들었을 뿐 아니라 이걸 대략 2년전에 이미 만들었어요 하지만 API뒤에 숨어 있었죠 이러한 기능이 공개된 API에서 노출될 때까지 사람들이 기본적인 속성 오브젝트만 사용하면서 이 기능에 접근할 수 없다는 걸 발견했어요 이제 나오게 되었으니 사용해보세요 특히 애니메이션을 위해서 말이에요 속성을 설정할 때에 JNI로 들어가서 백업하는 전형적인 매커니즘을 사용하지 않고 조금 더 직접적인 메소드를 사용하도록 허용해요 약간의 성능의 개선도 추가되었고요 그 외에 뭐가 있을까요? 안드로이드 인스턴트 앱 오늘 아침 기조연설에서 이걸 다뤘어요 여러분은 우리가 샌드박스 영역에서 데모를 확인하는 걸 보셨을 거에요 내일 아침에 하는 강연도 확인해보세요 개발자를 위한 안드로이드 플레이의 새로운 점에 관해서요 더욱 세부적인 내용을 다룰 거예요 여기서 가장 중요한 점은 출시된 제품을 얻는 거에요 아직 구매하지 않으셨다면 개발자 프리뷰 3에서 구매할 수 있으실 거예요 세션이 언제 시작하는지는 잘 모르지만 실제로 인터넷에 언제 나오는지도 잘 몰라요 하지만 가면 있을 거예요 가서 확인해보세요 dandroidcom을 모르시면 유용한 URL이 있어요 여기에 있네요 프리뷰를 구매하세요 SDK를 설정하시고요 그리고 꼭 버그를 신고하세요 그리고 빨리 해보세요 이번 출시를 마무리하려고 하니까요 다른 것들이 또 있나요? 그러면 제가 잠시만 콘스트레인트 레이아웃에 관하여 몇 가지만 말씀 드리려고 해요 제가 많이 신경쓰는 부분이니까요 여러분이 참여할 수 있는 코드 실험실이 있어요 만약 여러분이 이미 사용하고 계시다면요 그 외에는 몇 가지 질문을 받아도 될 것 같아요 약간 어색할 것 같지만요 관객들에게 마이크가 있나요? 우리가 어떻게 질문을 받아야 할지 모르겠네요 그냥 크게 말하세요 그거 아세요? 질문을 가지고 있는 2,000명의 사람들을 위해서 우리는 매일 하루가 끝날 때쯤 집무시간을 가지고 있어요 안드로이드 N 오피스 아워라고 불리는 집무 시간이에요 플랫폼을 다루는 많은 사람들이 있을 거예요 N을 위해서 일하는 사람들이죠 사실은 다른 출시에서도 열심히 일해온 사람들이에요 그곳으로 여러분의 질문을 가져 가세요 그 외에는 팀을 위해서 일하는 시간이에요 멀티윈도나 다른 것들을 위해서 말이에요 스케줄을 확인해보세요 그러면 질문을 받겠습니다 질문은 받지 않는 게 좋을 것 같아요 좋아요 약간 어색하네요 이제 마무리 하겠습니다 그리고 감사합니다 감사합니다 [박수] [신나는 음악] [전자 음악]

Cara Menampilkan Layar Android ke Laptop (Mirroring) Menggunakan Airdroid dan Google Chrome

Assalamualaikum Wr Wb 헤일로 모두 다시 나와 함께, Ilham 이번에는 Android 화면을 PC로 미러링하는 방법을 보여 드리겠습니다

Airdroid와 Chrome 사용 먼저 Playstore에서 Airdroid 앱 다운로드 그런 다음 Google 크롬 확장 프로그램을 다운로드하십시오 AirMirror 검색 및 검색 크롬에 추가 휴대 전화의 로그인 에어 드로이드 계정 PC에서 웹 airdroidcom 열기 오른쪽 상단에서 web airdroid를 클릭하십시오 귀하의 계정에 로그인하십시오 다음 웹 에어로이드를여십시오

클릭 에어 미러 휴대 전화를 PC에 무선으로 연결 전화 연결이 느린 경우 당신은 USB 케이블에 연결할 수 있습니다 먼저 google 크롬 확장 프로그램 다운로드 Google 검색 키워드와 함께 에어 미러 그런 다음 airmirror (첫 번째 링크) 링크> (mac ) 크롬에 추가 앱 실행 너는 이렇게 보일거야 휴대 전화를 개발자 모드로 설정하기 USB 디버깅 활성화 전화 및 웹 계정에 로그인하십시오

지금, 당신은 당신의 전화가 PC 화면에 반영된 것을 보았습니다 그게 전부예요 보고 주셔서 감사합니다 해보자 와 살람 아큐르 wrwb

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[음악 재생]

The real reason Google made Android

– 안드로이드는 이제 약 10 년이되었습니다 그리고 그것은 모두 시작되었습니다

T-Mobile G1 출시로 2008 년 9 월 23 일 그러나 여기에 하나의 질문이 있습니다 구글이 왜 안드로이드 만들기를 귀찮게 했습니까? (기분 좋은, 낙관적 인 음악) 오늘 스마트 폰 전투에 대해 생각할 때 당신은 안드로이드 대 아이폰처럼 꽤 생각합니다 그리고 그것이 바로 그 방법이지만, iPhone으로 돌아 가기 전에, 아이폰이 나온 직후에도, 세상은 완전히 달라졌습니다 전화는 실제로 상대적으로 작았습니다

그들은 손바닥에 딱 맞습니다 그들 대부분은 터치 디스플레이가 없었습니다 스마트 폰을 가지고 있다면, 당신은 IT 분야, 당신은 월가에서 일했거나, 당신은 저처럼 거대한 괴상한 사람이었습니다! 어쨌든, 다음은 2007 년을 되돌아 보았습니다 블랙 베리는 좀 왕 이었어 장치가 간단했기 때문에 그들은 빠르다

그들은 초장 배터리 수명을 가졌다 Palm은 Palm OS에서 시계를 다 쓰고있었습니다 다음에 할 일을 파악하려고했습니다 노키아는 몇 가지 심비안 물건을하고 있었어 기본적으로 다른 모든 사람들 Windows 모바일 장치를 만들고있었습니다

Pocket PC에서 Windows Mobile으로 이동 마이크로 소프트가 전화기에 더 집중하기 시작했을 때, 그러나 이것은 Windows 전화가 존재하기 전에있었습니다 어쨌든, 요점은 마이크로 소프트가 복제하려고 시도했다는 것입니다 Windows PC 비즈니스 모델이지만 전화, 그래서 삼성, 모토로라, HP와 파트너쉽을 맺었다 HTC와 다른 소규모 제조업체들 그리고이 스마트 폰 중 상당수는 자란 PDA와 같은 느낌이었습니다

안테나가 부착되어 있습니다 그러나 그것은 변화하기 시작했다 아이폰이 굴러 갈 무렵 (uptempo, 재즈 음악) 바로 여기,이 원본은 모토 Q입니다 Windows Mobile을 실행했으며 2006 년에 나왔습니다

자, 나는 말하지 않는다 이 때가 가장 좋은 스마트 폰 이었어 그러나 그것은 달리기에 실제로 있었다 그것에 대해 정말 멋진 것들이 있습니다 여기에 백라이트 QWERTY 키보드가 있습니다

이 도핑 조그 다이얼이 있어요 사람들을 깨닫게 해주는 전화 중 하나였습니다 스마트 폰과 같은 그 무언가 실제로 더 많은 사람들이 이용할 수 있습니다 어쨌든, 이건 일종의 가제트 야 dorky 찾고 전화 바로 여기, 또는 더 구체적으로는 전화와 똑같습니다

그들은 Google을 생각하게 만들었습니다 그것은 안드로이드를 할 필요가있다 좋아, 그럼 왜 그걸 알아? 자, 먼저 시작하겠습니다 나는 상황의 증거를 모르겠다 이걸 좀 봐

이것은 곧입니다 그것은 안드로이드 폰의 첫 프로토 타입이었습니다 좀 친숙 해 보이는 군 그렇지? 모토 Q와 비슷해 보입니까? 아니면이 다른 전화와 비슷합니다 나중에 조금 나온 Treo Pro입니다

재미있는 사실, 나는 Palm이 정말로 나쁜 장소에있을 때 그것을 들었다 HTC에 가서 기본적으로 뭔가를 가져갔습니다 HTC는 이미 개발 중이었습니다 Windows Mobile Treo로 전환 시켰습니다 이게 가능할 수도있어

Windows Mobile Treo 장치 바로 여기 더 빨리, 어쩌면, 결국 어쩌면 변했다 어쨌든 이건 전화기 같은거야 삼성 블랙 잭 (Samsung Blackjack)과 모토 큐 (Moto Q) 마이크로 소프트가 아마 가까워지고있는 것을 보여줬다 실제로 모바일에서 무엇을하고 있었는지 알기 위해 그래서 Google은이 휴대 전화를 보았습니다 마이크로 소프트에게 총을 들이기로 결정했다

당시 애플이 아닌, Andy Rubin의 Android 회사를 인수했습니다 그리고 일해야 해 아마이 유명한 이야기를 읽었을거야 Andy Rubin이 어떻게 반응했는지 첫 번째 아이폰의 출시에 이르기까지 대서양의 한 기사에 따르면, 그는 기조 연설을보고있는 차에 있었고, 그는 아이폰을 보았을 때 "이런 젠장! "우리는 그 전화를 발송하지 않을 것"이라고 말했다

그는 강력하지 않다고 말하지 않았다 그 사람이 강하지 못해서 어쨌든, 우리가 그 전화를 안 보내겠다고했을 때, 그는 Sooner, 왜냐하면 아이폰과 비교해 보면, 이 Windows Mobile 전화처럼 보였습니다 이제 Diane Hackthron에 따르면, 당시 Google 엔지니어였습니다 그녀는 Sooner를 떨어 뜨리기로 한 결정이 아이폰 발표 이전에 좋았습니다

우리는 꽤 오랫동안 그것을 계속 사용했지만, 내부적으로 개발, 유일하게 준 안정적인 하드웨어 플랫폼 이었기 때문에 우리가 가진 것 어떤 이야기의 버전이 사실이든, 최종 결과는 이것이었습니다 꿈이라는 코드 인 HTC G1은, 그것은 상업적으로 사용 가능한 최초의 전화였습니다 Android를 실행 한 사람 그리고 그것은 1 년 후에 공개되었고 아이폰 이후에 약간의 변화가 있었다 이제는 조만간에 비해 훨씬 더 발전합니다

예를 들어 터치 스크린이 있습니다 Windows Mobile 전화와 비교 그것은 또한 꽤 고급 느낌 그것은 당신이 입력 할 수있는 풍경 키보드를 가지고, 이 시원한 조수가 플립 업을 찾고있어 스크롤볼이 있어요 SD 카드를 넣을 수도 있습니다

이것은 슈퍼 가제트 가젯이며, 그것을 사용하여, 그것을보고, 당신은 정말로 그들이 더 집중되어 있다고 말할 수 있습니다 비즈니스 사용자를 얻고 Windows Mobile을 사용하는 방법 그들이 아이폰을 훔치려 고 시도했던 것보다 그래서 나는 이것이 모든 상황적인 증거라고 인정합니다 아마도 실제 증거를 원할 것입니다 그리고 정말 좋은 증거가 무엇인지 압니까? 실제 증거

구글의 전 CEO는 말했다 안드로이드가 윈도우 모바일을 채택하고 있었다 지난 10 년간 수행 된 대규모 기술 재판 중 하나 Google 대 Oracle이었습니다 증언을 얻으므로 기술 시험은 훌륭합니다 증인석에서 임원을 사귈 수 있습니다

질문에 대답해야합니다 그리고 오라클은 정말로 이야기 할 필요가있었습니다 안드로이드 초기에 대해 증명할 수 있습니다 배심원 재판 절차의 사본이 여기에 있습니다 2012 년 4 월 24 일부터 Oracle v

Google 오라클의 변호사가 Eric Schmidt에게 질문하고 있습니다 Android의 기원에 대해 그리고 에릭 슈미트 (Eric Schmidt) "우리는 Microsoft의 제품에 대해 상당히 우려했습니다 "지금과 관련이있는 것은 어렵다 "당시 우리는 매우 우려했다 "MS의 모바일 전략이 성공적 일 것이라고 확신했다

"이것은 아이폰이 발표되기 전에였다 "아이폰 혁명이 일어나기 전에" 솔직히 말해서, 당신은 그것을 가지고 있습니다 Android가 작동하는 방식의 전체 구조 Windows Mobile을 깎을 수 있도록 설계되었습니다 삼성, LG, HTC, 기본적으로 대부분의 회사 그때 전화를 다시 만들고 있었어

윈도우 모바일 폰을 만들고 있었다 구글도 안드로이드 폰을 만들었다 그리고 나서 그것들을 기본적으로 독점적으로 만듭니다 그게 속임수 였어 그래서 전체 생태계를 가지고 있습니다

Android 휴대 전화 파트너 Google은이 모든 회사를 알고있었습니다 전화를 만들고 싶어, 그래서 운영 체제를 만들어야한다는 것을 알았습니다 그 전화는 달릴거야 Google은 휴대 전화를 원했습니다 마이크로 소프트가 데스크톱에서 가진 것, 규모

그들은 모든 전화에서 안드로이드를 원했습니다 더 많은 안드로이드 고객이 더 많은 검색을 원했기 때문에, 이는 Google에 더 많은 돈을 제공합니다 Google은 모든 돈을 벌기 때문에 검색, 이것이 바로 Android에 대한 비용입니다 Android를 무료로 제공합니다 실제로 구글은 돈을 더 벌었 다

더 많은 사람들이 사용하고 있었기 때문에 Microsoft 이로 인해 기업들은 윈도우에 대한 라이선스 비용을 지불하게되었다 결론은 만약 당신이 궁금해했다면 Android가 왜 그렇게 작동하는지, 왜 아직도 오늘날에도 이상한 단점이 있습니다 같은 메뉴와 뒤로 버튼 등 뭐든지간에, 아이폰을 보지 마라 실제로 다시 돌아봐야합니다 다시 모토 Q에서 이것이 그들이 경쟁하려했던 것이기 때문입니다

안녕 모두, 지켜봐 줘서 고마워 우리는 아마이 더 많은 역사 비디오 중 일부를 할 것입니다 그래서 내가 무슨 순간을 알려주지 관심이있는 Android의 역사에서 아니면 니가 뭘 향수하는지 알려줘 젠장,이 작은 전화기를 사랑해 너무 괴상하고 트랙볼도 있고, 헤드폰 잭도 없습니다

그래서 가져 가라, 모든 전화는 지금 만들었다, 나는, 어떻게 든 짐작한다!

Actions on Google, Kotlin momentum for Android, GCP Asset Inventory, & Gmail Delegation

DAN GALPIN : 안녕하세요 나는 The Developer Show의 Dan Galpin입니다

가장 멋진 개발자의 주간 업데이트입니다 Google의 뉴스 최근 디지털 제품에 대한 지원을 시작했습니다 구독 및 구독 및 Google 로그인 길잡이 이렇게하면 원활한 구매를 쉽게 할 수 있습니다

기기 전반에 걸쳐 더 나은 방향으로 Assistant에서 사용자의 경험을 개인화하십시오 자세한 내용과 스크린 샷을 보려면, 아래 설명에 링크 된 게시물을보십시오 최근 Google Cloud Platform 팀 전용 Kotlin 포털 출시 관련 리소스를보다 쉽게 ​​찾을 수 있도록 도와줍니다 Google 클라우드의 Kotlin에게 또한 Google은 JetBrain과 제휴했습니다 코 틀린 재단 (Kotlin Foundation)을 설립했습니다

재단은 Kotlin 계속해서 급속도로 발전하고, 자유로운 상태를 유지하고, 열려 있습니다 이것 및 다른 Kotlin 뉴스에 관하여 더 많은 것을 배우기 위하여는, 게시물에 머리를 Asset Inventory가 베타 버전으로 제공됩니다 이를 사용하면 인벤토리의 조직 ​​전체 스냅 샷을 얻을 수 있습니다 다양한 Google Cloud Platform 리소스 이용 단일 API 호출로 정책을 구성 할 수 있습니다

이것은 자동화 도구에서 사용할 수 있습니다 모니터링 또는 정책 집행을 위해, 준수 감사를 위해 보관할 수도 있습니다 예제 코드는 게시물에 있습니다 Google은 최근에 Gmail API를 확장했습니다 대의원을 관리하는 새로운 방법을 제시함으로써 G Suite의 사용자 설정 Gmail 위임을 사용하면 액세스 권한을 부여 할 수 있습니다

조직의 다른 사람에게 사람의 사서함으로, 관리 보조자에게 액세스 권한 부여와 같은 임원의 사서함에 시작 링크는 게시물에 있습니다 Go 프로젝트가 연구를 수행 중입니다 어떤 회사가 사용하고 있는지 더 잘 이해하기 위해 그리고 그들이 언어를 사용하는 방법 이 설문지는 Go 언어 및 생태계가 어떻게 회사의 요구 사항을보다 잘 충족시키기 위해 개선하십시오

10 월 30 일 이전에 게시물로 이동하십시오 7 분짜리 설문지를 작성합니다 마음에 드시고 구독하고 공유하시는 것을 잊지 마십시오 나는 The Developer Show의 Dan Galpin입니다 보고 주셔서 감사 드리며 다음 주에 다시 보겠습니다

안녕하세요 나는 The Developer Show의 Dan Galpin입니다 이번 주입니다 Dan : 너는 다른 셔츠가 필요할거야

Origami Google Android (Gerwin Sturm)

Antoni가 번역 한 http://wwwyoutube

com/user/anto1234567891234567 작은 브랜드 만 반으로 접어 펼치십시오 가장자리에서 앞 단계의 표시까지 접어 펼치고 작은 표시를하십시오 그것은 지시 된 부분에 작은 표시를함으로써 가르침을 따라 두 배로 펼쳐집니다 교차점에 표시를하여 대각선을 접고 펼칩니다 시트 회전 가장자리에서 참조 점까지 접고 펼칩니다

그것은 당신이 이전에했던 접이식 부분에서 구부러지고 펼쳐집니다 그것은 당신이 이전에했던 접이식 부분에서 구부러지고 펼쳐집니다 그것은 당신이 이전에했던 접이식 부분에서 구부러지고 펼쳐집니다 시트 회전 같은 방식으로 5 개의 수평 부분으로 나눕니다 중앙 직사각형을 구부리지 마십시오

시트 회전 10 개의 직사각형으로 분할 중앙 직사각형을 접지 마십시오 시트 회전 절반으로 표시된 부분을 나눕니다 반으로 표시된 세그먼트 나누기 상단 세그먼트를 접히지 마십시오 상단 부분에 접어서 만드십시오 시트 회전 그림과 같이 대각선을 접으십시오 대각선을보다 쉽게 ​​만들기 위해 빨간색 선을 참조로 사용하십시오

이전 단계의 접기 축소 중앙 팁을 가라 앉히십시오 폴드 열기 표시된 폴드에서 "엘리아스 스트레치"를 사용하여 다시 닫습니다 오른쪽에서 반복하십시오 시트 회전 열기와 벤드 팁 그것을 닫으십시오 팁을 접으십시오

도움말 다시 열기 접기 이전에 만들어진 폴드 위로 이중으로 구부립니다 접은 부분을 접어서 반으로 접는다 상단 레이어를 접은 상태로 접으십시오 비슷한 방법으로 다음 레이어를 접을 수도 있지만 "Squash Fold" 오른쪽에서 반복하십시오 당신이 볼 수있는 작은 배를 만드십시오

접을 때 접어서 고정하십시오 팔 부분을 아래로 접으십시오 팔을 반으로 접어 라 어깨를 접어 안테나를 뒤집으십시오 반대편에서 반복하십시오

안테나 구부리기 및 모양 짓기 접힌 부분이 안쪽으로 둥글게됩니다 다리를 조정해라 Android 완료!