2016년 7월 5일 화요일

안드로이드 테스트 자동화 관련 링크

[몽키러너]
몽키러너 튜토리얼
https://developer.android.com/studio/test/monkeyrunner/index.html?hl=ko

MonkeyRunner_Android Automation
http://blog.naver.com/elcarus/220481302599

[selenium]
selendroid
http://selendroid.io/

[appium]
selendroid 와 비슷한 테스트 자동화 툴
https://domich.wordpress.com/2016/01/11/appium-%EC%95%A0%ED%94%BC%EC%9B%80-%ED%94%84%EB%A1%9C%ED%8C%8C%EC%9D%BC%EB%A7%81-%EA%B8%B0%EB%B0%98-ui-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC/

[Robotium]

Robotium과 MonkeyRunner를 활용한 모바일 테스트 자동화

http://blog.omniavinco.kr/70

하이브리드 앱 테스트 자동화 프레임워크 "Robotium"
http://blog.naver.com/skytear7/30183652924

robotium 을 이용한 MMS Native app Test
http://flysh.tistory.com/84

Robotium API 기능 알아보기
http://yonoo88.tistory.com/809

2016년 7월 1일 금요일

[스크랩]사물인터넷 전국망, SKT `로라` vs KT `LTE-M` 격돌

KT가 상용화할 `LTE-M`과 SK텔레콤이 전국망에 쓸 `로라(LoRA)`는 모두 사물인터넷(IoT) 일종인 `소물인터넷(IoST)` 기술에 속한다. IoST는 모든 IoT 서비스가 빠른 통신 속도를 갖출 필요는 없다는 점에 착안해 개발된 기술이다.

속도를 늦추면 출력이 낮아진다. 배터리 수명이 늘어나고 칩과 단말 가격도 싸진다. 실생활에 적용할 서비스 범위와 영향을 고려하면 IoST가 IoT 생태계 확산을 책임진다고 해도 과언이 아니다.
KT가 상용화할 `LTE-M`과 SK텔레콤이 전국망에 쓸 `로라(LoRA)`는 모두 사물인터넷(IoT)의 일종인 소물인터넷(IoST) 기술에 속한다. IoST는 모든 IoT 서비스가 빠른 통신 속도를 갖출 필요는 없다는 점에 착안해 개발된 기술이다.<KT가 상용화할 `LTE-M`과 SK텔레콤이 전국망에 쓸 `로라(LoRA)`는 모두 사물인터넷(IoT)의 일종인 소물인터넷(IoST) 기술에 속한다. IoST는 모든 IoT 서비스가 빠른 통신 속도를 갖출 필요는 없다는 점에 착안해 개발된 기술이다.>
◇기존망vs전용망

LTE-M은 국제표준화단체 3GPP에서 표준화를 진행 중이다. LTE 속도기준인 카테고리1(Cat.1)과 카테고리0(Cat.0), 카테고리M(Cat.M)이 LTE-M 기술이다. Cat.1 속도는 다운로드 기준 10Mbps, Cat.0은 1Mbps다. 더 발전한 Cat.M은 220kbps까지 속도가 내려간다. Cat.1과 Cat.0은 표준화가 완료됐다. 곧 Cat.1 단말이 출시된다.

기존 LTE망과 주파수를 쓰기 때문에 별도 망을 설치할 필요가 없는 게 최대 장점이다. 검증된 IoT 기술을 써 기술적 완성도도 높다.

반면 일각에서는 IoT 전용망이 아니기 때문에 서비스 사용이 늘어나면 기존 이동통신 가입자에 영향을 미칠 것이란 우려도 나온다.
SK텔레콤이 밝힌 IoT 전국망 구축 이후 공공부문 서비스 적용 예시<SK텔레콤이 밝힌 IoT 전국망 구축 이후 공공부문 서비스 적용 예시>
로라얼라이언스를 중심으로 개발되는 로라는 IoST에 최적화된 기술이다. 주로 900㎒대역을 사용한다. 전국에 설치하려면 초기 망 구축비용이 필요하지만 기존 통신망과 비교하면 매우 저렴하다. 단말과 칩 가격도 싸다. 통신속도는 0.3kbps에서 5kbps, 전파 도달 거리는 최대 20㎞다. 어디서나 다양한 IoT 서비스를 제공할 수 있다.

통신업계는 LTE-M보다 로라가 IoST에 더 적합한 기술로 보고 있다. 국제표준화단체와 글로벌 기업이 0.2㎒ 폭 미만 좁은 대역에서 LTE-M을 제공하는 `협대역(NB) IoT` 기술을 개발 중인 것도 이 때문이다.
SK텔레콤이 밝힌 IoT 전국망 구축 이후문화, 관광 부문 서비스 적용 예시<SK텔레콤이 밝힌 IoT 전국망 구축 이후문화, 관광 부문 서비스 적용 예시>
◇IoT에서도 주도권 경쟁

