Origami Google Android (Gerwin Sturm)

Antoni가 번역 한 http://wwwyoutube

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

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

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

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

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

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

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

Teste – Hackeando qualquer Android – IP Externo [No-IP]

No-IP 다운로드 및 압축 해제 설치하기 전에 계정 만들기 호스트 이름 설정 설치하기 터미널을 통해 사용자 이름과 암호를 입력하십시오 엔터를 줘라

y를 입력하십시오 원하는 경우 이름을 지정하십시오 라우터 및 / 또는 모뎀을 입력하여 포트 열기 먼저 인터넷을 Kali로 가져가는 라우터의 문을 열어 보겠습니다 (VM을 사용하는 경우 브리지 모드로 두십시오) "게이트웨이"에는 내 모뎀의 IP가 표시됩니다 이제 라우터를 인터넷으로 연결하는 모뎀 모뎀을 열어 보겠습니다

모뎀은 라우터의 IP에 배치됩니다 이제 No-IP를 시작하십시오 이제 모든 것이 올바르게 설정되었는지 테스트하십시오 그런 다음 대상에 설치할 apk를 만듭니다 * 설명 링크 : Sign Apk을 다운로드하여 실행하여 만든 apk에 서명하고 Android의 새 버전에서 실행할 수 있습니다

apk 구독 신청 대상에 apk 설치 Metasploit 시작하기 네트워크 인터페이스의 IP 주소를 입력하십시오 명령 목록을 확인하는 데 도움을주십시오

How to make Android apps using Processing (Tutorial)

Processing을 사용하여 Android 앱을 만들고 싶습니까? 그것을 해보자! TEKGADG, TEK

GADG, TEKGADG! 그래서 당신은 궁금해 할 것입니다, 가공은 무엇이며 왜 우리는 그것을 안드로이드 애플 리케이션을 만드는데 사용합니까? 처리는 오픈 소스 프로그래밍 언어이며, 매우 간단하고 쉽게 선택할 수 있습니다 쪽으로 많은 아티스트가 프로그래밍 스케치 북처럼 그것을 사용하고 멋진 라이브러리가 많습니다 스케치를 많은 플랫폼에 출력 할 수 있습니다

모든 데스크탑 OS, 웹, 그리고 물론, 안드로이드 Android에서 코드 작성하는 방법을 알고 있다고해도 Processing은 유용한 프로토 타입 작성 도구가 될 수 있습니다 여러 플랫폼 시작하려면 Android SDK 도구를 다운로드 한 다음 처리해야합니다 휴대 전화에서 개발자 옵션과 USB 디버깅을 켜야합니다

그렇게하려면 '설정'-> '휴대 전화 정보'로 이동 한 다음 '빌드 번호'를 여러 번 누릅니다 개발자 옵션을 볼 수 있습니다 다시 설정에서 개발자 옵션으로 이동하십시오 USB 디버깅을 켜십시오 이제 Android 용 처리 문제가 있습니다

하지만 간단합니다 그것을 위해 고쳐라 기본적으로 처리중인 JDK 파일을 JDK 파일로 대체해야합니다 귀하의 컴퓨터에 jdk1

70_45를 사용하고 있습니다 이전 버전의을 다운로드해야 할 수도 있습니다 문제가 생기면 JDK OS X에서 문제를 해결하는 방법을 알려 드리겠습니다

단계는 Windows에서와 비슷해야합니다 잘 Mac에서는 처리 응용 프로그램을 찾은 다음 마우스 오른쪽 버튼으로 '패키지 내용 표시'를 클릭하고 그곳에는 Contents -> PlugIns -> JDK 폴더 -> Contents가 있습니다 PC에서는 이러한 폴더가 처리 아래에있는 프로그램 파일에 있어야합니다 그런 다음 컴퓨터에서 JDK 파일을 찾으려면 라이브러리 -> Java -> JavaVirutalMachines -> JDK 폴더 -> 목차

그리고 방금 연 두 폴더 사이에서 파일이 비슷하다는 것을 알 수 있습니다 너 컴퓨터의 내용을 처리 응용 프로그램 폴더로 복사하기 만하면됩니다 과 그게 해결책이야 Android SDK의 경우 방금 다운로드 한 파일의 압축을 풀어야합니다 들어가다 도구가 나타납니다

그 폴더에 들어가면 '안드로이드'가 있습니다 시작해 그것은 터미널에서 무언가를 열 것입니다 SDK 관리자를 여는 데 1 초가 걸립니다 열었 으면 필요한 도구와 Android 2

33 API 10을 다운로드하십시오 Processing은 Android 233을 사용합니다

즉, 233 및 위에서 가공 스케치를 실행할 수 있습니다 이제 모든 것을 설정 했으므로 화면에 서클을 그리기 만하면됩니다 시작하겠습니다

프로세싱 프로그래밍의 구조는 이해하기 쉽습니다 그것은 무효로 시작한다 setup () {}, 그리고 무효 draw () {} '설정'은 처음에 한 번 실행되므로 여기에서 당신은 사물을 초기화합니다 '그리기'는 모든 프레임에서이 경우 초당 30 회 실행되므로 그 곳에서 모든 프레임을 그릴 필요가있는 것들을 호출합니다

이 원을 그리려면 설정에서 크기 (600, 400)를 입력하십시오 그림으로 그려라 타원 (랜덤 (0, 폭), 랜덤 (0, 높이), 100, 100); 그런 다음 왼쪽 상단 모서리에서 실행을 클릭하십시오 내가보고있는 것을보고 있다면, 그것이 작동하고 있다는 것을 의미합니다 '크기'는 창의 크기, 타원 함수에는 기본적으로 네 가지가 있습니다

x 위치, y 위치, 타원의 너비 및 타원의 높이 그래서 지금 x- 위치를 0에서 0으로 랜덤 화하는 것입니다 화면의 너비, 0에서 화면 높이까지 y 위치를 무작위로 추출한 다음 원의 폭과 높이는 100입니다 그리고 이제 우리는 이것을 Android에 넣을 것입니다 그렇게하기 위해, 우리는 한 가지를 바꾸기를 원할 것입니다

휴대 전화에서 앱을 전체 화면으로 실행하려면 '크기'의 숫자를 displayWidth로 변경하고, 및 displayHeight 이 부분을 시작하려면 USB 디버깅이 활성화 된 상태에서 휴대 전화를 연결해야합니다 그런 다음 오른쪽 상단 모서리로 이동하여 Android를 선택한 다음 실행을 클릭합니다 그럼 너는 잠시 기다려야하지만 결국 스케치가 휴대 전화에서 실행됩니다 그리고 첫 번째 Android 앱이 출시되었습니다

그래서 거기에서 프로세싱 참조로 가서 어떤 유형의 스트로크와 드로잉 할 수있는 셰이프 및 드로잉하려는 모든 드로잉에 사용할 수있는 다른 메서드 데모 목적으로 Pong-2D와 3D의 두 가지 버전을 만들었습니다 나는 링크를 넣을거야 설명 영역의 코드에 추가하면 코드가 주석 처리되어 더 나은 결과를 얻을 수 있습니다 당신이 그것을 통해가는 동안 무슨 일이 일어나고 있는지 생각해보십시오 2D 버전의 Pong은 매우 직관적입니다

당신은 다른 것들에 반응하는 공을 가지고 있습니다 손가락으로 플레이어를 제어 할 수 있습니다 적에게 정말 간단한 AI가 있습니다 그리고 나서 Processing 용 Android Ketai 라이브러리를 사용하는 Pong의 3D 버전을 작성했습니다 카메라 제어를위한 가속도계 데이터를 얻습니다

그래서 저는 그것이 재미 있고 모두를위한 교육 이었기를 바랍니다 네가 생각하는 걸 내가 알게 해줘 코멘트 나를 좋아하고 구독 해주세요! 지켜봐 줘서 고마워

Getting Started with Test Lab for Android – Firecasts

Firecast에 관심을 가져 주셔서 감사합니다 저는 더그 스티븐슨입니다 Firebase Test Lab 이용해서 앱을 테스트하는 방법에 관해 간단히 훑어 보도록 하겠습니다 어플리케이션의 품질은 앱이나 비즈니스의 장기적인 성패에 영향을 주지요 심각한 문제가 있는 앱을 내놓으면 고치다가 돈과 시간을 허비하는 경우도 많습니다

