Improving Android Studio Performance on Memory-Constrained Machines

프레드 (FRED CHUNG) : 안녕하세요, 안드로이드 개발자 인 Fred입니다 관계 팀

Android Studio 개선에 대해 말씀 드리겠습니다 메모리가 제한된 컴퓨터의 성능 Android Studio에는 많은 기능 개발자가 함께 제공됩니다 현대 IDE에서 기대 예를 들어, lint 검사는 오류 식별에 도움이됩니다 편집기에서 소스 코드를 타이핑 할 때

이러한 개발자 생산성 기능 증가 된 자원 요구 사항을 의미합니다 호스트 운영 체제에서 실질적으로 복잡한 다중 모듈 작업을하는 개발자 프로덕션 프로젝트에는 일반적으로 8 기가 바이트 이상의 RAM이 있습니다 그러나, 간단한 프로젝트로 작업한다면 예를 들어 4 기가 바이트의 RAM이있는 메모리가 부족한 컴퓨터에서 또는 더 적은 것, 우리는 몇 가지 것들을 겪을 것입니다 개발 경험을 조금 더 부드럽게 만들 수 있습니다

최소 사양에 대한 명확한 답은 없습니다 Android Studio를 실행해야하므로 많은 요인 분명한 첫 번째 단계는 불필요한 애플리케이션을 닫는 것입니다 운영 체제에서 20 개의 웹 브라우저 탭을 열어 둔 사용자에게는 유감입니다

바이러스 백신 소프트웨어가 실행중인 사용자의 경우 컴퓨터에서 IDE에서 생성 한 빌드 파일 실시간 바이러스 검사를 실행할 수 있습니다 이것은 시스템 자원을 위해 경쟁합니다 가능하면 바이러스 스캐너 구성으로 이동하십시오 프로젝트 빌드 출력 디렉토리를 제외하십시오 Android Studio에는 기본 최대 Java 힙이 있습니다

크기는 12 기가 바이트입니다 컴퓨터의 메모리가 부족하면 그에 따라야합니다 기본 힙 크기를 512 메가 바이트 정도로 줄입니다 다음을 사용하여 원하는 값을 설정할 수 있습니다

studiovmoption 설정의 xmx 키 파일을 다운로드하십시오 이 값을 줄이면 지형지 물에 대한 자원의 양 축소 Android Studio 내에서 예를 들어, 레이아웃 편집기의 성능이 영향을받을 수 있습니다 이제 핵심 구성 요소 중 하나 인 Gradle에 대해 알아 보겠습니다 Android Studio에서 Gradle 및 Android의 최신 버전으로 업데이트 최신 성능 보장을위한 Gradle 용 플러그인 최적화는 프로젝트에서 사용할 수 있습니다

예를 들어 30에서는 점진적 패키징을 개선했습니다 AAPT2 여기에있는 스 니펫은 Android Studio 30 베타 버전

특정 설치된 버전은 다른 값 집합이 필요합니다 다음은 여러 기술에 대해 이야기하겠습니다 타락한 지원과 관련있다 최소한의 실행 만 남겨 둡니다 이러한 기술 중 일부는 코드 품질을 희생시키면서 성능을 향상시킬 수 있으며, 그래서 당신은 정말로주의해서 사용해야합니다

Android Studio는 절전 모드를 제공합니다 켜져 있으면 번호가 비활성화됩니다 린트 검사를 수행하는 백그라운드 작업, 코드 완료 등 너 한테 시간이있을거야 비활성화 된 작업을 수동으로 실행하려고합니다

예를 들어 린트 체크를하십시오 명령 줄을 통해 수동으로 실행할 수 있습니다 여기에 표시된대로 일부 사용자는 Android 에뮬레이터를 사용하고있을 수 있습니다 평균적으로 2 기가 바이트의 RAM을 소비합니다

가능한 경우 실제 Android 기기를 사용합니다 이렇게하면 컴퓨터의 리소스 부하를 줄일 수 있습니다 또는 에뮬레이터를 사용해야하는 경우, 에뮬레이트 된 RAM을 고려해보십시오 컴퓨터에서 가상 메모리 사용을 줄입니다 이 구성은 고급 설정에서 찾을 수 있습니다