SK텔레콤이 로라 전국망을 설치하고 KT가 LTE-M을 상용화하면 우리나라는 3G, LTE에 이어 IoT 시대 주도권 확보에도 한 발 다가설 수 있다. LTE-M 상용화, 로라 전국망 설치는 세계에서도 가장 빠른 행보다.

IoT 전용 과금 체계가 확립되고 기존엔 볼 수 없었던 신규 서비스가 늘어나면 국내 IoT 시장도 확산일로에 접어들 전망이다. 소형 기지국과 통신장비, 모듈, 단말, 서비스, 컨설팅 등 관련 정보통신기술(ICT) 업계도 새로운 성장기회를 발굴할 수 있다.
사물인터넷 전국망, SKT `로라` vs KT `LTE-M` 격돌
SK텔레콤과 KT는 중소 전문업체와 협력한다. 유망한 벤처와 스타트업을 발굴하고 서비스 주체로 나설 수 있도록 할 계획이다. SK텔레콤은 전용망 구축 외에도 IoT 통합관제센터 구축, 전용 모듈 개발, IoT 서비스 활성화 지원 펀드 조성 등 `IoT 토탈 케어 프로그램`을 추진한다고 밝혔다.

정부도 IoT 산업 활성화에 힘을 보탠다. 미래창조과학부는 IoT 용도로 사용하는 900㎒ 대역 출력 기준을 기존 10㎽에서 최대 200㎽로 높인다. 통신 출력 상향은 통신사와 IoT 개발사의 오랜 바람이었다. 출력이 높을수록 전파도달 거리가 길기 때문에 넓은 커버지리에서 서비스를 할 수 있다. 인프라 구축비용도 절감된다.
사물인터넷 전국망, SKT `로라` vs KT `LTE-M` 격돌
글로벌 장비제조사와 통신사, 칩 개발사는 이미 IoST와 IoT 상용화 단계에 도달했다. 통신업계는 국내 이통사가 LTE-M, 로라를 상용화하고 정부 지원이 뒷받침된다는 것은 매우 의미 있는 일이라고 평가했다.
<소물인터넷 개요(자료:업계종합)>
소물인터넷 개요(자료:업계종합)

안호천 통신방송 전문기자 hcan@etnews.com

2016년 6월 24일 금요일

Meet Android Studio

안드로이드 스튜디오는 안드로이드앱 개발을 위한 IntelliJ IDEA 을 기반으로 하는 통합 개발환경이다. IntelliJ의 강력한 에디터와 개발 툴 상에 안드로이드 스튜디오는 안드로이드 앱을 생성할 때 더욱 생산성을 향상시켜주는 특성들을 제공한다. 다음과 같은:
  • 유연한 Gradle 기반의 빌드 시스템
  • 빠르고 기능이 풍부한 에뮬레이터
  • 모든 안드로이드 장치들을 개발할 수 있는 통합 환경
  • 새로운 APK를 빌드하지 않고 실행하는 앱에 변경사항을 밀어 넣는 즉각적인 실행
  • 공통 앱 기능들을 빌드하고 샘플 코드를 불러오는데 도움을 주는 코드 템플릿과 GitHub 통합
  • Code templates and GitHub integration to help you build common app features and import sample code
  • 광범위한 테스팅 툴과 프레임워크
  • 퍼포먼스, 사용성, 버전 호환성 과 다른 문제점들을 잡기 위한 Lint 툴들
  • C++과 NDK 지원
  • Google Cloud Messaging과 App Engine 통합을 쉽게 하기 위한 Google Cloud Platform 내장 지원
이 페이지는 기본적인 안드로이드 스튜디오 특성에 대한 소개를 제공한다. 최근 변경사항의 요약은 Android Studio Release Notes 을 봐주세요.

Project Structure



Figure 1. The project files in Android view.
안드로이드 스튜디오의 각 프로젝트들은 소스 코드 파일들과 리소스 파일들과 함께 하나 이상의 모듈들을포함한다. 모듈의 타입은 다음과 같다:
  • 안드로이드 앱 모듈
  • 라이브러리 모듈
  • 구글 앱 엔진 모듈
  • Google App Engine modules
기본으로 안드로이드 스튜디오는 그림1과 같이 안드로이드 프로젝트뷰에 프로젝트 파일들을보여준다. 이 뷰는 프로젝트의 주요 소스 파일들에 빠른 접근을 제공하는 모듈들로 구성된다.
모든 빌드 파일들은 Gradle Scripts 하위에 탑 레벨에 보여지고 각 앱 모듈들은 다음 폴더들을 포함한다
  • manifests:  AndroidManifest.xml 파일을 포함한다.
  • java: JUnit test 코드를 포함한 자바 소스 코드 파일들을 포함한다.
  • res: XML 레이아웃, UI 스트링, 그리고 비트맵 이미지들과 같은 소스 코드가 아닌 리소스들을 포함한다.