문제가 많으면 사용자들이 삭제해 버리니 더 큰 문제죠 이런 문제를 해결하려면 안드로이드를 위한 Firebase Test Lab을 사용해서 수많은 기기에서 동시에 테스트하여 높은 품질을 유지하는 것이 좋습니다 Test Lab은 유용한 게 많습니다 그럼 Test Lab을 지금 시작해 보겠습니다 Firebase 콘솔에서 프로젝트를 만들어두었으니 그걸 사용하겠습니다 여기를 볼까요? 왼 편에서 Test Lab을 선택하면 Blaze 플랜으로 업그레이드하라고 메시지가 뜹니다 업그레이드 버튼을 누르면 선택항목이 나오는데 Blaze 플랜에 Test Lab이 있습니다 Blaze를 선택하면 실시간 데이터베이스, 파일 저장소 웹 호스팅에 대한 요금이 청구됩니다 문제네요 고작 첫 버전을 만들면서 SPARC 플랜으로도 충분한데 스토리지나 용량으로 돈을 내기는 싫거든요 그럼 방법이 있습니다 프로젝트에서 Test Lab을 사용하지 마시고 앱 개발에만 쓰는 거지요 Test Lab에 대해서만 지불하려면 테스트용으로만 쓸 완전히 새로운 프로젝트를 생성하세요 그 프로젝트를 Blaze 플랜으로 업그레이드하고 테스트에 대해서만 지불하면 됩니다 사실 Test Lab으로 테스트만 할 거라면 앱에 Firebase가 없어도 상관 없습니다 APK만 올리면 Test Lab에서 테스트를 수행하지요 청구서는 그 앱이 속한 프로젝트의 지불정보로 청구됩니다 그럼 새 프로젝트를 만들어서 업그레이드해요 우선, Firebase 콘솔 메인 스크린으로 가겠습니다 그리고 새 프로젝트를 생성합니다 뭘 하려는지를 잘 표현하는 이름을 붙이고 기본 국가는 그대로 놔둡니다 이제 이 프로젝트를 업그레이드합니다 Blaze 플랜을 선택하고 billing 설정으로 갑니다 촬영은 여기서 잠깐 중단 신용카드 정보가 나가면 안 되니까요 나머지는 여러분이 알아서 하시면 돼고요 다 끝나면 프로젝트가 Blaze 플랜에 있고 테스트가 가능하게 됐습니다 앱을 테스트하는데 돈이 어떻게 드는지 궁금하죠 신용카드 청구서를 보면 physical device hour 당 5달러가 청구됩니다 즉 다섯 개의 기기를 사용하고 각기 12분 정도 걸리는 작업을 하도록 했다면 총 1시간이 되며, 5달러입니다 기기를 6개로 하고 10분씩 돌렸다면 총 1시간으로 5달러입니다 계산도 쉽고 이해하기도 쉽습니다 그럼 간단한 테스트를 해 봐요 업그레이드된 프로젝트에서 Test Lab을 클릭하면 하고자 하는 테스트들을 선택할 수 있습니다 가장 쉬운 테스트는 Robo 테스트입니다 이것은 자동화된 인지 테스트로 코딩이 필요 없습니다 앱을 작동시키고 나서 보고서가 나옵니다 APK를 업로드하고 테스트할 설정만 선택하면 됩니다 Nexus7과 Nexus5를 선택해 보겠습니다 API 레벨21과 21이고 가로보기와 세로보기입니다 기본 로케일은 US English로 놓습니다 스크롤해서 내려가면 총 6개의 테스트라고 알려줍니다 이 버튼을 클릭하면 테스트할 앱이 Test Lab 내에서 내가 선택한 기기로 배포됩니다 그리고 잠시 후에 결과가 콘솔에 표시됩니다 여러분이 자신의 계기오차 테스트를 한다면 콘솔에서 여기로 가서 할 수 있습니다 앞서 말했듯이 수많은 APK를 테스트할 수 있어요 Firebase가 포함되지 않아도 테스트가 가능하고 여러 다른 앱을 같은 프로젝트에서 테스트할 수 있어요 또 하나 있네요 테스팅으로 지불하기가 싫을 경우 구글 플레이 디벨로퍼 콘솔에서 알파 혹은 베타 채널로 APK를 업로드하면 Firebase Test Lab을 사용할 수 있어요 구글 플래이에서 Pre-Launch Report 사용하기를 선택하세요 그럼 그 순간부터 두 채널로 올리는 APK에 대해 5분간 여러 기기에서 Robo 테스트를 받게 됩니다 무료입니다 테스트 결과는 잠시 후에 APK올렸던 채널에서 볼 수 있게 됩니다 여기까지입니다 Firebase 유튜브 채널을 구독하시면 Android Firebase Test Lab과 기타 Firebase 기능의 정보를 받으실 수 있습니다 질문이 있으시면 트위터 #askfirebase에 올리시거나 댓글로 남겨 주세요 저는 더그 스티븐슨입니다 시청해 주셔서 감사합니다 Firebase 테스트를 잘 활용해 보세요

How to Camera2 (Android Development Patterns S2 Ep 8)

고양이 팬케이크

팬케이크를 먹는 고양이 만약 어플에 좋은 카메라가 지원되지 않는다면 어떻게 이런 컨텐츠들을 포착할까요? 제 이름은 데이비드 이스트고, Camera2 API는 가장 뛰어난 카메라 어플을 만드는데 필요합니다 잠시 물러서서 안드로이드 카메라API 옵션의 역사를 살펴보겠습니다 사진이나 영상을 찍는 가장 단순한 옵션은 항상 카메라 인텐트였습니다 기본적으로, 귀하가 인텐트를 시작하면 사용자들은 사진을 찍기 위해 자신이 원하는 카메라 어플을 사용하죠

이 것은 이용하기 쉽지만, 사실 실력이 있는 카메라 어플에게는 그렇지 않습니다 카메라 인텐트는 주로 카메라가 주요 기능이 아니라 부가적인 어플에 사용됩니다 카메라 인텐트로는 북실북실한 고양이가 팬케이크 먹는 모습을 못찍죠 그래서 더 나은 API가 필요했습니다 카메라 API는 카메라 인텐트보다 더 많은 것을 조정할 수 있었습니다

카메라 API가 있다면, 원하는데로 카메라 뷰를 설정할 수 있었습니다, 정말 좋았죠 하지만 사진이 발전하면서 부족한 부분들이 발견됐죠, 예를 들어 압축되지 않은 이미지를 포착할 때, 혹은 프리뷰 속도가 초당 1에서 3 프레임인 새로운 하드웨어에서의 실행 등등에 있어서 문제가 있었습니다 고양이를 찍으려면 더 나은 API가 필요하죠 그래서 Camera2를 소개합니다 Camera2 API는 가장 최근에 나온 카메라API로, 가장 크고 가장 뛰어납니다

Camera2 API는 해당 디바이스 카메라의 모든 권한을 귀하에게 부여합니다 그리고 전 API의 모든 문제들도 해결됐죠 더 빠른 간격으로 사진을 찍을 수 있고, 다수의 카메라에서 프리뷰를 볼 수 있으며, 필터효과도 바로 적용할 수 있습니다 하지만, 새롭게 만든 카메라 어플에 적용하기 전에 알아야 할 것들이 있습니다 Camera2 API는 좋은 기능들을 가지고 있지만, 어플 사용자의 디바이스가 지원하지 못 할 수 있습니다

그렇기 때문에, 귀하는 어떤 디바이스가 지원 가능한지 아셔야 합니다 이 정보는 디바이스의 카메라 스펙을 살펴보면 알 수 있습니다 이 스펙은 렌즈의 방향같은 간단한 특징일 수도 있고, 얼굴 인식 모드의 여부처럼 복잡한 것일 수도 있습니다 만약 귀하의 어플이 특정 스펙 없이는 지원이 안된다면, 사용자가 어플을 다운받으려면 해당 스펙이 필요함을 명시하면 됩니다 매니페스트 파일에 사용자의 기능을 설정해놓으면 되죠

한 가지 더 중요한 것은, Camera 2API는 안드로이드 L에서 내놨기 때문에, 모든 어플을 지원하기 위해서는 다시 카메라API를 사용해야 합니다 그리고 Camera2 API는 안드로이드 서포트 라이브러리에서 지원이 아직 안되지만, 이 남성분에게 재촉하면 더 빨리 가능케 할 수 있어요 Camera2 API는 디바이스의 카메라에 대한 귀하의 책임을 증가시킵니다 그리고 더 큰 책임에는 큰 힘이 따라오죠 아마 그럴꺼에요

Camera2 API에 대해서 더 아시려면 API 레퍼런스를 살펴보세요 그리고 실제로 시행된 모델을 확인하고 싶으시면, GitHub에 원시 이미지를 포착하는 샘플 어플이 있습니다 귀하의 어플이 카메라를 사용한다면, Camera2를 사용해 가장 뛰어난 카메라를 제공하세요 계속 좋은 어플을 개발해주세요

Media Playback with MediaSessionCompat (Android Development Patterns Ep 4)

여러분의 음악을 정지시키는 것과 같은 기능은 먼 얘기가 아닙니다 안드로이드는 이를 위한 여러 방법을 제공해왔죠 몇 가지 얘기하자면 화면 제어 잠금과 알림을 위한 미디어 제어 그리고 안드로이드 웨어, 그리고 심지어 안드로이드 오토도 있습니다 이렇게 좋은 기능을 여러분의 오디오 앱에서 어떻게 사용해야 할까요? MediaSessionCompat를 사용하면 간단합니다 여러분을 위하여 안드로이드와 통합된 많은 작업을 할 수 있는 안드로이드 지원 라이브러리를 통하여 하나의 API를 이용할 수 있습니다 저는 이안 레이크입니다 이제 MediaSessionCompat를 살펴보고 여러분의 미디어 메타데이터를 가지고 어디에서든지 제어할 수 있는 방법을 알아볼 것입니다 여러분의 미디어 재생의 대표로서 미디어 세션을 생각해 보시길 바랍니다 오디오, 비디오 심지어 구글 캐스트에서 먼 거리로 재생하더라도 시스템에 여러분이 하는 걸 알려주지 않으면 도움을 줄 수 없습니다 하지만 여러분을 도울 수 있는 많은 방법을 제공합니다 앨범아트와 아티스트 이름과 같은 메타데이터를 게시한다면 여러분이 지원하는 재생과 일시중지와 같은 미디어 제어를 알려줍니다 하지만 이에 대해 다루기에 앞서 시작을 제어하기 위해 MediaSessionCompat 객체를 생성해봅시다 또한, 롤리팝 이전에 안드로이드 버전에서 미디어 버튼 수신기를 생성하는 하나의 예비 단계가 필요합니다 블루투스 헤드셋과 안드로이드 웨어에서 미디어 제어를 제공하며 안드로이드 50 이전의 장치에서 여러분의 앱으로 전달할 수 있습니다 단순한 브로드캐스트 수신기입니다 이렇게 매니페스트에 등록하고 여러분의 앱을 위한 액션으로 수신 키 이벤트를 변형시킵니다 일반적으로, 실제로 일시 정지를 이동시키고 재생 명령을 여러분의 미디어 재생을 제어할 수 있는 서비스로 보내는 것입니다 예시로 우리의 훈련 문서를 보겠습니다 자, MediaSessionCompat가 있습니다 컨텍스트가 필요한데요 디버깅 태그로 제공되는 문자열과 여러분의 미디어 버튼 수신기의 구성요소 이름입니다 마지막 널은 대기중인 인텐트입니다 안드로이드 4