가상 장치 구성에서 Gradle 오프라인 모드는 대역폭이 제한적인 사용자를위한 기능입니다 빌드 종속성 다운로드를 금지합니다 부작용으로이 문제가 개선 될 수 있습니다 낮은 RAM 머신에서의 성능 백그라운드 처리량을 줄입니다

Android Studio는 최적화를 제공합니다 여러 모듈을 병렬로 컴파일 할 수 있습니다 RAM이 적은 컴퓨터에서이 기능 성능에 부정적인 영향을 미칠 수 있습니다 컴파일러 설정 대화 상자에서 비활성화 할 수 있습니다 이 비디오가 당신에게 어떤 아이디어를 줄 수 있기를 바랍니다

낮은 RAM 환경에서 Android Studio를 미세 조정하는 방법 개발 경험을보다 원활하게 만들어줍니다 자세한 내용은 Android 개발자 사이트를 확인하십시오 지켜봐 줘서 고마워 [음악 재생]

Installation of Android Studio V3.0.1 || Android Studio Tutorial

오늘 모두를 환영합니다 우리는 android studio를 설치하는 방법을 보게 될 것입니다

우리는 자바 개발 키트가 필요합니다 설명 다운로드 버튼을 클릭하고 사용권 계약에 동의하십시오 적합한 패키지를 선택하십시오 지금 32 비트 용 64 비트 버전을 설치하고 있습니다 링크가 설명에서 제공됩니다

다운로드 프로세스는 건너 뜁니다 다운로드가 완료되면 시간을 절약해서 다운로드하도록 강요합니다 우리는 공식 페이지로 이동합니다 안드로이드 스튜디오 그 링크는 설명에서 30 포인트 1로 주어 지는데 이는 최신 버전의 Android 스튜디오가 다운로드 버튼을 눌렀습니다 라이센스 동의서를 수락하고 다시 다운로드하십시오

다운로드 부분을 건너 뜁니다 그래서 우리는 시간을 절약하기 위해 앞으로 감기로 달릴 것입니다 두 파일이 거의 다 다운로드되었으므로 하나씩 설치하겠습니다 그래서 디렉토리로 가서 우리가 자바를 설치하기 시작할 파일을 찾는다 관리자로 파일을 만들고 항상 동일한 절차를 수행하십시오

그래서 여기에 설치 프로그램이 다음에 치고 모든 구성 요소를 설치하고 다시 설치합니다 다음에 히트 Installer가 파일을 처리 한 후 처리 할 때까지 기다린다 설치 경로의 경우 경로를 변경하면 기본 경로를 사용하십시오 나중에 안드로이드 스튜디오에서 사용되기 때문에 기억하십시오 경로를 바꾸지 않는다

괜찮아 자바가 완전하게 설치 되었으니 지금 창을 닫을거야 Android 스튜디오를 설치하려면 파일을 찾아 관리자로 실행하십시오 항상 다시 한번 동일한 설치 과정이 있으므로 모든 것을 빨리 감습니다 설치가 완료되었습니다

지금 Android Studio를 시작하십시오 나중에 상자를 열지 않으면 안드로이드 스튜디오와 소프트웨어 개방 시간은 시스템에 따라 다를 수 있으며 필요한 파일을 다운로드하기위한 인터넷 연결이 표준 설정을 선택하고 당신이 좋아하는 주제를 선택하세요 밝거나 어둡습니다 자, 여기 다운로드 부분이 있습니다 Android Studio는 인터넷이 한 번만 다운로드되도록 요구합니다

안드로이드 스튜디오를 열 때마다 연결이 필요하지 않습니다 버튼을 클릭하면 자동으로 모든 구성 요소가 자동으로 다운로드되므로 파일을 다운로드 한 후 파일이 다운로드 될 때까지 기다리십시오 귀하의 안드로이드 스튜디오는 언제든지 사용할 준비가되어 있습니다 필요한 인터넷 연결 파일이 다운로드되어 Android Studio를 사용할 준비가되었습니다 다음 비디오에서 우리는 Android Studio를 사용하여 기본 앱을 만드는 방법을 보여줍니다

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[음악 재생]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Android studio 3.0 tutorial 2018. Android simple text to speech tutorial. Android tts example.

지원되는 Android 스튜디오 23

3 Android API 25 텍스트 음성 변환 안드로이드 텍스트 음성 소스 코드 튜토리얼 android에서 Text To Speech로 현지 언어를 설정하십시오