디스크 상의 안드로이드 프로젝트의 구조는 이 평평해진 표현과는 틀리다. 프로젝트의 실제 파일 구조를 보려면 Project 드롭다운에서 Project를 선택해라(그림1에서는 Android로 보여주고 있다).

또한 프로젝트 뷰를 당신의 앱 개발의 특정 측면에 맞춰서 커스터마이징 할 수 있다. 예를 들어, 프로젝트의 Problems 뷰를 선택하면 레이아웃 파일에서 태그를 닫는 XML 요소를 빼먹는 것과 같이 코딩과 문법에러를 포함하고 있는 소스 파일로의 링크를 보여주도록하는것이다.
Figure 2. The project files in Problems view, showing a layout file with a problem.
For more information, see Managing Projects.

The User Interface


The Android Studio main window is made up of several logical areas identified in figure 3.
Figure 3. The Android Studio main window.
  1. 툴바는 넓은 영역의 액션을 수행하게 해준다. 앱을 실행시키는 것과 안드로이드 툴을 실행하는 것을 포함해서
  2. 네비게이션 바는 당신의 소스 수정을 위해 당신의 프로젝트를 탐색하고 파일을 오픈하는 것을 돕는다. 그리고 프로젝트 툴 윈도우에서 보여주는 더욱 간략한 구조 뷰를 제공한다.
  3. 에디터 윈도우는 코드를 생성하고 변경하는 곳이다. 현재 파일타입에 따라 윈도우는 변할 수 있다. 예를 들어, 레이아웃파일을 볼때, 에디터 윈도우는 레이아웃 에디터를 보여주고 대응하는 XML 파일을 보여주는 옵션을 제공한다.
  4. 툴 윈도우는 프로젝트 관리, 검색, 버전 컨트롤 그리고 그외에 대한 특정 업무에 대한 접근을 제공한다. 사용자는 툴 윈도우를 펼치고 닫을 수 있다.
  5. 상태바는 경고 및 메시지뿐만 아니라 프로젝트와 IDE 자체의 상태를 보여준다. 
툴바와 툴 운도우를 숨기거나 옮겨서 더 많은 스크린 공간을 주기 위해 메인 윈도우를 구성할 수 있다. 또한 대부분의 IDE 기능에 액세스 할 수 있도록 키보드 단축키를 사용하 ㄹ수 있다.
언제든, 쉬프트키를 두번 누르거나 안드로이드 스튜디오 윈도우의 오른쪽 상단코너에 있는 돋보기를 클릭하여 당신의 소스 코드, 데이터 베이스, 액션, UI의 요소 등등을 가로질러 검색할 수 있다. 이는 상당히 유용할 수 있는데, 예를 들어 어떻게 작동시키는지 까먹은 특정 IDE 액션의 위치를 찾고자 할때이다.

Tool Windows
perspective를 제공하는 대신에, 안드로이드 스튜디오는 당신의 문맥을 따르고 자동적으로 당신이 일하는 것에 따라 관련 툴 윈도우를 불러온다. 기본으로, 대부분 공통적으로 사용되는 툴 윈도우는 애플리케이션 윈도우의 가장자리에 있는 툴 윈도우 바에 고정되어 있다.
  • 툴 윈도우를 확장하고 닫기 위해서 툴 윈도우 바에 있는 툴 이름을 클릭한다. 또한 툴윈도우를 드래그하고, 고정, 고정해제, 붙이고 떼고 할 수 있다.
  • 현재기본 툴윈도우 레이아웃으로 돌아가기 위해 Window > Restore Default Layout 를 클릭하거나 Window > Store Current Layout as Default 를 클릭해서 디폴트 레이아웃을 커스터마이징 하세요. 
  • 전체 툴 윈도우 바를 보이거나 숨기기 위해 안드로이드 스튜디오 윈도우의 왼쪽 하단에 있는 윈도우 아이콘  을 클릭합니다.
  • 특정 툴 윈도우를 위치시키기 위해 윈도우 아이콘 위에 마우스 커서를 두고 메뉴에서 툴 윈도우를 선택합니다.
툴 윈도우를 열기 위해 키보드 단축키를 사용할 수 있습니다. 표1에는 대부분의 일반 윈도우를 위한 단축키를 열거합니다.
Table 1. Keyboard shortcuts for some useful tool windows.
Tool WindowWindows and LinuxMac
ProjectAlt+1Command+1
Version ControlAlt+9Command+9
RunShift+F10Control+R
DebugShift+F9Control+D
Android MonitorAlt+6Command+6
Return to EditorEscEsc
Hide All Tool WindowsControl+Shift+F12Command+Shift+F12
만약 모든 툴바, 툴 윈도우 그리고 엗터 탭을 숨기고 싶다면 View > Enter Distraction Free Mode 를 클릭하세요. 이는 Distraction Free Mode 를 가능케 합니다. Distraction Free Mode를 빠져나갈려면 View > Exit Distraction Free Mode 를 클릭합니다.
윈도우 스튜디오에서 대부분의 툴 윈도우 내에서 서치와 필터에 대한 Speed Search 를 사용할 수 있습니다. Speed Search를 사용하려면 툴 윈도우를 선택하고 당신의 search query 를 타이핑합니다.
You can use Speed Search to search and filter within most tool windows in Android Studio. To use Speed Search, select the tool window and then type your search query.