3에 있는 구성요소의 이름 대신에 사용할 수 있습니다 이렇게 생성되는데, 널을 통과하게 되면 일반적으로 올바르게 작동되는 것입니다 더 진행하기에 앞서서 세 가지를 해야 할 겁니다 적절한 플래그를 설정해야 합니다 미디어 버튼 제어가 있는데요 이러한 미디어 버튼 이벤트를 우리의 앱으로 보냅니다 그 다음, 콜백을 설정합니다 롤리팝과 더 높은 장치가 콜백을 사용하여 버튼을 눌렀을 때 재생, 일시 정지 그리고 다른 작동을 할 것입니다 마지막으로 무언가를 재생할 때 활성화할 세션을 설정합니다 여러분의 앱에서 미디어 버튼 경로와 다른 제어가 있는 시스템의 신호입니다 자, 플럼빙이 설정되었고 작동될 준비가 되었습니다 하지만 우리의 미디어 세션이 미디어를 재생시킬 수 있는지는 아직 모릅니다 어떤 것이 재생되고 어떤 제어를 지원하는지 알 수 있을까요? 첫 번째 부분은 MediaMetadataCompat에서 처리됩니다 이는 빌더 패턴을 사용하며 여러분은 가지고 있는 모든 정보를 추가할 수 있습니다 그 다음에 여러분의 미디어 세션에서 setMetadata를 호출합니다 하지만 여전히 미디어 제어가 없습니다 우리가 아직 다른 부분을 처리하기 않았기 때문입니다 재생 상태를 게시하지 않았기 때문이죠 PlaybackStateCompat은 두 개의 목적을 가지고 있습니다 setState 메소드를 통하여 설정된 재생과 일시 중지 또는 버퍼링과 같은 현재의 상태와 setActions 메소드를 통해 설정된 중지 또는 일시 정지, 재생 정지와 같은 현재의 액션이 있습니다 이러한 두 가지를 포함합니다 일반적으로 액션은 상태와 동시에 변경되기 때문입니다 중지 상태는 일시 정지 액션을 가지고 있지 않을 것입니다 예를 들면 말입니다 MediaSessionCompat이 작동되기에 충분합니다 통합된 미디어와 모든 API 8과 더 높은 장치, 그리고 아이스크림 샌드위치, 젤리 빈, 그리고 킷캣 장치를 위한 잠금 화면 제어의 블루투스 버튼을 보실 수 있을 겁니다 MediaSessionCompat이 NotificationCompat과 API14 그리고 더 높은 장치에서 특히 인라인 미디어 제어를 포함한 모든 API 레벨에서 여러분에게 훌륭한 미디어 알림을 제공하는 AppCompat 지원 라이브러리에 속한 MediaStyle과 잘 작동되고 있는 것도 보실 수 있을 겁니다 여러분의 미디어 세션에서 특별히 독특한 미디어 세션 토큰이 있는 SetMediaSession를 호출하는 것만 기억하시면 됩니다 이를 통하여 안드로이드 웨어에 미디어 세션을 연결시킵니다 그리고 안드로이드 50과 더 높은 장치를 위한 웨어의 미디어 제어를 제공합니다 미디어 세션을 완료했을 때 배포를 하는 것을 잊지 마시길 바랍니다 정말로, 잊지 마시길 바랍니다 아직 MediaSessionCompat에 대해서만 다뤄 봤습니다 미디어 브라우저 또는 미디어 컨트롤러나 미디어 세션의 상단에 만들 수 있는 전체 호스트를 아직 다루지는 않았습니다 하지만 이로 인해서 여러분이 시작할 수 있을 겁니다 여러분의 미디어 재생 정보와 재생 제어를 어디에서나 재생할 수 있습니다 MediaSessionCompat를 사용하여 여러분의 멋진 미디어를 볼 수 있기를 기대하고 있으며 여러분이 더 나은 앱을 가질 수 있도록 도움이 되었기를 바랍니다 그리고 배포하시길 바랍니다

Test-Driven Development on Android with the Android Testing Support Library (Google I/O ’17)

[음악 재생] JONATHAN GERRISH : 안녕하세요 오늘 아침 테스트 중심 개발에 오신 것을 환영합니다

Android 플랫폼 용 내 이름은 Jonathan Gerrish이며 모바일 닌자의 일부입니다 Google은 Google 내에서 소규모 팀입니다 소프트웨어 테스팅에 열정적입니다 청중에게 손을 빨리 보여줄 수 있습니까? 실제로 얼마나 많은 사람들이 테스트를 작성하고 있습니까? 일반적인 소프트웨어 개발 연습의 일환으로? 환상적입니다

승인 따라서 이전에 Android 용 테스트를 작성했다면, 아마도 우리 도구 중 일부를 사용했을 것입니다 우리는 Android 테스팅 지원 라이브러리를 개발했습니다 테스트 러너 용 JUnit 및 규칙, 에스프레소 UI 테스트 프레임 워크, 우리는 또한 적극적으로 기여합니다 Roboelectric, 오픈 소스 안드로이드 유닛 테스트 프레임 워크

그래서 모두가 테스트를 작성하라고 말하고 있습니다 그러나 당신은 왜 그것을 정말로해야합니까? 테스트를 작성하는 데 시간이 걸리는 것은 사실입니다 그들은 코드 기반에 코드를 추가하고 있습니다 그리고 아마도 당신은이 상황에 처했을 것입니다 전에 귀하의 관리자 또는 고객이 귀하에게 그들이 당신을 늦추고 있다고

그러나 테스트를 작성해야하는 많은 이유가 있습니다 테스트를 통해 장애에 대한 신속한 피드백을 얻을 수 있습니다 따라서 개발 초기에 발견 된 오류 사이클은 생존 한 것보다 해결하기가 훨씬 쉽습니다 둘째, 테스트는 안전망을 제공합니다 훌륭한 일련의 테스트를 통해 리팩토링하고, 정리하고, 최적화 할 수 있습니다

당신의 코드, 당신이 가지 않을 것이라는 지식에서 안전함 기존 행동을 어기는 것 테스트는 실제로 지속 가능한 소프트웨어의 백본입니다 개발 안정된 속도를 유지할 수 있습니다 프로젝트의 평생 동안, 그리고 당신은 위기의 붐 – 파산 사이클을 피하려고합니다

특징 시간 및 기술적 빚의 집합 따라서 소프트웨어 테스트에는 개념이 존재합니다 테스트 피라미드의 그리고 이것은 많은 층들로 이루어져 있습니다 그리고 각 계층은 당신이 가지고있는 트레이드 오프를 가져옵니다 무게를 달아야 할 것입니다

가장 낮은 계층에는 작은 테스트 또는 단위 테스트가 있습니다 그리고 이것들은 매우 빠르고 집중적 일 필요가 있습니다 그렇기 때문에 이러한 종류의 테스트를 실행하는 것이 좋습니다 로컬 단위 테스트라고합니다 그리고 이것들은 로컬 데스크탑 컴퓨터에서 실행될 것입니다

이런 종류의 테스트를 통해 얻는 트레이드 오프 네가 뛰지 않아서 불륜이야 현실적인 환경에서 당신은 아마도 많은 가짜와 가짜로 우리가 피라미드 위로 올라감에 따라, 이제 우리는 통합 테스팅 및 엔드 – 투 – 엔드 테스팅의 영역으로 그리고 이런 종류의 테스트를하는 열쇠는 충실 함을 가져 오는 것입니다 그래서 우리는 당신이 실제 장치 또는 에뮬레이터에서의 이러한 종류의 테스트 이것들은 다음과 같은 종류의 테스트입니다 귀하의 소프트웨어가 실제로 작동한다고 당신에게 말할 것입니다

그러나 초점이 덜하므로 실패 이런 종류의 테스트 중 하나에서 조금 더 오래 걸릴 수 있습니다 단위 테스트에서 추적하는 것보다 추적하는 것이 좋습니다 그리고 당신이 만드는 큰 트레이드 오프 중 하나 테스트 실행 속도에 있습니다 여러 구성 요소를 조합하기 때문에, 그들은 모두 만들어 져야하고 포장되어야합니다 테스트가 실행되는 장치로 보내지며, 결과는 다시 수집됩니다

그건 여분의 시간이 걸릴거야 이 테스트 피라미드에는 단일 레이어가 없습니다 그걸로 충분할 수 있습니다 그래서 당신이해야 할 일 각기 다른 계층의 테스트를 혼합하는 것입니다 하나의 카테고리의 강점을 활용 다른 회사의 장단점을 없앤다

여기에 진짜 어렵고 빠른 규칙은 없습니다 그러나 Google 자체 테스트 전문가 엄지의 70-20-10 규칙을 추천하십시오 중소형 테스트와 중형 테스트의 비율로 나타냅니다 우리의 워크 플로우를 살펴 보겠습니다 따라서 테스트 중심 개발을 통해 아이디어 시험을 치르기 시작하면 그런 다음 테스트를 통과시키는 코드를 구현합니다 테스트가 녹색이면 제출할 수 있습니다

다시 한 번 손을 보여줍니다 거기 밖으로 누구가 그들의 코드를 시운전했는지, 과거에 테스트 주도 개발을 시도 했습니까? 승인 시원한 우리는 테스트 중심 개발을 좋아합니다 응용 프로그램의 디자인에 대해 생각하게합니다