#3 ANDROID STUDIO 3.0 tutorial (Hello world) Make your first app. NEW (2017)

안녕하세요 세계 자바 Hello World 예제 첫 번째 Android 애플리케이션 만들기 Hello World 무엇보다도 Android Studio 소프트웨어에 익숙한 간단한 코드를 배우고 익히는 방법 Hello World Android Studio hello 세계의 예 응용 프로그램 이름을 "Hello World"또는 다른 이름으로 지정하십시오 개인 웹 사이트가있는 경우 도메인 이름을 작성하십시오

다른 현명한 다른 것을 씁니다 안드로이드 응용 프로그램 패키지 이름은 다른 모든 응용 프로그램에서 독립 실행 형이어야합니다 특정 폴더에 애플리케이션 경로를 저장합니다 전세계에서 안드로이드 OS 사용자를 볼 수 있습니다 이것은 XML 파일을 사용하여 생성 된 사용자 인터페이스 페이지입니다

MainActivity는 모든 코드가 특정 XML 페이지에 배치되는 Java 파일입니다 몇 분 기다려야 귀하의 PC에 의존했다 Android 스튜디오 운영 팁 MainActivity는 자바 파일로 자바에서 코드를 작성합니다 XML 레이아웃의 즉석 또는 실시간 미리보기 이 중 하나는 여기에 텍스트를 쓰는 textView입니다 제 생각에는 모바일에서 응용 프로그램을 실행하여 실제보기 PC의 가상 안드로이드 에뮬레이터에서 실행중인 응용 프로그램이 빠른 선택이지만 PC에서 실행, 더 나은 CPU 구성 필요 AndroidManifest

xml 파일 Android Studio Kotlin의 Java 대신 모든 응용 프로그램 소스 코드 출시 예정 안드로이드 스튜디오에서 만든 안드로이드 APK 파일

Android studio 3.0 tutorial. Recognition of voice in android apps. Android speech to text example.

안드로이드 음성 텍스트 예제 소스 코드 목소리로 안드로이드 타이핑하기 Google 음성 인식 음성 텍스트 wwwNextGenEarn

com에서 비디오 설명에 완전한 소스 코드를 얻으십시오 안드로이드 스피치 텍스트 소스 코드에 비디오 설명

#1 Android studio 3.0 latest version installation. How to install JDK and other software. 2017 NEW

Android Studio 최신 버전 설치 Windows 및 기타 OS에 Android Studio 30을 설치하기위한 최소 요구 사항 Android 스튜디오를 설치하기위한 최소 디스크 공간 해상도 요구 사항 JRE 최신 버전을 먼저 설치하십시오

동영상을 일시 중지하여 자습서에서 쉽게 이해할 수있는 내용을 이해합니다 JDK 최신 버전을 설치하십시오 컴퓨터를 마우스 오른쪽 단추로 클릭 한 다음 속성 설치할 Android Studio 설치 파일을 두 번 클릭하십시오 조금만 기다려 모든 상자 선택 SDK 설치 위치 확인 Android 스튜디오 설치가 진행 중입니다 첫 번째 응용 프로그램 "Hello World"를 만듭니다 간단합니다 ATTRACTION의 구독을 중단하세요 SDK 관리자가 공간을 확보하고 모든 것을 설치할 필요가 없습니다

Android Studio 3.0 Canary 1

연설자 : 이것은 Android Tool Time, Google AO 에디션입니다 우리는 새로운 Android Studio 3

0의 미리보기를 발표했습니다 Canary 채널에서 다운로드 할 수 있습니다 우리는 30에 주요 버전을 부딪 치기로 결정했다 많은 새로운 기능과 몇 가지 이 릴리스에서 소개하는 변경 사항 Google은 사용자 의견을 듣고 있습니다

플랫폼에 언어 지원을 추가하는 방법 Kotlin처럼 재미 있고 간결하며 표현력이있는 것 그래서 우리는 Kotlin 지원을 묶기로 결정했습니다 Android Studio 30을 사용하여 개발자를 허용 즉시 앱에서 사용하기 시작합니다 새 프로젝트 마법사에서 Kotlin을 활성화하도록 선택할 수 있습니다