Code Completion

안드로이드 스튜디오는 세가지 코드 자동완성 타입이 있습니다. 이는 키보드 단축키를사용하여 접근 가능합니다.
Table 2. Keyboard shortcuts for code completion.
TypeDescriptionWindows and LinuxMac
Basic CompletionDisplays basic suggestions for variables, types, methods, expressions, and so on. If you call basic completion twice in a row, you see more results, including private members and non-imported static members.Control+SpaceControl+Space
Smart CompletionDisplays relevant options based on the context. Smart completion is aware of the expected type and data flows. If you call Smart Completion twice in a row, you see more results, including chains.Control+Shift+SpaceControl+Shift+Space
Statement CompletionCompletes the current statement for you, adding missing parentheses, brackets, braces, formatting, etc.Control+Shift+EnterShift+Command+Enter
또한 빠른 수정을 수행하고 Alt+Enter 을 눌러서 intention action들을 보이게 할 수 있습니다.
자동 완성에 대한 더 많은 정보는 Code Completion 참고하세요.

안드로이드 스튜디오 주변을 이동하는데 도움이되는 팁이 있습니다.
  • Recent Files 액션을 이용하여 최근에 접근한 파일들 사이를 스위칭하세요.
    최근 파일들 액션을 불러오기 위해서 Control+E (Command+E on a Mac) 를 누릅니다. 기본으로 최근 접근 파일이 선택되어 있습니다. 또한 이 액션의 왼쪽 컬럼을 통해 어느 툴윈도우든 접근할 수 있습니다.
  •  File Structure 액션을 이용해서 현재 파일의 구조를 봅니다. File Structure 액션을 불러오기 위해 Control+F12 (Command+F12 on a Mac)을 누룹니다. 이 액션을 사용해서 현재 파일의 어느 부분으로든 빠르게 탐색할 수 있습니다.
  • Navigate to Class 액션을 이용해 당신 프로젝트 내에서 특정 클래스를 검색하고 탐색하세요.  Control+N(Command+O on a Mac)을 눌러서 액션을 불러옵니다. Navigate to Class supports sophisticated expressions, including camel humps, paths, line navigate to, middle name matching, and many more. 만약 연속해서 두번 호출하면, 프로젝트 외부에서의 결과를 보여준다.
  • Navigate to File 액션을 이용해 파일이나 폴더를 탐색해라. Navigate to File 애션은 Control+Shift+N (Command+Shift+O on a Mac)를 눌러서 불러온다. 파일 대신 폴더를 찾기 위해 당신의 표현 끝에 / 를 더해라.
  • Navigate to Symbol 액션을 이용해서 이름으로 멤버나 필드를 탐색합니다. Control+Shift+Alt+N(Command+Shift+Alt+O on a Mac) 를 눌러서 Navigate to Symbol을 불러옵니다. 
  • Alt+F7 을 눌러서 현재 커서 위치에서 클래스 메소드, 필드, 파라미터 또는 문장에 대한 코드 참조를 찾습니다. 

Style and Formatting

편집을 하면서, 안드로이드 스튜디오는 자동으로 당신의 코드 스타일 셋팅에 지정된데로 포매팅과 스타일을 적용합니다. 프로그래밍 언어별로 코드 스타일 셋팅을 커스터마이징 할수 있으며 이는 탭, 들여쓰기, 공백, wrapping 그리고 괄호, 빈 줄에 대한 규칙을 지정하는 것을 포함합니다. 당신의 코드 스타일 셋팅을 커스터마이징 하기 위해 File > Settings > Editor > Code Style (Android Studio > Preferences > Editor > Code Style on a Mac.)을 클릭합니다.
당신이 작업할 때 IDE가 포맷팅을 자동적으로 적용함에도, Control+Alt+L(Opt+Command+L on a Mac) 을 눌러서 명시적으로 Reformat Code 액션을 호출할 수 있습니다. 또는 Control+Alt+I (Alt+Option+I on a Mac). 를 눌러서 모든 라인에 auto-indent를 수행할 수 있습니다.
Figure 4. Code before formatting.
Figure 5. Code after formatting.

Version Control Basics