API에 대한 적절한 고려 사항 제공 및 코드의 구조 테스트 중심 개발을 통해 또한 코드 작성이 적어지기 때문에 테스트를 만족시키는 데 필요한 코드를 작성하십시오 이렇게하면 일찍하고 자주 발표 할 수 있습니다 네가 끊임없이 초록색 인 것처럼 순간에 작동하는 애플리케이션을 배치 할 수 있어야한다 주의

테스트 피라미드를 따르고 있다면, 워크 플로우는 다음과 같이 보입니다 우선, 우리는 더 큰 외부 반복을 가진다 그것은 기능 개발과 관련이 있습니다 여기에서는 UI 테스트에 의해 주도되며, 만트라 테스트 중심 개발은 Red, Green, Refactor입니다 우리는 실패한 시험으로 시작합니다

테스트 통과를위한 코드를 구현합니다 그런 다음 리팩토링합니다 더 큰 반복 내부에는 시리즈가 있습니다 더 작은 반복의 단위 테스트와 관련있다 여기, 필요한 유닛을 구축하고 있습니다

기능을 통과 시키십시오 그리고 다시, 당신은 여기에 같은 진언을 사용합니다 빨강, 녹색, 리펙터 빨강, 녹색, 리펙터 예제 애플리케이션을 살펴 보겠습니다

오늘 구현할 기능 샘플 메모 작성 응용 프로그램에 메모 추가 흐름입니다 우리가 목업을 들여다 보면, 노트 목록 화면에서 시작한다는 것을 알 수 있습니다 기존 음표가 가득합니다 아래쪽에는 플로팅 액션 버튼이 있습니다 사용자가 이것을 클릭하면 새로운 메모 추가 화면에 표시됩니다

여기에서 메모의 제목과 설명을 입력 할 수 있습니다 저장을 클릭하십시오 메모는 지속 된 다음 그들은 그들의 노트 목록 화면으로 돌아갈 것이고, 새로 추가 한 쪽지를 볼 수있는 곳, 이전에 존재했던 다른 모든 음표와 함께 잠시 동안 우리의 워크 플로우로 돌아와서, 실패한 UI 테스트부터 시작한다는 것을 기억하십시오 그럼이 테스트가 에스프레소를 어떻게 사용하는지 살펴 보겠습니다

UI 테스트 프레임 워크 첫 번째 단계는 Add Add (메모 추가) 버튼을 클릭하는 것입니다 그런 다음 제목과 설명을 입력하고 저장을 클릭합니다 메모 목록 화면으로 돌아갑니다 여기서 우리는 단지 우리가 추가 실제로 나타납니다

이제 테스트 중심 개발을 통해, 우리는 아직 코드를 구현하지 않을 것입니다 우리가해야 할 일은 충분히 구현하는 것입니다 우리의 테스트의 명세를 만족시키기 위해 그래서 빈 활동과 우리가 필요로하는 자원들, 충분할 것이다 일단 테스트가 끝나면 테스트를 진행할 수 있습니다 우리는 실패 할 것입니다

이제이 기능을 구현해야합니다 따라서 응용 프로그램은 많은 작은 단위로 구성됩니다 이들은 작고 집중력이 뛰어난 특수 구성 요소입니다 그것은 한 가지 일을 잘 수행합니다 이 작은 단위의 컬렉션은 다음과 같습니다

공동 작업을 통해 우리의 특징을 만족시킨다 잠시 시간을내어 좋은 단위 테스트를 만들어라 정상적인 상태뿐만 아니라, 실패 조건을 테스트하고 싶습니다 유효하지 않습니다 입력 및 경계 조건

당신은 많은 단위 테스트를 작성하게 될 것입니다 단위 테스트는 항상 매번 동일한 결과를 제공해야합니다 변화 할 수있는 것에 의존하지 마십시오 예를 들어, 외부 서버 또는 현재 시간 – 이것은 당신의 단위 테스트에 박편을 가져올 것이기 때문입니다 단위 테스트는 코드의 특정 측면을 실행해야합니다

한 번에 단위 테스트의 실패를보고 싶습니다 매우 신속하게 코드의 자연 버그로 연결됩니다 단위 테스트를 작성할 때 실제 구현에 너무 많은 가정을하고있다 귀하의 코드입니다

당신은 당신의 단위 테스트가 행동을 테스트하기를 원합니다 그렇게하면 테스트를 다시 작성하지 않아도됩니다 구현이 변할 때 단위 테스트의 가장 중요한 측면 중 하나 그들은 당신이 빠르기 때문에 빨리해야합니다 TDD 워크 플로 동안 많은 것을 작성하고 그들도 빠르게 네가 낙심한다면 그것은 끔찍할 것이다 테스트 작성 또는 코드 리팩토링 그 검사의 실행 시간에 통증이 있습니다

그리고 마지막으로 단위 테스트는 훌륭한 출처입니다 문서화와 끊임없는 방식 코드가 바뀌면서 진화하고, 시간이 지남에 따라 정체 될 정적 문서와는 다릅니다 Add Add 활동에 대한 단원 테스트를 해보겠습니다 이 활동은 사용자 입력을 받아 들일 것입니다 그리고 나서 우리는 그것을 지속 할 것입니다

장치의 로컬 저장소에 저장합니다 승인 이제 우리는 Add Note 액티비티 클래스를 만들 것입니다 Android 프레임 워크 인 Activity가 확장됩니다 수업

그것은 레이아웃과 함께 팽창 될 전망을 가지고 있습니다 사용자가 여기에 데이터를 입력합니다 그리고 나서 우리는 그 메모를 안드로이드에 보관할 것입니다 SharedPreferences 메커니즘 우리의 어플리케이션이 진화함에 따라, 그래서 우리의 요구 사항을 않았다

아마도 스토리지 요구 사항 노트를 클라우드 저장소에 저장하도록 발전 우리는 일종의 동기화 메커니즘을 구축해야합니다 오프라인 사용 사례의 로컬 저장소 이 경우에는 추상화의 기회가 있습니다 우리는이 예에서 우리가 노트 저장소를 추출 할 수 있습니다 그러나 테스트 중심 개발의 핵심 측면 중 하나 우리는 가장 간단한 경우를 먼저 작성하는 것부터 시작합니다 그런 다음 반복합니다

그래서 우리는 이것을 일찍하는 유혹에 저항 할 것입니다 이상화 된 단위가 무엇인지에 대한 샘플을 살펴 보겠습니다 테스트는 비슷할 것입니다 일반적으로 3 단계로 구성됩니다 첫 번째 단계는 설정 중입니다

시험 조건, 그리고 환경 준비, 의존성을 필요한 상태로 설정하고, 입력 데이터를 준비합니다 다음으로, 테스트 할 코드를 마지막으로 실행하기 전에, 결과 또는 국가에 단언을합니다 나는이 세 가지를 명확하게 구분하고 싶다 시험 단계와 각 시험의 관련 측면 가져 오기 프론트와 센터는 정말 읽을 수있는 테스트를 만들어줍니다 지금까지 안드로이드 플랫폼으로, 당신은 다음을 사용하여 단위 테스트를 작성하고 있습니다

조롱과 조롱하는 조롱 라이브러리 (예 : Marketo) 그리고 예제를 보자 Marketo로 작성된 테스트 승인 와우 그것은 많은 코드입니다 승인

그래서 우리는 Android와 너무 많은 상호 작용이 있기 때문에 프레임 워크를 제공해야합니다 그저 모든 것을 위해 스터 빙하는 행동만으로 우리 테스트의 실행 경로를 만족시키기 위해서입니다 게다가 Android는 많은 정적 메소드를 사용하기 때문에, 우리는 두 번째 조롱을 소개해야합니다 라이브러리, PowerMock, 처리 할 우리를위한이 특별한 경우 그리고 여기에도 꽤 나쁜 코드 [INAUDIBLE]가 있습니다

한 번 보자 알다시피, 우리는 테스트 활동에 대해 스파이를해야합니다 행동을 수정하려면이 작업을 수행해야합니다 그리고 그걸 밖으로 stubbing 몇 가지 작전을 제공합니다 따라서 우리는 블랙 박스 테스팅의 영역을 벗어나고 있습니다

이리 마지막으로, 결국 우리는 구현 세부 사항에 대한 단언 그리고 이러한 변화가 일어나면 우리의 시험도 바뀔 필요가 있습니다 좋은 단위의 특성을 기억하십시오 테스트,이 특정 테스트에 점수를 매기는 시간을 갖자

그것이 매우 집중된 동안, 우리는 단지 Add Notes 플로우의 행복한 경로 테스트, 로컬 JVM에서 실행되기 때문에 확실히 빠릅니다 그러나 우리는 오히려 많은 것을 만들고있었습니다 이 테스트의 구현에 대한 가정 그리고 이것으로 우리 구현이 바뀌면, 우리가 다시 쓸 필요가있을거야 그 테스트는 실질적으로 그리고 마지막으로, 과도한 보일러 판 stubbing 정말 혼란 스럽네

핵심 측면에서 혼란 스러워요 시험 조건, 시험 조건 당신이 문서화하려고하는 것 그럼 다행히도 도움이되는 도구가 있습니다 이러한 문제 중 일부를 해결하십시오 Robotive 소개

Roboelectric은 안드로이드 유닛 테스트입니다 우리가 적극적으로 기여하고있는 오픈 소스 툴 그리고 어떻게하면 Roboelectric으로 훌륭한 테스트를 작성할 수 있습니다 나는 너를 크리스천 윌리엄스에게 넘기겠다 Roboelectric의 원작자 [박수 갈채] 크리스티안 윌리엄스 : 고마워요, 조나단