생성 된 활동은 기본적으로이를 사용합니다 또는 프로젝트에 새로운 활동을 추가 할 때, 하단의 언어 선택기를 사용할 수 있습니다 언어를 전환 할 수 있습니다 마지막으로 Kotlin 파일 리팩토링으로 Java 파일 변환 기존 수업을 개편 할 때 도움이 될 것입니다 Android Studio 3

0은 IntelliJ의 20171 지점을 기반으로합니다 IDEA 및 모든 향상된 기능을 포함합니다 이것과 이전 stable 릴리스에서, 메서드에 대한 매개 변수 힌트 포함 코드, 의미 적 강조, 스마트 충돌 해상도 및 구문 강조 표시 버전 관리 등 개발자가 Android O 기능을 앱에 제공하는 것을 돕기 위해, 우리는 전면 자원에 대한 지원을 추가하고 있습니다

및 IDE의 적응 아이콘 이제 XML 및 이진 글꼴을 만들고 미리 볼 수 있습니다 fonts 리소스 폴더에 있습니다 레이아웃 편집기를 사용하여 다운로드 가능한 글꼴을 선택할 수도 있습니다 Google 글꼴 사이트에서 텍스트보기 용으로 사용할 수 있습니다 앱에 적합한 실행기 아이콘을 만들려면, Asset Studio를 열고 전경을 선택하십시오

배경 이미지를 사용할 수 있습니다 물론 Android 용 O 시스템 이미지도 포함됩니다 에뮬레이터를 사용하면 현재 O에서 변경 사항을 테스트 할 수 있습니다 개발자 미리보기 빌드 Android Studio 3

0과 함께, 빌드 시스템에도 큰 변화가 있습니다 Desugar라는 바이트 코드 변환을 구현했습니다 기본 툴체인으로 코드 및 라이브러리에서 Java 8 언어 기능을 사용합니다 우리는 람다, 메소드 참조, 기본값 및 정적 인터페이스 방법 및 자원과 함께 시도 모든 API 수준에서 이전에 더 이상 사용되지 않는 잭을 사용했다면, 또는 retrolambda와 같은 다른 바이트 코드 재 작성기, 마이그레이션은 제거하는 것만 큼 간단합니다 빌드 파일에서

새로운 Gradle 플러그인을 통해 성능을 향상시키고 있습니다 빌드 프로세스 개선, 실행 시간의 의존성 분석, 다수의 모듈을 가진 프로젝트를위한보다 빠른 빌드, 및 증분 dexing 보다 세분화 된 종속성 구성을 지원하기 위해, 라이브러리 모듈에 대한 변형 인식, 우리는 Gradle DSL의 주요 변경 사항을 도입해야했습니다 그러므로 문서를 참조하십시오 마이그레이션 단계

CI 서버를 설치하고 유지 관리하는 부담을 줄이기 위해, 우리는 또한 Google의 Maven Repo를 장소로 시작합니다 Google의 빌드 아티팩트를 배포합니다 출시와 동시에 Android 지원 라이브러리, Maven Repo를 추가하여 사용을 시작할 수 있습니다 귀하의 Gradle 파일에 대한 URL 자, IDE 자체에서 더 많은 업데이트에 대해 이야기 해 봅시다

앱의 성능 문제를 디버깅하려면, 우리는 이제 통합 안드로이드 프로파일 러를 스튜디오에서 출하합니다 이것은 실제로 세 가지 프로파일 러 세트입니다 – CPU, 메모리, 및 네트워크를 포함하는 단일 타임 라인에 표시됩니다 사용자 입력, 회전, 활동 변화 세 가지 프로파일 중 하나를 클릭하면 상세보기를 열 수 있습니다 CPU의 경우 스레드 목록, 방법 추적을 기록하고 탐구하는 방법

메모리보기는 이제 더 자세한 고장을 보여줍니다 메모리가 할당 된 위치, 뿐만 아니라 객체 할당을 추적하고, 힙 덤프를 파헤 치십시오 네트워크 활동을 표시하는 것 외에 네트워크 탭 그래프에는 요청 및 응답 정보가 포함되며, HTTP 요청에 대한 헤더 및 페이로드 지원되는 클라이언트 중 하나를 사용하여 만들어졌습니다 현재로서는 HTTP URL 연결을 지원하며 최근 버전 Volley, OkHttp Android 프로필러를 사용해 보았을 때 사전 O 장치 및 에뮬레이터에서 실행시 고급 프로파일 링을 활성화해야한다 구성 창에서 전체 정보를 볼 수 있습니다