안드로이드 스튜디오는 다양한 버전 컨트롤 시스템(VCS's)을 지원한다. 여기는 Git, GitHub, CVS, Mercurial, Subversion 그리고 Google Cloud Source Repositories가 포함된다.

안드로이스 스튜디오에 앱을 임포팅한 이후에 희망하는 버전 컨트롤 시스템을 위한 VCS 지원을 가능하게 하기 위해 안드로이드 스튜디오 VCS 메뉴 옵션을 사용한다. repository를 생성하고 새로운 파일들을 버전 컨트롤에 임포트하고 그외 버전 컨트롤 작업을 수행한다:
  1. 안드로이드 VCS 메뉴로부터 Enable Version Control Integration을 클릭한다.
  2. 드롭다운 메뉴로부터 project root와 연관된 버전 컨트롤 시스템을 선택하고 OK를 클릭한다.
이제 VCS 메뉴는 당신이 선택한 시스템에 기반한 많은 버전 컨트롤 옵션을 보여준다.
Note: File > Settings > Version Control 메뉴를 선택해서 버전 컨트롤 셋팅을 셋업하고 변경할 수 있다.

Gradle Build System


안드로이드 스튜디오는 빌드 시스템 토대로 Gradle을 사용한다. 이는 Android Plugin for Gradle
이 제공하는 안드로이드만의 기능을 가지고 있다. 이 빌드 시스템은 안드로이드 스튜디오 메뉴에서 통합된 툴로써 실행되고 명령 라인에서는 독립적으로 실행된다. 당신은 다음의 빌드 시스템 특성을 사용할 수 있다 :
  • 빌드 프로세스를 커스터마이즈하고 설정하고 확장한다.
  • 동일한 프로젝트와 모듈을 사용하는 다른 특성들을 가진 다양한 APK들을 생성한다.
  • 소스셋을 전체에 걸쳐 코드와 리소스를 재사용한다.
Gradle의 유연성을 채용하여 앱 코어 소스 파일들을 변경하지 않고 이 모든 것을 달성할 수 있다. 안드로이스 스튜디오 빌드 파일들은 build.gradle로 이름붙여져 있다. 파일들은 안드로이드 Gradle 플러그인에 의해 제공되는 요소들로 빌드를 설정하는 Groovy문법을 사용하는 평범한 텍스트 파일이다. 각 프로젝트는 최상위 레벨에 전체 프로젝트를 위한 하나의 빌드 파일을 가지고 있고 각 모듈별로 모듈레벨 빌드 파일들로 구분된다. 존재하는 프로젝트를 임포트하면 안드로이드 스튜디오는 자동으로 필요한 빌드 파일들을 생성한다.
빌드 시스템과 설정하는 방법에 대해 더 알고 싶으면  Configure Your Build를 참고해라. 

Build Variants

빌드 시스템은 하나의 프로젝트로부터 동일한 애플리케이션의 다양한 버전을 생성하는데 도움을 줄 수 있다. 당신이 앱의 무료버전과 유료버전을 동시에 가지고 싶거나 구글 플레이에 있는 다양한 환경을 위한 다수의 APK들을 배포하고자 할 때 유용하다.
build variants를 설정하는 더 많은 정보는 Configuring Gradle Builds를 참고해라. 

APK Splits

APK splits는 screen density 나 ABI에 기반한 다수의 APK들을 효율적으로 생성하게 해준다. 예를 들어 APK splits는 앱을 분리된 hdpi와 mdpi 버전으로 생성하면서 여전히 그들을 하나의 variant로 간주하고 그들이 test app, javc, dx 그리고 ProGuard 셋팅들을 공유할 수 있게 해준다. 
APK Splits에 대한 더 많은 정보는 APK Splits 를 참고해라. 

Resource Shrinking

안드로이드 스튜디오에서 Resource shrinking은 당신의 패키징된 앱과 라이브러리 의존성으로부터 사용되지 않는 리소스들을 자동으로 제거한다. 예를 들어 당신 앱이 구글 드라이브 기능에 접근하기 위해 Google Play services를 사용하고 현재 당신이 Google Sign-In을 사용하고 있지 않다면 Resource shrinking은 SignInButton 버튼을 위한 다양한 drawable assets을 제거할 것이다.
Note: Resource shrinking 은 ProGuard와 같은 code shrinking tool과 조합하여 동작한다.
코드와 리소스를 줄이기 위한 더 많은 정보는 Shrink Your Code and Resources를 보아라.

Managing Dependencies

프로젝트를 위한 의존성은 build.gradle 파일에 있는 이름으로 명세된다. Gradle은 주의를 기울여 당신 의존성을 찾아내고 당신의 빌드에서 사용가능하게 한다. 당신은 build.gradle파일에 모듈 의존성, remote binary dependencies, 그리고 ㅣlocal binary dependencies 를 선언할 수 있다. 안드로이드 스튜디오는 프로젝트가 Maven Central Repository를 디폴트로 사용하도록 설정한다.(이 설정은 프로젝트를 위한 최상위 빌드 파일에 포함된다.) 의존성 설정에 대한 더 많은 정보는 Configure Build Variants를 읽어라.

Debug and Profile Tools


안드로이드 스튜디오는 당신이 디버깅하고 코드의 성능을 개선하는 것을 보조한다. 여기는 인라인 디버깅과 퍼포먼스 분석 툴이 포함된다.

Inline debugging

refences, expressions, 그리고 변수 값의 inline verification을 가진 디버깅 뷰에서 당신 코드의 자세한 설명을 개선하기 위해 인라인 디버깅을 사용해라. 인라인 디버깅 정보는 다음을 포함한다:
  • Inline variable values
  • Referring objects that reference a selected object
  • Method return values
  • Lambda and operator expressions
  • Tooltip values
Figure 6. An inline variable value.
인라인 디버깅을 활성화시기기 위해 Debug window 에서 Settings 을 클릭하고 Show Values Inline을 위한 체크박스를 선택한다.

Performance monitors

안드로이드 스튜디오는 쉽게 당신 앱의 메모리와 CPU 사용량을 추적하고 deallocated object를 찾고 메모리 릭을 찾고 그래픽 성능을 최적화하고 네트웍 요구사항을 분석할 수 있도록 퍼포먼스 모니터를 제공한다. 디바이스와 에뮬레이터 상에서 앱을 실행시키고 Android Monitortool 을 열어서 Monitors 탭을 클릭한다.
퍼포먼스 모니터의 더 많은 설명은 Android Monitor를 보아라. 

Heap dump

당신이 안드로이드 스튜디오에서 메모리 사용을 모니터링 할 때 동시에 가비지 컬렉션을 시작시키고 Android-specific HPROF bianry format 파일로 heap snapshot에 대한 자바 힙 덤프를 할 수 있다. HPROF 뷰어는 메모리 사용을 추적하고 메모리 릭을 찾는 것을 돕기 위해 클래스, 각 클래스의 인스턴스 그리고 참조 트리를 보여준다.
힙 덤프를 가지고 하는 작업에 대한 더 많은 정보는 Dumping and Analyzing the Java Heap을 보아라.

Allocation tracker

안드로이드 스튜디오는 메모리 사용을 모니터하면서 메모리 할당을 추적할 수 있게 해준다. 메모리 할당 추적은 특정 액션을 수행할 때 어디에 메모리가 할당되는지 모니터할 수 있게 해준다 이러한 할당을 아는 것은 이들 액션과 관련된 메소드 호출을 조절함으로써 당신 앱 성능과 메모리를 최적화할 수 있게 한다.
할당의 추적과 분석에 대한 정보는 Allocation Tracker를 보아라. 

Data file access

Systrace, logcat, 그리고 Traceview와 같은 안드로이드 SDK 툴은 자세한 앱 분석을 위한 퍼포먼스와 디버깅 데이터를 생성한다.
사용가능한 생성 데이터 파일을 보기 위해 Captures tool 윈도우를 연다. 생성된 파일 리스트에서 데이터를 보기 위해 더블 클릭한다. .hprof 파일에서 오른 버튼을 클릭해서 표준 .hprof 파일 포맷으로 변경할 수 있다.

Code inspections

프로그램을 컴파일할 때마다, 안드로이드 스튜디오는 당신이 쉽게 코드의 구조적인 질과 함께 문제를 인식하고 수정할 수 있도록 자동으로 설정된 Lint 과 다른  IDE inspections를 실행한다.

Lint 툴은 잠재적인 버그와 correctness, security, performance, usability, accessibility, 그리고 internationalization을 위한 최적화 개선을 위해 안드로이드 프로젝트 소스 파일을 체크한다.
Figure 7. The results of a Lint inspection in Android Studio.
Lint 체크와 더불어, 안드로이드 스튜디오는 IntelliJ 코드 검사를 수행하고 당신의 coding workflow 간소화하기 위한 annotation을 검증한다.
더 자세한 정보는 Improving Your Code with Lint와 lint tool 을 보아라.

Annotations in Android Studio

안드로이드 스튜디오는 버그, null pointer exception 그리고 리소스 타입 충돌 등의 수정을 도와주는 변수, 파라미터 그리고 결과값을 위한 annotation을 포함한다. Android SDK Manager는 안드로이드 스튜디오에서 사용할 수 있도록 Android Support Repository에 Support-Annotation library를 패키징하고 있다. 안드로이드 스튜디오는 코드를 점검하는 동안 설정된 annotation의 유효성을 검증한다.

Android annotation에 대한 더 자세한 사항은 Improving Code Inspection with Annotations 을 보아라. 

Log messages


안드로이드 스튜디오에서 앱을 실행할 때 adb 출력과 윈도우 하단에 있는 Android Monitor를 클릭하여 디바이스 로그메시지(logcat) 를 볼 수 있다.

만약 Android Device Monitor 에서 앱을디버깅하기 원한다면 Tools > Android > Android Device Monitor 를 클릭하여 Device Monitor를 띄울 수 있다. Device Monitor 에서 당신 앱을 프로파일링하고 device behavior를 제어하는 등의 작업을 하기 위한 DDMS툴 셋을 찾을 수 있다. 또한 레이아웃을 최적화하는데 도움을 주는 Hierarchy Viewer tool을 포함한다.

2016년 6월 22일 수요일

Getting Started with Testing

Getting Started with Testing


test를 작성하고 실행하는 것은 안드로이드 앱 개발 사이틀에서 중요한 부분이다. 잘 작성한 테스트는 개발중에 일찍 버그를 잡을 수 있게 도와줄 수 있고 당신 코드에 자신감을 준다. 안드로이드 스튜디오를사용해서 다양한 물리 또는 가상 안드로이드 장치 상에서 local unit test나 instrumented test를 수행할 수 있다. 그러면 결과를 분석해서 개발환경을 벗어날 필요없이 당신의 코드에 수정작업을 할 수 있다.
Local unit tests 는 로컬 머신에서 실행하는 테스트이다. 이는 안드로이드 프레임워크나 안드로이드 장치에 접근할필요가 없다. local units tests를 작성하는지 배우려면 Building Local Unit Tests 를 보아라.
Instrumented tests 는 안드로이드 장치나 에뮬레이터상에서 실행하는 테스트이다. 테스트는 테스트 중에 앱의 Context 와 같은 Instrumentation information 에 접근한다. Instrumented tests는 unit, user interface(UI), 또는 app component integration testing에 사용될 수 있다. 구체적인 필요에 따라 어떻게 instrumented test를 개발하는지 알고 싶으면 다음의 추가적인 주제를 참조해라. :
이 레슨은 어떻게 안드로이드 스튜디오를 이용해서 테스트를 구축하고 실행시키는지 알려준다. 만약 안드로이드 스튜디오를 사용하고 있지 않는다면 run your tests from the command-line 를 사용할 수 있다.

Configure Your Project for Local Unit Tests


안드로이드 스튜디오 프로젝트에서 명확한 소스 디렉토리(src/test/java) 안에 local unit test를 위한 소스 파일들을 저장해야 한다. 이는 당신의 unit tests를 하나의 소스 집합으로 그룹핑함으로써 프로젝트 조직을 새선한다.
생산 코드와 함께 specific flavor or build type 을 위한 local unit tests를 생성할 수 있다. 당신의 unit test를 당신의 생산 소스 트리에 대응하는 test source tree 위치에 유지해라. 다음과 같이:
Path to Production ClassPath to Local Unit Test Class
src/main/java/Foo.javasrc/test/java/FooTest.java
src/debug/java/Foo.javasrc/testDebug/java/FooTest.java
src/myFlavor/java/Foo.javasrc/testMyFlavor/java/FooTest.java
JUnit 4 framework가 제공하는 표준 API들을 사용하는 당신의 프로젝트를 위해 테스팅 의존서을 설정할 필요가 있다. 테스트가 안드로이드 의존성과 상호작용할 필요가 있다면 Mockito 를 포함하여 당신의 local unit test를 단순화시켜라ㅏ. local unit tests에서 mock object를 사용하는 법은 Mocking Android dependencies 를 보아라.
당신 앱의 top-level build.gradle In에 의존성에 대해 이들 라이브러리를 명세할 필요가 있다. :
dependencies {
    // Required -- JUnit 4 framework
    testCompile 'junit:junit:4.12'
    // Optional -- Mockito framework
    testCompile 'org.mockito:mockito-core:1.10.19'
}

Configure Your Project for Instrumented Tests

안드로이드 스튜디오 프로젝트에서 특정 디렉토리(src/androidTest/java)에 당신의 instrumented tests를 위한 소스코드를 위치시켜야 한다.
 Android Testing Support Library Setup 를 다운르도 해라. 이는 당신의 앱을 위한 instrumented 테스트코드를 빠르게 구축하고 실행할 수 있도록 도와준다. Testing Support Library 는 JUnit4 test runner(AndroidJUnitRunner ) 와 기능적인 UI test(Espresso and UI Automator)를 위한 API들을 지원한다.
당신의 프로젝트가 Testing Support Library가 제공하는 test runner와 API 룰들을 사용할 수 있도록 Android testing dependencies 설정할 필요가 있다. 당신의 테스트 개발을 간단하게 하기 위해,우리는  Hamcrest라이브러리를 포함할 것을 추천한다. 이는 Harcrest matcher API들을 이용하여 좀더 유연한 assertions들을 생성할 수 있게 해준다.
당신앱의 top-level build.gradle 파일에, 의존성에 대한 이들 파일들을 명세할 필요가 있다.
dependencies {
    androidTestCompile 'com.android.support:support-annotations:23.0.1'
    androidTestCompile 'com.android.support.test:runner:0.4.1'
    androidTestCompile 'com.android.support.test:rules:0.4.1'
    // Optional -- Hamcrest library
    androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
    // Optional -- UI testing with Espresso
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
    // Optional -- UI testing with UI Automator
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
}
To use JUnit 4 test classes, make sure to specify AndroidJUnitRunner as the default test instrumentation runner in your project by including the following setting in your app's module-level build.gradle file:
android {
    defaultConfig {
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}

Work With Test Artifacts

Android Studio has two types of test artifacts: Android Instrumentation Tests and Unit Tests. Previously, you could work with just one test artifact at a time. Now, both test artifacts are enabled. The advantage of enabling both test artifacts is that any changes you make to the underlying code affect them both. For example, if you rename a class that both test artifacts access, both will know about the class name refactoring.
The figure shows what your project looks like with both test artifacts enabled. Notice the shading of both test artifacts.

Build and Run Your Tests


Android Studio provides all the tools you need to build, run, and analyze your tests within the development environment. You can also run instrumented tests on multiple device configurations, simultaneously, using Cloud Test Lab integration.
Note: While running or debugging instrumented tests, Android Studio does not inject the additional methods required for Instant Run and turns the feature off.

Run Local Unit Tests

To run your local unit tests:
  1. In the Project window, right click on the project and synchronize your project.
  2. In the Project window, navigate to your unit test class or method, then right-click it and select Run .
    • To run all tests in the unit test directory, right-click on the directory and select Run tests .
The Android Plugin for Gradle compiles the local unit test code located in the default directory (src/test/java), builds a test app, and executes it locally using the default test runner class. Android Studio then displays the results in the Run window.

Run Instrumented Tests

To run your instrumented tests:
  • In the Project window, navigate to your instrumented test class or method, then right-click and run it using the Android Test configuration. To run all tests in the instrumented test directory, right-click the directory and select Run tests .
The Android Plugin for Gradle compiles the instrumented test code located in the default directory (src/androidTest/java), builds a test APK and production APK, installs both APKs on the connected device or emulator, and runs the tests. Android Studio then displays the results of the instrumented test execution in the Run window.

Run Instrumented Tests with Cloud Test Lab

Using Cloud Test Lab, you can simultaneously test your app on many popular Android devices, across multiple languages, screen orientations, and versions of the Android platform. These tests run on actual physical devices in remote Google data centers. You can also configure your instrumented tests to take screenshots while Cloud Test Lab runs its tests. You can deploy tests to Cloud Test Lab from the command line, or from Android Studio's integrated testing tools.
Android Studio allows you to connect to your Google Cloud Platform account, configure your tests, deploy them to Cloud Test Lab, and analyze the results all within the development environment. Cloud Test Lab in Android Studio supports the following Android test frameworks: Espresso, UI Automator 2.0, or Robotium. Test results provide test logs and include the details of any app failures.
Before you can start using Cloud Test Lab, you need to:
  1. Create a Google Cloud Platform account to use with active billing.
  2. Create a Google Cloud project for your app.
  3. Set up an active billing account and associate it with the project you just created.

Configure a test matrix and run a test

Android Studio provides integrated tools that allow you to configure how you want to deploy your tests to Cloud Test Lab. After you have created a Google Cloud project with active billing, you can create a test configuration and run your tests:
  1. Click Run > Edit Configurations from the main menu.
  2. Click Add New Configuration (+) and select Android Tests.
  3. In the Android Test configuration dialog:
    1. Enter or select the details of your test, such as the test name, module type, test type, and test class.
    2. From the Target drop-down menu under Deployment Target Options, select Cloud Test Lab Device Matrix.
    3. If you are not logged in, click Connect to Google Cloud Platform and allow Android Studio access to your account.
    4. Next to Cloud Project, click the wrench and nut button and select your Google Cloud Platform project from the list.
  4. Create and configure a test matrix:
    1. Next to the Matrix Configuration drop-down list, click Open Dialog ellipses button.
    2. Click Add New Configuration (+).
    3. In the Name field, enter a name for your new configuration.
    4. Select the device(s), Android version(s), locale(s) and screen orientation(s) that you want to test your app with. Cloud Test Lab will test your app against every combination of your selections when generating test results.
    5. Click OK to save your configuration.
  5. Click OK in the Run/Debug Configurations dialog to exit.
  6. Run your tests by clicking Run .

Figure 1. Creating a test configuration for Cloud Test Lab.

Analyzing test results

When Cloud Test Lab completes running your tests, the Run window will open to show the results, as shown in figure 2. You may need to click Show Passed  to see all your executed tests.

Figure 2. Viewing the results of instrumented tests using Cloud Test Lab.
You can also analyze your tests on the web by following the link displayed at the beginning of the test execution log in the Run window, as shown in figure 3.

Figure 3. Click the link to view detailed test results on the web.
To learn more about interpreting web results, see Analyzing Cloud Test Lab Web Results.