너무나 많은 사람들이 Android 테스트 및 TDD 네, 로보 젂은이 끔찍한 작은 오픈 소스입니다 내가 해킹을 시작한 프로젝트 안드로이드 테스팅 초기 내가 배치하는데 얼마나 오래 짜증나는지 알기 때문에 에뮬레이터에서 테스트를 실행합니다 그리고 그것은 부차적 인 프로젝트였습니다 작년까지 다른 사람들의 무리의 나는 친구 인 조나단 (Jonathan)과 구글의 합류 특권을 가졌으며, 그는 이미 Roboelectric을 개선하기 위해 일하고있었습니다 Google 자체 테스트 스위트 그 이후로 우리는 로보 젂을 정말로 강화 해 왔습니다 오픈 소스 프로젝트에 다시 기여할 수 있습니다

오늘날 로보 젂은 공식적으로 지원되는 부분이 아닙니다 안드로이드 테스트 플랫폼의 그것이 올바르게 사용될 때, 그것은 당신의 테스트 전략에서 정말로 유용한 부분이 될 수 있습니다 그리고 저는 여러분에게 어떻게 당신도 그렇게 할 수 있습니다 노트 단위 테스트로 돌아가 보겠습니다 우리가 Roboelectric으로 어떻게 접근 할 수 있는지보십시오

Roboelectric은 로컬 단위 테스트로 실행되므로, 그것은 여전히 ​​당신의 워크 스테이션에서 돌아가고있을 것입니다 에뮬레이터가 아닙니다 그러나 Roboelectric은 작은 Android 샌드 박스를 제공합니다 테스트 옆에서 실제 SDK 코드가 실행되는 곳을 선택합니다 당신은 귀하의 활동, 귀하의 레이아웃, 보기 및 자원

그리고 일반적으로 대부분의 Android 메소드를 호출 할 수 있습니다 그리고 그들은 당신이 기대하는 것처럼 일할 것입니다 Android 프레임 워크의 일부가 있습니다 네이티브 코드 또는 집단 하드웨어에 의존하거나 상호 작용하는 외부 시스템 서비스 Roboelectric은 일종의 테스트 수염을 제공합니다

우리는 그림자라고 부릅니다 그리고 그것들은 대안적인 한계를 제공합니다 단위 테스트에 적합한 코드의 우리가 방금 본 코드에는 20 줄의 코드가 있었지만, 모의 설정 코드에요? Robotive에서 어떻게 보일지 봅시다 그것은 훨씬 적습니다 우리는 모든 상용구를 없앴습니다

테스트의 크기는 약 절반이며 훨씬 간결합니다 우리는 구현 세부 사항에 대해 생각하지 않아도됩니다 우리가 테스트를 작성하는 동안, 그것은 아주 좋습니다 Roboelectric이 응용 프로그램을 설정합니다 당신의 매니 페스트에 따르면

우리가 활동을 시작하라고 요구한다면, 적절한 라이프 사이클을 거치며 실행됩니다 그것을 올바른 상태로 만들 수 있습니다 조회수를 늘리고 기기에서 기대하는 모든 것을 제공합니다 사용자가 기기를 사용하는 것처럼 상호 작용할 수 있습니다 그래서 일부 필드에 텍스트를 추가하고 클릭하십시오

저장소에 메모를 추가한다고 주장합니다 자, 우리가 실제로 우리가 처음에 쓴 UI 테스트까지 올라간다 우리는 새로운 메모가 보기 화면에 나타납니다 그것은 다른 단위 테스트의 일이 될 것입니다 이제 Roboelectric의 그림자에 대해 언급했습니다

그들은 실제로 확장 된 테스트를 제공합니다 Android 클래스에 대한 API 내부 상태를 쿼리하고 때때로 변경합니다 그들의 행동 이 예에서 우리는 응용 프로그램에 어떤 활동이 의도가 테스트 도중 시작되었습니다 우리는 저것을 주장하기 위해 사용할 수 있습니다

저장소에 메모, 우리는 View Notes 활동으로 이동합니다 유사한 테스트 API가 하드웨어 응답 시뮬레이트를 위해 존재합니다 또는 외부 서비스, 그런 것들 이 시점에서 우리는 실패한 단위 테스트를 가지고 있습니다 그리고 이제 우리는

우리는 생산 코드를 작성하면서 쉬운 부분을 준비했습니다 TDD의 정신으로 우리는 테스트 패스를 작성하는 데 필요한만큼 정확하게 작성할 수 있습니다 더 이상, 추측 코딩이 없습니다

그래서 우리는 레이아웃을 팽창시키고, 클릭 핸들러를 부착하고, 클릭이 발생하면 메모가 사라집니다 저장소에 추가하십시오 이제 우리는 테스트를 실행할 수 있습니다 우리가 코드를 개선 할 수 있다면, 우리는 돌아가서 리팩토링을 할 것이고 우리는 반복 할 것입니다 이것은 당신이 철저하게하는 곳입니다

그리고 Robotive는 이것을 위해 매우 편리합니다 그것은 당신에게 좋은, 빠른 시운전을 제공하기 때문입니다 당신은 편한 사이클을 시작할 수 있습니다 우리는 단지 행복의 길을 시험하지 않고 싶습니다 우리 코드의 모든 다른 경우를 테스트 할 것입니다

마주 칠 가능성이있다 예를 들어, 입력 검증 및 외부 조건 네트워크가 다운되는 것과 같은 일이 일어나는 것처럼 말입니다 로봇 전기는 또한 장치 조건을 시뮬레이션하는 데 도움을 줄 수 있습니다 당신이 마주 치게 될 것입니다 예를 들어 한정자를 지정할 수 있습니다

테스트는 함께 실행되어야합니다 여기서 우리는 특정 화면 크기와 방향을 말하고 있습니다 레이아웃을 약간 바꿀 수도 있습니다 Roboelectric에 특정 SDK에서 테스트를 실행하도록 요청할 수 있습니다 그래서 우리는 여기서 Jelly Bean을 말할 것입니다

그리고 실제로는 해당 버전의 SDK 코드를 사용합니다 그리고 당신은 또한 Roboelectric, 모든 SDK에서이 테스트를 실행하고 싶습니다 당신이 지원하거나, 그들 중 일부 범위 당신이 관심을 갖고있는 그리고 지금 O를 통해 Jelly Bean을 지원합니다 Google에서는 Roboelectric에 크게 의존합니다 우리는 더 나은 투자에 투자하고 있습니다

우리는 수십 개의 앱을 보유하고 있습니다 이것들은 수십만 가지가있다 내부에서 실행되는 단위 테스트 따라서 전투 테스트가 잘되었습니다 또한 최근 Android CTS를 실행하기 시작했습니다 Roboelectric에 대한 공식 안드로이드 테스트 모음입니다

그리고 우리는 지금 70 % 가량 나아지고 있습니다 매 릴리스마다 그래서 과거에 로보 틱을 사용했다면 그리고 그것이 짧다고 생각했습니다 또는 이전 버전에 머물렀다면, 나는 당신이 최신 정보를 얻을 것을 분명히 권한다 왜냐하면 그것은 먼 길을 왔기 때문입니다

우리는 마찰을 줄이기 위해 노력해 왔습니다 Roboelectric을 Android 툴 체인과 통합합니다 Gradle과 함께 Android Studio에서 매우 잘 작동합니다 Google의 자체 공개 소스 인 Bazel에 대한 지원도 제공됩니다 조만간 시스템을 구축하십시오

Roboelectric은 하나의 크기에 맞는 테스트 도구가 아닙니다 빠르지 만 Android와 100 % 동일하지는 않습니다 모든면에서, 당신은 현명하게 그것을 사용하고 싶습니다 전에 말했듯이, 링크 된 단위 테스트를 작성하지 마십시오 함께 여러 활동

그것은 단위 테스트가 아닙니다 에스프레소에게는 훨씬 좋습니다 여러 스레드를 처리하는 경우, 동기화 문제, 같은 것들 그것도 아마 단위 테스트를 작성하지 않았을 것입니다 전기에 좋다 특히 Roboelectric을 사용하지 마십시오

Android API 및 사물과의 통합을 테스트하는 방법 Google Play 서비스와 같은 당신은 당신에게 더 높은 수준의 테스트를 제공해야합니다 그것이 작동하고 있다는 자신감 이제 우리는 지나가는 단위 테스트를 얻었습니다 너를 내 동료 스테판에게 넘겨 줄거야 더 높은 수준의 테스트에 대해 이야기하기

[박수 갈채] 고마워, 크리스천 개발자 워크 플로 다이어그램으로 돌아가 보겠습니다 이 시점에서, 우리는 단위 테스트 톤을 가지길 바랍니다 그들은 우리의 모든 비즈니스 로직을 철저히 테스트합니다 하지만 기어를 바꿔 실제로 어떻게 할 수 있는지 알아 봅시다

일부 통합 테스트를 작성하여 이러한 단위가 통합되는 방식을 확인하고, 실제로 Android와 어떻게 통합되는지 실제 환경에서 어떻게 작동하는지 설명합니다 Android에서 이러한 테스트는 일반적으로 참조됩니다 계측 테스트 그리고 저는 여러분 대부분이 계측을 작성했음을 확신합니다 전에 테스트해라

그리고 비록 그들이 표면에 슈퍼 간단하게 보이지만, 두포의 밑에 실제로 많은 것이 계속하고있다, 당신이 그것에 대해 생각한다면 코드를 컴파일해야합니다 당신의 자원을 처리해야합니다 전체 시스템 이미지를 가져온 다음 테스트를 실행해야합니다 그리고 다양한 수준으로 진행되는 많은 것들이 있습니다

안드로이드 스택의 따라서이 테스트는 높은 충실도를 제공합니다 그러나 요한이 언급 할 때, 그들은 비용으로, 그들은 느린입니다 때때로, 그들은 단위 테스트보다 더 편찮습니다 그럼 실제로 어떻게 작동하는지 보겠습니다 일상적인 개발 과정에서 Android Studio라고 가정 해 보겠습니다