다른 IDE에 C 또는 C ++ 코드를 작성하는 경우, 또는 다른 도구를 사용하고있을 수도 있습니다 게임 엔진 툴킷 등 APK를 만들려면 Android Studio 기본 디버거를 다음과 같이 사용할 수 있습니다 당신의 앱 디버깅을 위해 APK를 엽니 다 디버그 심볼과 소스를 첨부하십시오

그리고 코드를 단계별로 실행할 수 있습니다 Studio 내에서 개발 된 앱과 마찬가지입니다 Android Studio 30이 첫 번째 출시입니다 인스턴트 앱 생성 지원 귀하의 안드로이드 프로젝트에서

두 가지 새로운 모듈 유형이 있습니다 인스턴트 응용 프로그램 및 기능 새로운 리팩토링 시스템과 함께, 그들은 당신의 애플 리케이션을 모듈화하는 데 도움이됩니다 App Links Assistant는 필요한 앱 링크를 설정하는 데 도움을줍니다 지원, 앱 배포에는 자동 장치가 포함됩니다

인스턴트 앱 실행을위한 프로비저닝 즉시 테스트 할 때 문제가 발생하면 앱 빌드, APK 분석기 업데이트 인스턴트 앱 zip 번들을여십시오 그러나 그것이 전부는 아닙니다 텍스트 뷰어는 이제 ProGuard 매핑 파일로드를 지원합니다 제거 된 노드를 표시하고, ProGuard 유지 규칙을 생성 할 수 있습니다

또한 향상된 사용자 인터페이스, 필터링 및 검색을 비롯하여 메소드 사용법, 압축 포맷으로 디 컴파일 된 바이트 코드 검사, multidex를 지원합니다 레이아웃 편집기와 레이아웃 속성 레이아웃을 쉽게 반복 할 수 있도록 업데이트가 모두 제공됩니다 에디터에는 더 나은 오른쪽에서 왼쪽으로의 지원, 새로운 제약 조건 체인 및 장벽과 같은 레이아웃 기능, 새로운 오류 패널이 표시됩니다 레이아웃상의 문제 – 예를 들어 제약 조건이 누락 된 경우 장치 또는 에뮬레이터에서 파일을 가져와야하는 경우, 장치 파일 탐색기를 사용해보십시오 사용자 친화적 인 방법으로 원격 파일 시스템 찾아보기 예를 들어, ADB를 사용하는 것보다

마지막으로 흥미로운 업데이트가 있습니다 안드로이드 에뮬레이터에서 처음으로 에뮬레이터 시스템 이미지를 출하했습니다 전체 Play 스토어가 포함 된 다른 앱과의 통합 테스트를 원활하게 수행 할 수 있습니다 APK를 사이드로드하지 않아도됩니다

에뮬레이터 주변에 배치 된 수단 더 이상 오래된 Google Play를 다루지 않아도됩니다 서비스 라이브러리가 자동으로 업데이트됩니다 실제 Android 기기에서와 같이 Play 에뮬레이터 이미지는 릴리스 키로 서명되며, 그래서 당신은 승진 된 특권을 얻을 수 없을 것입니다 루트 액세스가 필요한 경우 표준 AOSP를 사용할 수 있습니다 에뮬레이터가 빌드됩니다

에뮬레이터의 다른 중요한 변경 사항 OpenGL ES 30 호환성, 에뮬레이터 도움말, Wi-Fi 네트워크 아래의 새로운 버그보고 도구 에뮬레이션 및 프록시 설정 페이지가 있습니다 도자기 개발자를 위해 로터리 입력 컨트롤을 추가했습니다 아휴 보시다시피, 새로운 것들이 많이 있습니다

Android Studio의 이번 출시에서 함께 할 수 있습니다 여러분의 의견을 얻기 위해 미리보기를 진행하고 있으며, 프로젝트에서 발견 된 버그를 수정하십시오 새로운 Android 문제 추적기를 사용할 수 있습니다 우리 랑 만날 수있어 업데이트를 위해 Twitter의 Android Studio를 반드시 따라야합니다

[음악 재생]