방금 새 에스프레소 테스트를 작성했습니다 실행 버튼을 눌러 테스트를 실행합니다 Android Studio에서 가장 먼저 할 일은 당신을 위해 두 개의 APK를 설치하려고합니다 테스트는 APK와 앱을 테스트합니다 이제 APK 테스트에는 Android JUnit Runner, 그것은 테스트 케이스와 테스트 매니페스트를 포함합니다

그런 다음 테스트를 실행하려면 안드로이드 스튜디오는 ADB Shell AM Instrument를 호출합니다 그런 다음 Android JUnit Runner는 계측 도구를 사용합니다 테스트 할 때 앱을 제어 할 수 있습니다 계측이란 무엇입니까? 나는 너희들이 이것을 알아 차렸을지도 모른다라고 생각한다 매니페스트의 최상위 태그이며 그 이유는 무엇입니까? 계측은 실제로 무엇인가입니다

그것은 안드로이드 프레임 워크 내부 깊숙이 사용됩니다 활동의 라이프 사이클을 제어하는 ​​데 사용됩니다 예를 들면 그래서 당신이 그것에 대해 생각한다면 그것은 완벽한 가로 채기 지점입니다 우리는 테스트 주자를 투입하는데 사용할 수 있습니다

그래서 Android JUnit Runner는 그다지 많지 않습니다 계측보다 조금 더 깊이 들어가 보자 Android Studio가 실제로 테스트를 실행하면 어떻게됩니까? ADB Shell AM Instrument를 실행합니다 활동 관리자에게 전화를 겁니다

그런 다음 활동 관리자는 한 번에 전화를 걸어 onCreate하여 계측하십시오 이제 Android JUnit Runner가 우리의 장비는,이 시점에서, 그것은 runner에서 onCreate를 호출합니다 그러면 주자가 당신을 위해 몇 가지 일을 할 것입니다 모든 검사를 수집 할 것입니다 그런 다음이 모든 테스트를 순차적으로 실행하게됩니다

그런 다음 결과를보고합니다 여기서 주목해야 할 것은 Android JUnit 러너 – 너는 이것을 눈치 채 셨을지도 모른다 응용 프로그램과 동일한 프로세스에서 실행됩니다 그리고 더 중요한 것은, 평소에 Android JUnit Runner를 사용하면 모든 테스트가 실행됩니다 하나의 단일 계기 호출에서

Android JUnit 러너는 Google 내부에서 많이 사용됩니다 매월 수십억 개의 테스트를 실시합니다 Android JUnit 러너를 사용합니다 그렇게하면서 우리는 직면 한 몇 가지 문제를 발견했습니다 우리가 해결해야만하는 것이 었습니다

우리가 많이 볼 수있는 한 가지는 공유 상태입니다 그리고 나는 그런 종류의 공유 ​​된 국가에 관해 말하는 것이 아닙니다 당신이 통제하고 당신이 당신의 앱에 코드를 넣었다 저는 메모리에 축적 된 공유 상태에 대해 말하고 있습니다 디스크에 빌드하고 테스트가 실패하게 만듭니다

이유가 없거나 예기치 않은 상황이 아닐 수도 있습니다 그리고 이것은 다른 것들 사이에서, 어느 시점에서, 충돌로 이어집니다 그러나 방금 전에 보여 드린 이전 모듈에서, 테스트 중 하나가 계측기에 충돌하는 경우, 그것으로 전체 애플 리케이션 프로세스를 취할 것입니다 모든 후속 테스트는 더 이상 실행되지 않습니다 그리고 이것은 분명히 큰 테스트 스위트에 대한 문제입니다 마찬가지로, 디버깅에 대해 생각한다면, 한 번의 호출로 수천 개의 테스트를 실행하면, 너의 자물쇠 머리에 대해 생각 해봐

디버깅을 위해 진행해야 할 때처럼 보일 것입니다 그래서 Google 내부에서 다른 접근 방식을 취했다 Google 내부에서 모든 테스트 방법 자체 계측 및 위치에서 실행됩니다 자, 오늘 할 수 있겠지? 여러 번의 ADB 호출을 할 수 있습니다 러너 호를 사용하고 사용자 정의 스크립트를 유지 관리 할 수 ​​있습니다

그러나 문제는 실제로는 그렇지 않을 수도 있다는 것입니다 개발 환경과 잘 통합하십시오 그래서 오늘 Android Test를 발표하게 된 것을 기쁘게 생각합니다 오케 스트레이터 그리고 Android Test Orchestrator Google에서와 마찬가지로 테스트를 실행할 수있는 방법입니다

백그라운드에서 실행되는 서비스 APK입니다 단일 계측 호출로 테스트를 실행합니다 그리고 이것은 명백하게 이익을 얻습니다 더 이상 공유 된 상태가 없습니다 실제로 Android Test Orchestrator 테스트를 실행하기 전에 PM을 실행합니다

따라서 충돌이 완전히 격리되었습니다 우리는 단일 계기 호출을하기 때문에 충돌이 발생하면 모든 후속 테스트 여전히 실행됩니다 마찬가지로 디버깅을 위해 모든 디버깅 정보 너가 장치를 모으고 떼어내는 이제 특정 테스트의 범위가 지정됩니다 이것은 훌륭하며 Google 내부에서 많은 이점을 얻습니다

그것이 실제로 어떻게 작동하는지 봅시다 테스트 APK 설치 및 테스트에 더하여, 이제 우리 장치에 세 번째 APK를 설치합니다 APK 백그라운드에서 실행중인 서비스입니다 오케 스트레이터 그런 다음 여러 개의 ATB 명령을 실행하는 대신, 우리는 하나의 ATB 명령을 실행합니다 그러나 우리는 테스트중인 앱을 설치하지 않습니다

우리는 오케 스트레이터를 직접 조작합니다 그리고 나서 오케스트라가 가고 있습니다 장치에서 모든 작업을 수행 할 수 있습니다 따라서 Android JUnit Runner를 사용하여 당신의 테스트,하지만 그때는 계속 될 것입니다 각 테스트는 자체 호출로 수행됩니다

그리고 그것은 놀랍습니다 그리고 저는 여러분이 이것을 많이 좋아할 것이라고 확신합니다 그리고 다음 Android 테스팅 지원에서 사용할 수 있습니다 라이브러리 릴리스 더 중요한 것은, 우리는 Android Studio를 사용합니다

Gradle에서 사용할 수 있으며 Firebase Test와의 통합 올해 말에 실험실에 올거야 이제 우리는 테스트를 수행하는 방법을 알고 있으므로, 실제로 이러한 통합을 작성하는 방법을 살펴 보겠습니다 테스트 그리고 대개 Android에서 [INAUDIBLE] 테스트를 작성하면 당신은 에스프레소 테스트 프레임 워크를 사용하고 있습니다 아시다시피 에스프레소에는 이처럼 단순하고 간단한 API가 있습니다

그리고 실제로는 꽤 간단합니다 그것이하는 일은 뷰 매처를 제공하는 것입니다 우리는 계층 구조에서 해당 일치 자와 일치합니다 그런 다음 뷰 작업을 수행합니다 또는 뷰 어설 션을 확인하십시오

이 API는 매우 간단하기 때문에, 빠른 TDD 프로토 타이핑을위한 완벽한 도구이기도합니다 UI 테스트 중 그러나 당신에게 그러한 간단한 API를 제공하기 위해, 후드 아래로 갈 필요가 많은 것들이 있습니다 그럼 실제로 에스프레소가 어떻게 작동하는지 살펴 보겠습니다 따라서 onView를 호출하고 우리에게 당신의 일치자를 주면, 우리가 할 첫 번째 일은 우리는 당신을 위해 뷰 인터랙션을 만들 것입니다

그리고 나서 다음 단계는 우리가 앱이 공회전 상태, 정상 상태 임 우리가 그것과 상호 작용할 준비가되기 전에 그리고 당신은 그것을 생각할 수 있습니다, 이것은 에스프레소의 핵심입니다 Espresso는 동기화 보증으로 잘 알려져 있습니다 그리고 우리가하는 일은 우리가 메시지를 반복하는 것입니다 메시지가 없을 때까지 큐에 넣다

합리적인 시간 동안 우리는 귀하의 모든 유휴 자원을 살펴 봅니다 그들이 유휴 상태인지 확인하십시오 또한 비동기 작업을 확인하여 실행중인 백그라운드 작업 없음 앱이 제정신이고 안정된 상태에 있고 우리는 상호 작용할 준비가되어 있습니다

우리는 계속 전진 할 것입니다 그런 다음 뷰 계층 구조를 탐색합니다 그리고 당신의 일치하는 사람과 일치하는보기를 찾으십시오 일단 우리가 견해를 갖게되면 우리는 뷰 동작 또는 뷰 어설 션을 수행 할 것입니다 그리고 이것은 위대합니다

이제 다시 테스트에 돌입니다 우리가 처음에 보여준 것 에스프레소가 어떻게 작동하는지 이제 알게되었습니다 그래서 첫 번째 줄에는 기억할 수 있듯이, 우리는 Add Add 버튼을 클릭하려고했습니다 그리고 여기에서는 ID 매치러와 함께 사용할 것입니다 보기에서보기와 일치하는 간단한 일치 프로그램입니다

그것의 ID에 따라 계층 구조 다음으로 우리가하고 싶은 일은보기를 클릭하는 것입니다 이를 위해 클릭보기 동작을 사용합니다 이제 흥미로운 부분은 다음 줄입니다 이 행에 제목과 설명을 입력해야하기 때문입니다

그리고 우리는 그것을 위해 타입 텍스트 액션을 사용하고 싶습니다 그러나 여기, 모든 에스프레소 동기화 보장 우리가 우리가 응용 프로그램과 상호 작용할 준비가되었습니다 우리는 타입 테스트 액션을 호출 할 것입니다 그리고 이것은 당신을 해방시켜주기 때문에 위대합니다 추가 상용구 추가에서 코드 및 추가 미끄러짐 코드를 테스트합니다

마찬가지로 메모를 저장합니다 그런 다음 화면에 표시되는지 확인합니다 그리고 이것은 위대합니다 이제 에스프레소가 어떻게 작동하는지 알고 있습니다 테스트 주도 개발을 수행하는 데있어 훌륭한 도구임을 알 수 있습니다

그리고 이제 저는 그것을 닉에게 넘겨 줄 것입니다 UI 테스트를 향상시키는 방법에 대해 조금 더 이야기하기 대규모 및 중급 테스트 전략을 개선하는 방법에 대해 설명합니다 [박수 갈채] 고마워, 스테판 UI 테스트의 좋은 특성 하나 절대 잠들지 않는 시험입니다

예를 들어 설명하기 위해 돌아가 보겠습니다 이 점은 조금 더 나아 갔다 우리의 예에서는 기억하고있는 것처럼 우리는 우리가 기억에 남긴 메모를 가지고, 꽤 빠르고 믿을만합니다 그러나 실제로 앱이 성장함에 따라, 이 기능을 확장하고 싶을 것입니다 메모를 클라우드 또는 Google 드라이브에 저장합니다

따라서 대규모 엔드 – 투 – 엔드 테스트를 실행할 때, 우리는 실제 환경을 사용하고 싶다 우리는 실제 서버를 공격했습니다 그리고 네트워크 연결에 따라, 이 작업에는 시간이 오래 걸릴 수 있으므로 아마도 하고 싶지는 배경에 있습니다 이제 문제는 에스프레소 동기화가 장기간 실행되는 작업에 대해 알고 있어야합니다 이것은 개발자가 아마 스레드에서 코드를 잠자 게하는 것만큼이나 못생긴 일을하십시오

그러나 에스프레소는 실제로는 필요하지 않습니다 Idle Resource를 작성할 수 있기 때문에 공회전 리소스는 간단한 인터페이스입니다 에스프레소를 가르치기 위해 구현하는 개발자로서 사용자 정의 된 장기 실행 태스크의 동기화 앱의 따라서이 유휴 리소스를 사용하여 우리는 대규모 엔드 – 투 – 엔드 테스트를 수행했습니다 더 듬직 해요 이제 중간 크기의 테스트를 몇 가지 추가 할 수있는 방법을 알아 보겠습니다 테스트 스위트에

중형 테스트의 경우 그 (것)들을 작게 유지하고 단 하나 UI 분대에 집중, 곳에 단일 UI 구성 요소는 특정 뷰, 프래그먼트, 또는 활동 이제 예제로 돌아가 봅시다 대규모 엔드 – 투 – 엔드를 더 많이 분리 할 수있는 방법 격리 된 구성 요소 여기이 예제에서 다시, 당신은 주목했을 것입니다 두 가지 활동이있다

왼쪽의 목록 활동 및 추가 오른쪽에 활동을 기록하십시오 지금까지 우리는 대규모 엔드 – 투 – 엔드 테스트를 작성했습니다 그게 우리에게 많은 확신을 주네 코드를 많이 사용하기 때문에 앱에서 큰 엔드 투 엔드 테스트에 적합합니다 그러나 iterative test-driven을 위해 그렇게 좋지는 않습니다

개발주기 그럼 어떻게 이들을 분리 할 수 ​​있는지 봅시다 격리 된 각 활동에 대한 테스트를 격리했습니다 왼편을 격리하기 위해, List 액티비티, Espresso Intent를 사용할 수 있습니다 Espresso Intent는 당신이 가로 챌 수있는 간단한 API 귀하의 진행중인 의도 중 어떤 것도 자신의 콘텐츠를 확인하고, 모의 활동 결과를 제공 할 수 있습니다

큰 API가 실제로 어떻게 보이는지 보도록하겠습니다 보시다시피, 매우 간단합니다 당신은 당신의 성장 의도와 일치하는 의도를 가진 일치자를 가지고 있습니다 활동 결과 버전을 제공 할 수 있습니다

다시 발신자에게 승인 이 API를 사용하여 첫 번째 고립 테스트를 작성해 보겠습니다 이 테스트에서는 첫 번째 행에서 우리는 정확하게 그것을합니다 우리는 우리의 콘텐츠를 가로 채고 우리는 우리 활동 결과의 스텁 버전

이제 두 번째 줄에서 우리가 수행 할 때 새 활동을 시작하는 대신에를 클릭하십시오 에스프레소는이 의도를 가로 챌 것입니다 스텁 액티비티 결과를 제공 할 수 있습니다 마지막 줄에서 UI가 업데이트되었는지 확인하십시오 따라서

이제 격리 된 테스트가 있습니다 승인 이제 예제로 돌아가서 두 번째 부분을 어떻게 분리 할 수 ​​있을까요? 따라서 일반적으로 테스트를 작성할 때 네가 할 수있는 위치에 일부 외부 의존성을 가지고있다 귀하가 통제 할 수없는 곳입니다 앞의 예에서 보았 듯이, 우리는 저장하고 실제 서버에 도달한다는 메모가 있습니다

비록 우리가 지금 다른 자원을 가지고 있지만 지금 그게 더 안정적이게, 당신의 테스트 서버가 어떤 이유로 든 충돌 할 수 있습니다 그래서 당신의 임무는 실패 할 것입니다 우리가 완전히 고립되면 더 좋지 않을까요? 이러한 조건에서 우리의 테스트를 밀폐 된 환경에서? 이것은 당신의 시험을 훨씬 빠르게 할뿐만 아니라, 그러나 그것은 또한 모든 박편을 제거 할 것입니다 그리고이 구체적인 예를 넘어서서, 너 자신을 더 고립시키고 싶어 모든 외부 종속성으로부터

예를 들어 Android 시스템을 테스트하고 싶지는 않습니다 UI 또는 기타 UI 구성 요소 아마 이미 테스트했기 때문에 소유하지 마십시오 그리고 그들은 당신의 알지 못함에도 변화 할 수 있습니다 그래서 당신의 테스트는 실제로 실패 할 것입니다 우리 두 번째 고립 된 방법을 보자

테스트 코드에서 찾을 것입니다 여기에서 핵심은 더 이상 사용하지 않는다는 것입니다 실제 서버 대신, 우리는 밀폐 저장소를 설정했습니다 이제는 여러 가지 방법으로이 작업을 수행 할 수 있습니다

이것은 단지 하나의 방법 일뿐입니다 그럼이 밀폐 저장소를 사용할 수 있습니다 메모가 실제로 있는지 확인하려면 앱 컨텍스트를 벗어나지 않고 저장 됨 또는 네트워크에 타격 그래서이 시점에서, 당신이 그것에 대해 생각한다면, 당신은 더 신뢰할 수있는 두 개의 더 작은 테스트를 가지고 있습니다 훨씬 더 빨리 달릴 수 있습니다

그러나 동시에, 당신은 같은 금액을 유지합니다 귀하의 대규모 엔드 – 투 – 엔드 테스트로 테스트 커버 리지의 그리고 이것이 우리가 더 작은 것들을 더 갖고 싶어하는 이유입니다 대규모 엔드 – 투 – 엔드 테스트에 비해 격리 된 테스트 전에 보여 줬어 승인

이제 개발자 사이클을 반복했습니다 몇 번이고 우리는 모든 검사를 봐야합니다 초록색으로 바뀌면 우리는 자신감을 가져야한다 우리의 특징 그러나 결론을 내리기 전에 미래로 한 순간 도약해라

앱이 성장하고 팀이 성장함에 따라, 앱에 계속해서 더 많은 기능을 추가하게됩니다 그리고 당신은 자신을 어떤 위치에 놓을 수 있습니다 UI가 여러 프로세스에서 실행될 수 있습니다 정확히 Google에서 일어난 일입니다 따라서 Add Notes 예제로 가면, 이것은 다음과 같이 보일 수 있습니다

주 프로세스에서 실행되는 첫 번째 활동이 있습니다 왼쪽에 이제 두 번째 활동이 개인 프로세스에서 실행됩니다 이 경우에는 메모 추가라고합니다 그럼 어떻게 테스트할까요? 음, Android O 이전에는 테스트가 불가능했습니다

하지만 Android O에는 새로운 계측 도구가 있습니다 속성을 정의하기 위해 사용할 수있는 속성 당신이 계측하고자하는 프로세스 테스트를 실행하고 실행하는 동안, 각각의 프로세스는 분리되어 좋은 아이디어입니다 그리고 너는 그것을해야만한다 하나의 테스트에서 경계를 교차 처리하려는 곳

그래서 당신은 아마 에스프레소를 쓰고 싶을 것입니다 시험은 이렇게 보입니다 이것이 프레임 워크 레벨에서 불가능한 것은 아니었지만 Android O 이전에는 에스프레소 수준에서도 불가능했습니다 이 특정 예에서, 에스프레소는 당신의 2 차 과정을 알고 있지도 않습니다 동기화 보증을 유지할 수도 없습니다

우리 모두는 알고 있고 사랑합니다 오늘은 멀티 프로세스 에스프레소 (Multiprocess Espresso) 지원을 발표하게되어 기쁩니다 테스트 코드 나 앱 코드를 변경하지 않고 이렇게하면 UI와 원활하게 상호 작용할 수 있습니다 모든 프로세스를 유지하면서 우리 모두를 유지합니다 에스프레소 동기화 보장

Android Test의 차기 버전에서 사용할 수 있습니다 라이브러리 릴리스 지원 그럼 실제로 어떻게 작동하는지 간략하게 살펴 보겠습니다 전통적으로, 아시다시피,이 예에서는, 우리는 하나의 프로세스에서 시작합니다 Android JUnit Runner 및 Espresso의 인스턴스가 있고, 이 경우에

이제, 우리의 예를 기억한다면, Add Add (메모 추가) 버튼을 클릭하면 새로운 활동이 생겨 이제는 새로운 과정이 생깁니다 이제 문제는 우리가 Android JUnit의 두 가지 인스턴스를 사용하는 두 개의 프로세스 러너와 에스프레소는 서로에 대해 알지 못합니다 그래서 우리가하고 싶은 첫 번째 일 우리는 두 사람 사이의 의사 소통을 만들고 싶습니까? Android JUnit Runners 그리고 이제 우리는이 대화를 나눕니다 우리는 그것을 사용하여 의사 소통을 할 수 있습니다

에스프레소 예 우리가하는 일은 Android JUnit Runner에서 테스트를 등록하는 기능 Android JUnit Runner가있는 Espresso와 같은 프레임 워크 그러면 주자가 모든 핸드 쉐이킹을 용이하게합니다 두 사람 사이의 의사 소통을 위해 필요한 에스프레소 예 이제 두 개의 에스프레소 인스턴스 서로 이야기 할 수 있으면 프로세스 간 테스트를 가능하게하기 위해 그것을 사용하라

모든 동기화 보장을 유지한다 우리가 전에 가지고 있었던 승인 이를 통해 개발자 워크 플로우가 끝났습니다 우리는 당신에게 모든 도구를 보여주었습니다

길의 각 단계에서 사용할 수있다 TDD가 Android에서 발생하도록하기 위해 그리고 그 말로는, 당신이이 흐름을 정확하게 따르지 않더라도, 잘하면, 모든 단일 도구를 사용하는 방법을 알고 있습니다 앱을 가져 오기 위해 우수한 테스트를 작성하는 방법 품질을 한 단계 높여줍니다 따라서 테스트를 작성하고 쓰기 및 실행하려는 경우 Google에서하는 것처럼 테스트합니다 여기에 몇 가지 리소스가 있습니다

너를 시작하게 고마워 우리 생각 엔 질문에 시간을 보내십시오 그렇지 않은 경우 오늘 3시 30 분에 근무 시간이 있습니다

다행히도, 우리는 거기서 만날 것입니다 고맙습니다 [박수 갈채] [음악 재생]

안드로이드 오토, 이제 볼보자동차에서도 마음껏 쓰세요

안드로이드 오토, 이제 볼보자동차에서도 마음껏 쓰세요 볼보 XC60 볼보자동차코리아가 18일, 볼보자동차의 최신 SPA 및 CMA플랫폼이 적용된 주요 차종에서 '안드로이드 오토(Android Auto)' 애플리케이션 서비스를 이용할 수 있게 됐다고 밝혔다

안드로이드 오토는 차에 안드로이드 기반의 스마트폰을 연결해 스마트폰에서 제공하는 특정 기능을 차량에서 구현해주는 시스템이다 내비게이션과 전화, 미디어 등 운전자들이 자주 사용하는 기능을 실내 디스플레이에 직접 연결해 간편하게 사용할 수 있다 운전자의 편의를 위한 음성 제어도 가능하다 구글 어시스턴트(Google Assistant) 음성인식 기능을 통해 운전에 대한 집중력을 잃지 않으면서 일정 확인과 문자 전송, 검색 등 스마트폰의 다양한 기능을 사용할 수 있다 안드로이드 오토는 호환되는 스마트폰에 안드로이드 오토 애플리케이션을 설치하고 실내 USB 포트에 연결한 뒤 약관을 승인하면 사용할 수 있다

 음성 제어는 스티어링휠 우측의 보이스 컨트롤 버튼을 약 1~2초간 길게 눌러 활성화하면 된다 볼보 크로스컨트리 해당 기능 화면은 실내의 세로형 9인치 센터 콘솔 디스플레이에서 구현된다 사용자는 안드로이드 오토 앱을 디스플레이에서 직접 터치하거나 스티어링 휠의 우측 키패드를 조작, 모바일 기기 조작을 통해 제어할 수 있다 안드로이드 오토 서비스가 지원되는 차량은 크로스 컨트리(V90)과 S90, XC90(2017년형 모델부터), XC40과 XC60(2018년형 모델부터)이다

해당 서비스는 신형 S60을 비롯한 차후 출시될 모든 신차에서도 사용 가능하다 차종 및 서비스 사용 안내는 볼보자동차의 안드로이드 오토 사용 안내 사이트에서 확인할수있다 이미지 : 볼보자동차

✅ 벤츠도 ‘안드로이드 오토’ 활성화..S·E클래스 등 주력 모델 적용

[데일리 카 하영선 기자] 메르세데스 벤츠 코리아는 스마트 폰으로 S 클래스 · E 클래스와 같은 모델을 선보였다 Android (Android Auto) 안드로이드 오토는 차량 및 스마트 폰을 사용하고, 음성 명령을 내리고, 전화, 미디어 스마트 폰의 기능을 통해 차량을 작동시킵니다

국내 부 카카오 내비게이션과 연동 표시기 안내는 물론, 음성 인식을 할 수있는 경로 설정 등의 서스가 가능하다 (Apple Car Play®) '와 함께 스마일 네트워크 구축'을 통해 사용자 편의를 도모 할 수있게되었습니다 중 메르세데스 벤츠 차량 고 멀티미디어 고해상도 디플레이이닝, 내비게이션 등등 헤드 업 디스플레이 (headup display) 사용중인 Android 스마트 폰) '앱을 설치 한 후 차량 센터 아이콘을 클릭하십시오 USB 포트에서 스마트 폰을 연결하십시오 E 클래스 전 종과 S 클래스 (8 년식), 207 년식 이후 GLS, GLE 쿠페 GLE, GLS, CLA 등등 클래스가 다른; 자동차 뉴스 데일리 카 http : // ww dailycarco

kr 본 기사에 기부금 전재 및 환불 [관련 기사] ▶ ▶ ▶ ▶ ▶ ▶

Tabs and ViewPager (Android Development Patterns Ep 9)

안드로이드 개발 패턴에 오신 것을 환영합니다 저희는 여러분이 더 나은 앱을 만들 수 있도록 하는데요 저는 이안 레이크입니다 시작해보겠습니다 앱에서 이동하는 방법을 생각해보시길 바랍니다 패런트뷰 (Parent View)에서 상세보기로 이동하거나 시블링뷰 (Sibling View) 사이를 이동할 수 있습니다 여기에서 탭과 뷰페이져(ViewPagers)가 필요합니다 뷰페이저가 무엇일까요? 이로 인하여 콘텐츠가 있는 다양한 페이지 사이를 스와이프하는 것을 제어할 수 있습니다 뷰페이저는 페이저어댑터에서 콘텐츠를 가져옵니다 이건 각각의 페이지나 전체 프래그먼트를 위한 일반적 보기가 될 수 있는데요 FragmentPagerAdapter나 FragmentStatePaferAdapter를사용하고 계신다면 FragmentStatePaferAdapter는 모든 프래그먼트를 유지시키고 메모리에서 생성되어, 이미 로드 된 탭 사이를 전환하는 걸 더 가볍고 빠르게 만듭니다 하지만, 메모리 측면에서 보면 무게가 있는 편입니다 많은 개수의 프래그먼트를 가지고 있다면 말입니다 FragmentStatePagerAdapter과 같은 것은 필요에 따라 프래그먼트를 제거하고 다시 생성하면서 해결하여 오로지 상태를 유지합니다 PageAdaptor에는 많은 것들이 있지는 않습니다 여러분이 가지고 있는 페이지의 수로 반환하기 위해서 getCount를 치환해야 합니다 FragmentPagerAdapter의 경우에 getItem을 실행해야 합니다 그러면 각각의 위치에 연결된 프래그먼트가 반환될 것입니다 여기에서는 각각의 위치를 위한 오른쪽 프래그먼트를 선택하여 간단한 switch statement을 해보겠습니다 하지만 여러분이 원하는 접근법을 사용하셔도 괜찮습니다 여기에서 치환해야 할 또 다른 것은 각각의 페이지에 적혀있는 문자열을 반환하는 getPageTitle입니다 페이지에 제목이 왜 필요할까요? 여러분의 뷰페이저에 연결된 몇 가지 탭을 가지기를 원하면 이러한 페이지 제목이 정말로 유용할 것입니다 탭은 모든 페이지를 끝까지 보지 않더라도 사용자들이 페이지에 있는 것들을 쉽게 볼 수 있도록 합니다 이를 통하여 사용자들은 탭을 선택하여 페이지 사이를 건너뛸 수도 있습니다 안드로이드 디자인 지원 라이브러리에 속한 탭레이아웃 클래스는 모든 머티리얼 디자인을 사용하여 탭을 실행하기 쉽도록 만들어 줍니다 그리고 이전 버전인 안드로이드 21까지 호환이 됩니다 전부 다같이 다뤄보겠습니다 먼저 뷰페이저를 setAdapter를 사용하여 페이저어댑터에 연결시켜야 합니다 그 다음에 탭레이아웃을 연결하는 것은 setupWithViewPager 하나의 방법입니다 이를 통해서, 페이저어댑터의 제목에서 탭을 만들 수 있습니다 그러면 페이지를 스와이프 하면서 탭을 변경하고 탭을 선택하면 페이지가 변경될 것입니다, 예상했듯이요 디자인 라이브러리를 추가하여 탭레이아웃과 뷰페이저를 시작해보시길 바랍니다 디자인 가이드라인과 상세한 훈련 문서를 확인하시는 것도 잊지 마시길 바랍니다 안드로이드 개발 패턴에 함께해주셔서 감사합니다 탭과 뷰페이저를 사용하여 더 나은 앱을 만드시길 바랍니다