[go: up one dir, main page]


안드로이드 웨어 개발, 하고 계신가요? 12월 11일, 안드로이드 웨어 Watch Face API가 공개 되었습니다. 시계의 가장 핵심 기능은 바로 올바른 시간을 알려주는 것이겠죠. 새로운 API를 통해 이제 여러분은 아날로그, 디지털, 혹은 아직 아무도 생각지 못한 새로운 방식으로 사용자에게 시간을 알려줄 수 있습니다. 개성 넘치는 워치 페이스를 포함하여, 앞으로 나올 더욱 다양하고 유용한 안드로이드 웨어 앱들이 기대됩니다. 이제 여러분이 직접 개발에 도전해 보실 차례입니다!



벌써 GDG 서울, GDG 인천에서 열린 웨어 해커톤을 통해 불주먹, WBus(웨어버스) 등 재밌는 웨어 앱이 출시 되었는데요. 여러분도 이처럼 직접 해커톤 이벤트를 열어 커뮤니티와 함께 안드로이드 웨어 개발을 경험해 보세요. 구글 코리아에서 여러분의 즐거운 안드로이드 웨어 개발을 지원해 드립니다.

웨어 커뮤니티 해커톤


  1. 일정은 2015년 1월 1일-2월 15일 사이로 정해 주세요.
  2. 식사 혹은 장소 대여 비용을 지원해 드립니다. 회사나 학교 혹은 무료로 이용하실 수 있는 공간을 활용하시기를 권장해 드립니다. (참고자료 링크의 ‘무료 공간 대여’ 항목 참고)
  3. 해커톤 당일 참석자들이 이용할 안드로이드 웨어 기기는 구글 코리아에서 대여해 드립니다.
  4. 동작하는 데모를 완성한 모든 팀에는 행사가 끝난 후 기념품을 보내 드립니다.
  5. 유용하거나 재미있는 앱의 경우 웨어 디바이스를 무상으로 제공해 드립니다.
  6. 자세한 지원 내용과 지원 방법은 이벤트를 등록해 주시면 구글 코리아에서 별도로 연락 드리겠습니다.


Android Wear 커뮤니티 해커톤 이벤트 신청하기 (12월 31일 수요일 마감)



By Wayne Piekarski, Developer Advocate

많은 분들이 기다리시던 안드로이드 웨어 Watch Face API 가 드디어 공개되었습니다. 개발자 여러분은 시계에서 가장 핵심적인 ‘시계' 기능을 커스터마이즈 할 수 있게 되었고, 안드로이드 웨어 디바이스를 사용하는 사용자들은 다양한 워치 페이스를 통해 자신의 개성을 표현할 수 있게 되었습니다. 개발자 여러분이 새로운 Watch Face API 를 통해 어떤 새로운 ‘시계' 를 만들어내실지 벌써 부터 기대가 됩니다. 


An Introduction to Watch Faces for Android Wear by Timothy Jordan

워치 페이스 개발 시작하기

워치 페이스 개발을 시작하기 위해 가장 먼저 워치 페이스를 디자인하는 법을 살펴보시기 바랍니다. 잘 동작하는 워치 페이스를 디자인할 때 기억할 원칙과 다양한 시계 모드에 따른 디자인 고려 사항을 확인하실 수 있습니다. 그 다음으로 워치 페이스를 만들기 위한 트레이닝 클래스를 살펴 보시기 바랍니다. 워치 페이스를 만드는 과정이 단계별로 잘 설명되어있습니다. 물론 샘플 코드를 빼먹을 수 없겠조. 온라인 상에서 바로 살펴볼 수 있는 워치 페이스 샘플이 공개되었고, 안드로이드 스튜디오 샘플 매니저 내에도 다양한 예제가 포함되어 있습니다. 새로운 API 에 대한 전반적인 내용이 궁금하다면 위에 첨부한 안드로이드 웨어 워치 페이스를 위한 DevByte 동영상을 감상해보셔도 좋을 것 같습니다.

워치 페이스는 여러분의 웨어러블 앱을 통해 실행되는 서비스 입니다, 따라서 하나의 앱이 하나 혹은 그 이상의 워치 페이스를 포함할 수 있습니다. 또한, 워치 페이스의 설정 값을 확인하고 변경할 수 있도록 설정 엑티비티를 추가할 수도 있습니다. 예를 들어 사용자가 12시간 혹은 24시간 단위로 시계에 표시되는 숫자를 변경하거나, 배경색등을 변경할 수 있도록 지원할 수 있습니다. 해당 엑티비티는 웨어 디바이스 위에서 바로 동작할 수도, 혹은 휴대폰 상에 서 동작할 수 있습니다. 필요한 경우 OpenGL 을 활용해 워치 페이스를 그릴 수도 있고, 별도의 백그라운드 서비스를 통해 날씨나 일정과 같은 유용한 데이터를 받아 함께 표시할 수도 있습니다. 워치 페이스는 아날로그, 디지털 혹은 아직 아무도 생각지 못한 새로운 방식으로 사용자에게 시간을 알려줄 수 있습니다. 이 모든 것은 전적으로 여러분에게 달려 있습니다.

안드로이드 웨어 디바이스가 곧 업데이트 됩니다.

다음 주 중으로 안드로이드 5.0 기반의 API 21을 지원하는 최신 이미지가 모든 안드로이드 웨어 사용자에게 Over-the-air (OTA) 방식으로 업데이트 될 예정입니다. 업데이트를 받은 사용자는 휴대폰 위에서 동작하는 안드로이드 웨어 앱 을 통해 워치페이스를 설정할 수 있고, 구글 플레이를 통해 워치 페이스를 설치 할 수 있게 됩니다. 물론 업데이트 후에도, 안드로이드 웨어 디바이스는 안드로이드 4.3 이상 버전에서 동작하는 모든 디바이스와 잘 호환되어 동작합니다.


기존 워치 페이스 업그레이드 하기

개발자분들은 정말 대단합니다. 저희 팀은 공식 문서가 전혀 없는 상황에서도 만들어진 개발자 여러분의 다양한 워치 페이스 앱에 정말 놀랐습니다. 만일 여러분이 이미 비 공식적인 방법을 활용해 워치 페이스를 만드셨다면, 이제 여러분의 워치 페이스 앱을 공식 API 를 사용하도록 변경하실 차례입니다.

공식 API 는 사용자가 플랫폼 상에서 일관된 사용자 경험을 갖을 수 있도록 해주며, 동시에 개발자 여러분께 워치 페이스 앱을 만들 때 유용한 추가적인 정보와 컨트롤을 제공합니다. 예를 들어, 시계가 엠비언트 모드 (저전력 흑백모드)로 진입하는 시점을 알려주고, 시스템 UI 가 표시될 위치를 변경할 수 있는 API 도 지원합니다. 또한, 새로운 API 를 이용해 워치 페이스를 만드신 경우에만 구글 플레이의 워치 페이스 콜렉션에 선정되실 수 있습니다.

구글 플레이를 통해 워치 페이스 배포하기


개발자 여러분은 OTA 를 통한 안드로이드 웨어 업데이트가 완료된 후에 앱을 업데이트 하시면 됩니다. 업데이트 완료 시점은 안드로이드 웨어 Google+ 커뮤니티를 통해 알려드릴 예정입니다. 업데이트가 완료되기 전 API 21 버전에 기반한 앱을 배포하는 경우, API 20 기반의 기존 안드로이드 웨어 디바이스에서 정상적으로 설치되지 않을 수 있습니다. 만일 여러분이 OTA 가 진행 중인 동안 여러분의 앱을 배포하고 싶다면, minSdkVersion 을 20 으로 설정하시기 바랍니다. 업데이트가 모두 완료된 후에는 여러분의 기존 워치 페이스 앱을 2015년 1월 31일 까지 꼭 업데이트 하시기 바랍니다. 그 이후 부터는 공식 API 를 사용하지 않는 워치 페이스 앱의 지원을 중단할 예정입니다.


구글 플레이의 다양한 안드로이드 웨어 앱

바로 오늘 부터, 구글 플레이 안드로이드 웨어 배포 가이드에 따라, 안드로이드 웨어를 위해 디자인된 여러분의 앱을 제출 하실 수 있습니다. 여러분의 앱이 웨어 앱 품질 가이드의 항목들을 만족하고 구글 플레이 상에어 웨어 앱으로 수락되면, 안드로이드 웨어를 사용하는 사용자들이 보다 쉽게 여러분의 앱을 발견할 수 있게 됩니다. 안드로이드 웨어 앱을 위한 리뷰를 받으시려면, 구글 플레이 개발자 콘솔의 가격 및 배포 섹션에서 'ANDROID WEAR' 항목을 체크하시기 바랍니다.

안드로이드 웨어를 발표한 후 지난 몇 개월간 사용자 정의 알림, 보이스 액션 그리고 안드로이드의 기능 그 자체를 활용한 수천개의 앱이 만들어졌습니다. 다시 한 번 감사드립니다. 사용자는 6 종류의 웨어 디바이스와 다양한 시계 줄, 그리고 수천개의 앱을 통해 자신들의 시계를 입맛에 맞게 꾸밀 수 있었습니다. 이제 오늘 공개된 워치 페이스 기능을 통해 앞으로는 선택의 폭이 더욱 넓어질 것 입니다. 다양한 선택의 기회를 제공하는 것은 안드로이드 웨어 에코 시스템의 핵심이며, 우리는 플랫폼의 핵심 기능을 개발자 여러분께 계속해서 추가로 공개하기 위해 더욱 노력할 것 입니다. 여러분이 어떤 멋진 앱들을 만들지 벌써부터 정말 기대됩니다.





안녕하세요. 구글 Developer Advocate 양찬석입니다. 많은 개발자 분들이 기다리셨던 안드로이드 5.0 롤리팝 정식 버전의 시스템 이미지가 구글 개발자 사이트를 통해 마침내 공개되었습니다. 새로운 넥서스 9 태블릿 혹은 넥서스 5, 7 (Wi-Fi), 10 디바이스를 갖고 계신 개발자 분들은 바로 지금 시스템 이미지를 다운받고, 안드로이드 5.0 롤리팝을 직접 사용해보실 수 있습니다. 시스템 이미지를 덮어쓰는 방법은 이전에 공유해드린 블로그 포스트의 내용을 참고하시면 좋을 것 같습니다. 다만, 팩토리 이미지를 적용하게 되면, 기존 디바이스에 설치되어있던 앱 정보를 비롯하여 개인 데이터가 초기화 됨으로 중요한 데이터는 꼭 백업해 두시기 바랍니다.

시스템 이미지 공개와 함께, 일반 사용자들을 대상으로 OTA 가 점진적으로 진행 중입니다. 다시 말해, 이제 사용자들이 달콤한 안드로이드 롤리팝 버전 위에서 여러분의 앱을 사용할 시간이 코 앞으로 다가왔습니다. 롤리팝 위에서도 멋진 여러분의 앱이 잘 동작할 수 있도록 개발자 여러분이 꼭 확인하셔야 할 내용을 정리해 보았습니다. 무엇보다도, 혹시 플랫폼 공개와 함께 업데이트된 안드로이드 5.0 의 주요 변경 사항 내용을 확인하지 못한 개발자 분들은 그 내용을 먼저 살펴 보시면 좋을 것 같습니다



테스트, 테스트 그리고 다시 한번 테스트

안드로이드 5.0 롤리팝은 구글의 새로운 디자인 시스템인 머티리얼 디자인이 적용되었고, 새로운 안드로이드 런타임 (ART) 과 미디어 플레이어등 플랫폼 전체적으로 정말로 많은 부분에 걸쳐 다양한 발전이 있었습니다. 그런 만큼, 지금 서비스하고 있거나 개발 중인 앱이 새로운 안드로이드 5.0 에서 올바르고 멋지게 동작하는지 테스트 해보시기 바랍니다. 테스트의 중요성은 아무리 강조해도 지나치지 않습니다.

ART 호환성 관련 이슈

새로운 안드로이드 런타임 ART는 안드로이드가 보다 빠르고 효율적으로 동작할 수 있도록 돕습니다. 플랫폼 SDK와 표준 개발도구를 사용해 제작된 어플리케이션의 경우 별 다른 문제없이 ART 위에서 잘 동작하지만, NDK 를 사용하거나 보안 혹은 그외 다른 이유로 DEX 포맷을 변조해서 사용하거나 제 3자가 제공하는 개발도구를 사용하고 있는 경우라면 ART 위에서 앱이 문제 없이 동작하는지 확인해보셔야 합니다. 안드로이드 5.0 부터는 ART 가 기본 런타임으로 적용되며 Dalvik 런타임은 더이상 포함되지 않습니다.

몇 가지 ART 호환성 이슈를 정리해보면 다음과 같습니다.

1. Ahead-Of-Time (AOT) 컴파일 이슈

ART 는 더욱 엄밀하게 bytecode 의 무결성을 검증합니다. 보안 등 여러가지 이유로 외부 도구들을 사용하여 앱을 빌드하는 경우 새로운 문제가 발생할 수 있습니다. 구글은 지난 킷캣버전에서 ART 가 처음 소개된 이 후, 다양한 솔루션 업체들과 ART 호환성 이슈를 해결하기 위해 노력해 왔습니다. 혹시 여러분이 사용하고 계신 도구에서 ART 호환성 이슈가 발생하는 경우, 해당 도구가 업데이트되었는지 확인해보시기 바랍니다. 최신 버전의 도구를 사용하면 문제가 해결 될 수 있습니다. 또한 앱 실행시 DEX 포맷을 OAT 포맷으로 변경하는 과정에서 문제가 발생하는 경우 Reporting Problems 링크를 통해 구글에 문제를 알려주시기 바랍니다.

2. GC(Garbage Collection) 관련

ART 에서는 GC 성능이 더욱 향상되었기 때문에 GC_FOR_ALLOC 이벤트가 발생하는 빈도를 줄이기 위해여 명시적으로 System.gc()메서드를 호출할 필요가 없습니다. System.getProperty("java.vm.version") 메서드를 통해 현재 동작하는 VM 버전을 확인할 수 있으며,  결과 값이 '2.0.0' 이상인 경우 ART 런타임이 사용되고 있는 것 임으로, 명시적으로 GC 를 호출하지 않도록 코드를 수정하는 것을 권장 드립니다.


3. JNI 관련

무엇보다도 먼저 JNI 코드 상에서 문제가 발생할 수 있는 부분들은 안드로이드 개발자 도구에 포함된 CheckJNI 툴을 이용하여 확인할 수 있습니다.  아래와 명령어를 실행 한 후,
adb shell setprop debug.checkjni 1
앱을 실행하시면, 위험성이 있는 JNI 코드가 실행되는 경우 다음과 같이 상세한 경고 메세지가 출력됩니다.
W JNI WARNING: method declared to return 'Ljava/lang/String;' returned '[B'
W              failed in LJniTest;.exampleJniBug
I "main" prio=5 tid=1 RUNNABLE
I   | group="main" sCount=0 dsCount=0 obj=0x40246f60 self=0x10538
I   | sysTid=15295 nice=0 sched=0/0 cgrp=default handle=-2145061784
I   | schedstat=( 398335000 1493000 253 ) utm=25 stm=14 core=0
I   at JniTest.exampleJniBug(Native Method)
I   at JniTest.main(JniTest.java:11)
I   at dalvik.system.NativeStart.main(Native Method)
I 
E VM aborting
또한, ART 의 GC 기능을 더욱 향상 시키기 위해 AOSP 상에서 개발중인 Compacting GC 기능을 지원할 예정입니다. 이 경우, 네이티브 코드상에서 Get...ArrayElements() 메서등을 통해 반환되는 주소 값은 실제 메모리 블럭의 주소가 아닌 복제된 메모리 블럭의 주소 값을 갖게 되며, 메모리 블럭의 주소를 참조하여 직접 값을 변경하는 경우, 값을 수정한 후 올바르게 Release...ArrayElements() 메서드를 호출하지 않으면 값이 정상적으로 반영되지 않을 수 있습니다.

ART 에서는 보다 엄밀하게 JNI 코드 상의 오류를 체크하며, 기존에는 별다른 예외 없이 진행되었던 다음과 같은 경우에도 오류가 발생할 수 있습니다.
  • 존재하지 않는 메서드를 대상으로 RegisterNatives 메서드를 호출하는 경우 NoSuchMethodError 예외가 발생합니다. 예를 들어, Proguard 의 최적화 과정에서 해당 메서드가 제거되었을 수 있습니다.
  • 존재하지 않는 필드 이름을 GetFieldID() 혹은 GetStaticFieldID() 메서드로 참조하려고 하는 경우  NoSuchMethodError 예외가 발생합니다.
  • JNI 스펙에 따라 CallNonvirtual...Method() 를 호출 할 때는, 해당 메서드를 선언하고 있는 클래스가 사용되어야 하며 해당 클래스를 확장한 자식 클래스가 사용될 수 없습니다.


4. Object 모델 변경

Object 클래스의 필드 값들이 private 속성으로 변경되었습니다. 이에 따라, Object 클래스의 Field 를 Reflection 패키지를 통해 접근하고 있는 경우 문제가 발생할 수 있습니다. 대표적으로 객체를 직렬화(Object Serialization) 하기 위하여, 특정 객체의 부모 클래스로 거슬러 올라가며 데이터를 확인하는 경우, 다음과 같이 Class.getSuperClass() 메서드가 java.lang.Object.class 를 반환 하는 경우 탐색을 멈춰야 합니다. 이전과 달리 null을 반환할 때 까지 반복문을 도는 경우 오류가 발생할 수 있습니다.
Class.getSuperclass() == java.lang.Object.class


중복된 커스텀 퍼미션 선언 이슈

안드로이드 5.0 에서는 특정 커스텀 퍼미션은 오직 하나의 앱 혹은 해당 앱과 동일한 사인키를 이용해 사인된 앱에서만 선언할 수 있도록 변경되었습니다. 이 원칙에 따라, 만일 이미 동일한 이름의 커스텀 퍼미션을 선언한 앱이 단말에 설치되어 있다면, 같은 이름의 퍼미션을 선언하고 있는 다른 앱은 디바이스에 설치될 수 없습니다.
<permission android:name= "com.example.gcm.permission.C2D_MESSAGE"
  android:protectionLevel="signature" />

따라서, 위와 같이 일반적이거나 다른 예제 코드에서 따온 퍼미션 이름을 사용하는 경우 문제가 발생할 수 있습니다. 이 변경 사항은 메니페스트의 targetSDK 버전과는 관계없이 일괄적으로 적용되며, 따라서 앱 개발자 분들은 다음과 같은 사항을 꼭 확인해 보셔야 합니다.


  • 커스텀 퍼미션을 사용하고 있다면, 해당 퍼미션이 어디서 부터 유래한 것인지, 그리고 정말 필요한 것인지 고민해야 합니다. 여러분의 앱의 특정 기능을 제공하기 위해 꼭 필요한 경우가 아니라면 모든 <permission> 태그를 삭제하는 것이 좋습니다. 
  • 가능한 경우 여러분의 커스텀 퍼미션을 시스템 기본 퍼미션으로 대체하는 편이 좋습니다.
  • 커스텀 퍼미션을 꼭 사용해야 하는 경우 해당 퍼미션의 이름이 다른 앱에서 선언한 퍼미션 이름과 동일하지 않도록 이름을 잘 지어야 합니다. 예를 들어 여러분 앱의 패키지 이름을 활용할 수 있습니다.
  • 만일 여러 앱을 묶음으로 제공하며, 각각의 앱들간에 특정 기능을 공유하기 위해서 커스텀 퍼미션을 활용하고 있다면, 모든 앱들이 동일한 사인키로 사인되도록 주의를 기울이거나 아니면 커스텀 퍼미션이 오직 한 번만 선언되도록 잘 관리해야합니다.

커스텀 퍼미션의 중복 사용 문제에 관한 보다 자세한 내용은 안드로이드 개발자 사이트의 Uniqueness Requirement for Custom Permissions 항목을 참고하시기 바랍니다.


서비스 바인드는 명시적 인텐트만을 사용해야 합니다.

안드로이드 5.0 부터 서비스에 바인드 하기 위해서는 반드시 명시적 인텐트를 사용해야 합니다. 만일 암시적 인텐트를 이용해 bindService() 를 호출하는 경우 예외가 발생할 수 있습니다.
Intent intent = new Intent(this, LocalService.class); bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
Intent intent = new Intent(MY_BIND_ACTION_STRING); bindService(intent, mConnection, Context.BIND_AUTO_CREATE);




무엇이든 함께할 동료, 친구가 있다면 재미가 배가 됩니다. Developing Android Apps 코스를 함께 할 스터디 그룹 멤버에 지원하세요! 안드로이드 플랫폼의 기능을 잘 활용하면서도 유니크한 앱을 만들어 보고 싶었다면, 스터디에 참여하고 싶지만 도우미로 활동하기에 개발 경험이 부족해 망설이셨다면, 바로 지금 스터디 멤버로 참여해 보세요! 자세한 설명은 이전 포스팅 을 참조하세요.

*코스 수강은 무료입니다. Access Course Materials이 수강 메뉴이며 비디오와 예제를 모두 보실 수 있고 강사의 1:1 코칭, 프로젝트 리뷰만 유료입니다.


일정


  • 11월 20일 : 스터디 그룹 멤버 모집 마감 
  • 11월 21일~30일 사이 : 킥오프 전체 모임 
  • 12월 1일 - 1월 11일 : Developing Android Apps 코스 진행 (중간 모임 있을 예정) 
  • 1월 12~18일 사이 : 해커톤 (@구글 코리아) 


스터디에 참여하면


  • 함께 Developing Android Apps 코스를 수강하며 학습에 도움을 받을 수 있는 기회입니다. 
  • 스터디에 직접 참여하지 못한 다른 커뮤니티 멤버들에게도 스터디 내용을 공유하고 도움을 줄 수 있습니다. 
  • 코스를 모두 수료하시면 구글에서 제공하는 기념품을 받으실 수 있습니다. 
  • 구글 코리아에서 진행되는 해커톤에 참여하실 수 있습니다. 


Udacity-Developing Android Apps 스터디 그룹멤버 지원하기



무엇이든 함께할 동료, 친구가 있다면 재미가 배가 됩니다. 구글에서는 전세계 개발자들을 대상으로 Developing Android Apps 코스를 함께 할 스터디 그룹을 모집하며, 여러분이 더욱 깊이 있는 개발 경험을 공유할 수 있도록 돕고자 합니다. 안드로이드 플랫폼의 기능을 잘 활용하면서도  유니크한 앱을 만들어 보고 싶은 경험이 있었던 개발자라면, 여러분의 커뮤니티 멤버들과 함께 실력을 업그레이드 할 수 있는 기회를 놓치지 마세요.


*스터디 참여 대상 : 안드로이드 초급 이상 개발자





Developing Android Apps 코스는 올바른 방식으로 뛰어난 안드로이드 앱을 만들 수 있도록 해주는, 이론과 예제가 혼합된 수업 코스입니다. 이 코스에서는 단계별로 안드로이드 앱을 구축하는 과정을 배울 수 있으며, 모바일 개발에 가장 적합한 예시들을 볼 수 있습니다.


스터디 진행 방식

스터디 그룹은 온라인으로 Developing Android Apps 수업을 수강한 뒤, 일주일에 한 번 오프라인에 모여서 함께 스터디를 진행해야 합니다.
  • 스터디 형식
수업 코스는 일주일 단위이며 그룹원들은 그 주에 해당하는 수업을 각자 수강 완료한 후, 오프라인 모임에서 수업 내용에 대해 이야기를 나누고 과제를 수행합니다. 스터디 내용은 스터디 도우미와 함께 진행 됩니다.
  • 스터디 일정
  • 11월 10일 : 스터디 도우미 모집 마감
  • 11월 14일 : 스터디 도우미 최종 확정
  • 11월 23일 : 스터디 그룹 멤버 모집 마감
  • 11월 24일~30일 사이 : 킥오프 전체 모임
  • 12월 1일 - 1월 11일 : Developing Android Apps 코스 진행
  • 1월 12~18일 사이 : 해커톤 (@구글 코리아)


스터디 그룹에 참여하면

  • Developing Android Apps 코스를 수강하며 학습에 도움을 받을 수 있는 기회입니다.
  • 스터디에 직접 참여하지 못한 다른 커뮤니티 멤버들에게도 스터디 내용을 공유하고 도움을 줄 수 있습니다.
  • 코스를 모두 수료하시면 구글에서 제공하는 기념품을 받으실 수 있습니다.
  • 구글 코리아에서 진행되는 해커톤에 참여하실 수 있습니다.


스터디 도우미에 지원하세요!

스터디 도우미는 스터디 멤버들을 도와  활발한 모임을 촉진하는 역할입니다. 직접 스터디 도우미가 되어 스터디 그룹을 만들고, 커뮤니티 멤버들의 성장을 도와 주세요.

스터디 도우미가 되려면
  • 6주 동안 열정적으로 스터디에 참여하실 수 있는 분
  • 스터디 진도에 한 주 앞선 스터디 도우미 모임에 참여가 가능한 분 (스터디 도우미 모임에는 행아웃 비디오 채팅으로도 참여 가능)
  • 안드로이드 앱 개발 경험이 있는 분


스터디 도우미가 하는 일
  • 스터디 그룹을 만듭니다
주변 사람들 및 온/오프라인 커뮤니티에서 자율적으로 스터디 그룹을 꾸리실 수 있습니다. 스터디 그룹을 만든 뒤 위의 지원 양식에서 도우미로 지원하시면 됩니다.
이미 구성되어 있는 스터디 그룹이 없어도, 도우미에 먼저 지원하신 다음 약 일주일간 그룹을 만들 시간이 있으니 그룹이 없어도 스터디 도우미에는 지원하실 수 있습니다.
한 그룹의 최소 인원은 5명 정도가 적당하며, 그룹의 최대 인원에는 제한이 없지만 도우미는 5명 당 도우미 1명 가량의 비율로 있는 것이 좋습니다.
  • 스터디 그룹을 도와줍니다
스터디 도우미는 그룹원들보다 한 주 먼저 코스를 수강한 뒤 스터디 그룹원들을 지도해야 합니다. 구글에서 스터디 도우미들을 도와 가이드와 자료를 제공할 예정입니다.

스터디 도우미 혜택
  • 6주 동안의 스터디를 모두 수료한 그룹의 스터디 도우미에게는 두 달간 Udacity의 모든 코스를 튜터의 지도와 함께 들을 수 있는 프리미엄 이용권(본래 한 달 이용료 $199)을 드립니다.
  • 도우미들에게는 별도의 선물이 제공됩니다.
  • 구글과 협업하여 안드로이드 플랫폼의 기능 활용을 더 깊게  배울 수 있는 기회입니다.


스터디 도우미 지원하기 goo.gl/forms/7nGsySiDp7

Posted by Eiji Kitamura - Developer Relations Team

최근 공개된 I / O Bytes 2014 시리즈의 Polymer 관련 동영상 한국어 자막이 추가되었습니다. 동영상의 설정에서 자막 언어를 한국어로 설정하시면 한국어 자막과 함께 영상을 보실 수 있습니다. Polymer Web Components 편리하게 사용할 수 있도록, 라이브러리에서 지원하지 않는 브라우저에서도 Web Components(웹 컴포넌트)를 이용할 수 있게(Polyfill) platform.js (webcomponents.js 명칭 변경 예정)를 포함하고 있습니다. 또한 Polymer를 사용하여 웹에서도 편리하게 Material Design를 구현할 수 있습니다.





Web Components 개요, Polymer 요소의 개발 방법을 설명해 드립니다. seed-element에서 npm이나 bower 사용하여 다른 요소를 이어 받는 방법, Flexbox 레이아웃의 이용 방법, GitHub 공개하는 방법까지 소개 됩니다.






Google Polymer 사용하여 Google API 이용하는 요소들을 제작하고 있습니다. 중에서  <google-map> <google-sheets> 을 소개하여 Polymer Web Components 편리함을 알려 드립니다.






반응형 디자인에서 툴 바, 작은 메뉴 바를 모으는 UI 자주 사용됩니다. 비디오에서는 Polymer <core-media-query> 사용하여 어떻게 이것을 구현하는지 설명합니다.






누구나 웹 디자인에 쉽게 접근할 수 있어야 합니다. 이 비디오에서는 Polymer를 사용한 키보드 탐색, WAI-ARIA를 사용한 어시스트, 색상에 관계없이 쓸 수 있는 디자인 등에 대해 소개합니다.

여러분이 Polymer를 사용해 멋진 응용 프로그램을 제작하는 것을 기대하고 있겠습니다.


By Roman Nurik, Design Advocate

머티리얼 디자인이 안드로이드에 찾아옵니다. 안드로이드 롤리팝 플랫폼과 시스템 앱들은 머티리얼 디자인 원칙에 따라 디자인되었습니다. 다음 주 부터 실제 사용자들을 대상으로 롤리팝 이미지가 OTA 형태로 배포될 예정이며, 사용자들은 새롭게 업데이트 되는 구글 플레이 뉴스 스탠드, 구글의 새로운 인박스 앱, 텀블러 와 같은 앱을 통해 머티리얼 디자인을 직접 체험 할  수 있게됩니다. 지금 이 순간, 개발자 분들은 앞 서 공개된 안드로이드 5.0 SDK 와 최신 버전의 AppCompat 호환 라이브러리에 포함된 머티리얼 관련 기능들을 활용할 수 있고, 디자이너 분들을 위해서는 포토샵, 일러스트레이터, 스케치 템플릿이 공개되어 있습니다. 네. 그렇습니다. 마침내 여러분의 안드로이드 앱에 머티리얼 디자인을 적용할 때가 됐습니다! 

그럼 지금부터 어떤식으로 머티리얼 디자인을 적용할 수 있는지 알아 보겠습니다.

아래의 정리된 항목들을 살펴 보시면,  어떤 요소들을 적용하여, 머티리얼 디자인 시스템을 구현할 수 있는지 알 수 있습니다. 각 항목은 머티리얼 디자인의 4가지 주요 측면에 따라 4개의 키워드로 나눠져 있습니다. 그 중에서 ‘주요 원칙’ 으로 분류된 것들을 적용하고, 일반적인 안드로이드 디자인 가이드라인을 잘 준수하신다면, 최고로 멋진 머티리얼 디자인 앱을 만드실 수 있습니다.



입체적인 표면


'UI 를 구성하는 표면('디지털 종이')들은 다양한 높낮이를 가질 수 있으며, 각각의 표면 뒤에는 그림자가 생깁니다.'


  • 주요 원칙: 그림자는 어떤 구성 요소가 다른 것 보다 앞에 있는지 나타내기 위해 사용되며, 사용자가 전체 UI의 계층을 쉽게 파악할 수 있도록 돕습니다. UI에서 깊이와 레이어를 만드는 법에 대해서는 여기를 참조하세요.
    • 코드: 안드로이드 5.0에서는 android:elevation 속성과 android:translationZ 속성을 이용해 그림자를 표현할 수 있으며, 이전 버전에서는 PNG 형식의 이미지 리소스를 대신 활용할 수 있습니다.

<표면 과 레이어링>
  • 표면과 그림자의 구조는 일관성있게 유지되어야합니다. 하나의 그림자는 하나의 표면을 나타내며, 표면은 명확한 이유와 목적을 갖고 생성되어야 합니다.
  • 하나의 화면은 10개 미만의 표면으로 구성되는 것이 좋습니다. 화면 구성이 너무 복잡하지 않아야 하며, 너무 많은 중첩은 피하는 것이 좋습니다.
  • 특정 콘텐츠가 화면 끝이나 다른 표면 아래로 스크롤되는 경우, 해당 콘텐츠를 담는 표면 자체가 움직이고 있다고 알 수 있도록, 화면 가장자리나 표면 아래에 그림자를 표시합니다. 다시 말해, 표면 위에 콘텐츠(잉크) 자체가 스크롤 되는 경우는 거의 없으며, 항상 표면 자체가 스크롤 되어야합니다.
    • 코드: ListViewScrollViewandroid:clipToPadding 속성을 false 로 설정 합니다.
  • 단순한 단색으로 칠해진 표면을 사용합니다.





대담하며 인쇄물의 특징을 같는 디자인


"디지털 종이에 그려지는 '디지털 잉크'는 전통적 인쇄물 디자인과 같이, 대담한 색상과 텍스트, 상황에 맞는 이미지, 구조적인 여백과 같은 특징을 갖습니다."



    <주요색과 강조색이 지정된 머티리얼 테마>

  • 주요 원칙: 앱의 브랜딩을 위해 색상 팔레트가 주의깊게 선정되어야 하며, 표면의 배경과 텍스트 뷰, 체크박스와 같은 주요 UI 위젯에는 기본 색 (primaryColor) 과 강조 색 (accentColor)이 일관되게 사용되어야 합니다. 두 색은 대비를 이루어야 하며, 예를 들어 기본 색이 짙은 파랑일 경우 강조 색은 네온 핑크색이 사용될 수 있습니다. 특히, 동그란 액션 버튼 (FAB), 선택된 탭, 폼 필드 등 주요 UI 요소들이 눈길을 끌 수 있도록 대비도가 높은 색상을 사용하는 것이 좋습니다.
    • 코드: 테마에 새로운 colorPrimarycolorAccent 속성이 추가되었습니다. AppCompat 라이브러리를 사용하는 경우 더 이상 android 네임스페이스를 사용하지 않아도 되며, 롤리팝 이전 기기에서 자동으로 텍스트 필드, 체크박스 및 기타 다른 요소들의 색이 지정됩니다.


  • 주요 원칙: 안드로이드 5.0에서 상태 바는 앱의 기본 색상 혹은 현재 스크린에 표시되는 콘텐츠의 색상에 맞추어 변경되어야 합니다. 화면을 꽉 채우는 이미지가 사용되는 경우, 반투명 상태바를 활용할 수 있습니다.
    • 코드: 테마 요소에서 colorPrimaryDark 혹은 statusBarColor 속성을 설정합니다. Window.setStatusBarColor 메서드를 활용할 수도 있습니다.
  • 주요 원칙: 앱 내의 아이콘은 시스템 아이콘 가이드라인을 따라야 하며,  머티리얼 디자인 아이콘 세트를 활용할 수 있습니다.
  • 아이콘, 사진, 텍스트 및 기타 표면 위에 위치되는 요소들은 '잉크' 요소입니다. 잉크 요소는 그림자를 갖지 않으며, 그라디언트 칼라를 사용하지 않습니다.
  • 이미지에서 추출된 색상을 인접한 UI 요소 혹은 표면의 배경색으로 사용할 수 있습니다. 
    • 코드 : Palette 라이브러리를 사용해 손쉽게 이미지에서 유용한 칼라 셋을 추출할 수 있습니다.
  • 사진의 경우 시스템 상태바를 포함, 화면을 꽉 채우는 형식으로 표시합니다. 예를 들어 세부 사항을 나타내는 화면의 경우, 이미지 주변에 테두리를 그리지 않고 화면을 전부 활용해이미지를 표시합니다. 가능한 경우 앱 바와 상태 바 뒤 공간도 활용합니다.

    • 코드: 새로운 Toolbar 위젯 (AppCompat 라이브러리에 포함) 을 투명하게 설정하고, 레이아웃에 직접 배치할 수 있습니다. 상태 바를 설정하는 방법은 Stack Overflow 의 포스트를 확인해 보세요.
<세 종류의 키라인>
  • 주요 원칙: 가능한 경우, 본문 텍스트, 썸네일, 앱 바 제목 등의 요소들은 세 종류의 키라인에 맞추어 정렬되어야 합니다. 스마트폰에서는 왼쪽 부터 16dp 와 72dp, 그리고 오른쪽 부터 16dp가 기준입니다. 태블릿의 경우에는 24dp 와 80dp 키라인이 사용됩니다.
  • 모든 UI 요소들은 8dp 단위의 베이스라인 그리드를 기준으로 정렬 됩니다. 예를 들어 앱 바의 높이는 스마트폰의 경우 56dp 이며 태블릿에서는 64dp 입니다. 패딩과 여백은 8dp, 16dp, 24dp 등의 값을 가질 수 있습니다. 텍스트의 경우는 조금 더 세밀한 4dp 그리드가 사용됩니다.









의미있는 모션


"주의 깊게 사용된 모션은 사용자에게 앱의 상태에 관한 시각적 연속성을 제공하며, 사용자가 UI에서 일어나고 있는 일을 쉽게 알아 챌 수 있도록 돕습니다. 또한, 작지만 세밀하게 표현된 전환 효과들은 즐거움을 줄 수도 있습니다."



<Hero 전환 애니매이션>

  • 일반적으로 UI 와 콘텐츠 요소는 갑자기 나타나거나 사라지지 않으며, 자신의 위치로 자연스럽게 이동해야 합니다. 각 요소가 함께 움직일 수도 혹은 각각의 요소가 따로 따로 움직일 수 있습니다.

  • 주요 원칙: 어떤 아이템을 클릭하여 상세 화면으로 전환되는 경우, 옆의 그림과 같이 선택 된 아이템이 목록 화면에서 상세 화면으로 자연스럽게 전환되는 'Hero 전환' 을 적용합니다.
    • 코드: 안드로이드 5.0 SDK에서는 이를 지원하기 위한 shared element transitions API 가 포함되어 있습니다. 서포트 라이브러리의 FragmentTransaction 에도 이를 위한 몇 가지 기능이 포함되어 있습니다.


  • 주요 원칙: 잔물결 효과 는 터치가 일어난 자리에서 시작되며 아이템에 터치가 되었다는 피드백을 주기 위해 사용됩니다.
    • 코드: 플랫폼에서 기본으로 제공 하는 android:selectableItemBackgroundandandroid:selectableItemBackgroundBorderless 리소스에는 잔물결 효과가 포함되어 있습니다. 혹은 5.0 에서 새롭게 추가된 RippleDrawable을 사용해 개발자 여러분이 직접 해당 기능을 구현할 수 있습니다. 아쉽지만, 안드로이드 5.0 이전 버전에서는 잔물결 효과가 지원되지 않습니다.
  • 주요 원칙: UI 요소는 원형의 '나타나기(reveal)' 애니메이션을 사용해 나타납니다.
    • 코드: 이 문서를 참고하거나 ViewAnimationUtils 클래스를 확인해 보세요.
  • 주요 원칙: 애니메이션은 아이콘 상태 전환 혹은 텍스트 전환 등 좀 더 섬세하고 재밌는 방법으로 사용될 수 있습니다. 예를 들어 + 형태의 아이콘을 x 형태로 변신시키거나, 외곽선만 있는 하트 모양 아이콘에 칠하기 효과를 이용해 색을 채울 수도 있습니다.
    • 코드: 아이콘 전환은 새로운 AnimatedStateListDrawable과 이에 상응하는 XML 요소를 통해 구현될 수 있습니다. Google I/O 앱의 소스를 살펴보시면 내용을 확인하실 수 있습니다. 또한, 새롭게 벡터 아이콘 애니메이션 도 지원됩니다.
  • 일반적으로 애니메이션 과 전환효과는 300ms 이하의 빠른 속도로 이루어져야 합니다.
  • 하위 아이템을 탐색할 때는 세로 방향의 슬라이드를 앱 내비게이션을 위해서는 가로 방향의 슬라이드 전환 효과를 사용할 수 있습니다. 슬라이드 전환 시에는 단순한 선형의 모션을 활용하고, 빠른 가속 효과와 부드러운 감속 효과를 추가할 수 있습니다. 머티리얼 디자인의 모션 스펙은 여기에서 확인하실 수 있습니다.




적응형 디자인과 UI 패턴


"입체적 표면, 대담한 그래픽 디자인, 의미있는 모션은 핸드폰, 태블릿, 랩탑, 데스크탑, TV, 웨어, 자동차까지, 어떤 스크린에서든 통일성 있는 사용자 경험을 제공하기 위해 어우러져야 합니다. 또한 아래에 있는 주요 UI 패턴들은 앱이 디바이스를 넘나들며 일관되게 유지되어야 합니다."



<FAB - Floating Action Button>

  • 반응형 디자인이 적용된 가장 좋은 사례화면의 크기와 회전 여부에 따라 앱의 UI 가 알맞게 변경되는 것 입니다. 태블릿 최적화에 관한 보다 자세한 내용은 태블릿 앱 체크리스트를 확인해 보세요. 또한, 이 블로그 포스트에서는 태블릿 최적화에 관한 추가적인 팁을 얻으실 수 있습니다. 
    • 상세 화면은 'Hero 전환' 효과와 함께 팝업 형태가 사용됩니다.
    • 여러개의 창으로 구성된 경우, 하나 이상의 앱 툴바를 활용해, 연관된 콘텐츠 가까이에 적절한 액션을 배치할 수 있습니다.
  • 주요 원칙: 가능한 경우, 앱은 동그란 형태의 플로팅 액션 버튼을 사용해 주요 액션을 나타낼 수 있습니다. 플로팅 액션 버튼은 그림자를 갖는 별 개의 표면이며, 배경색으로는 밝은 계통의 강조 색을 사용하는것이 일반적 입니다. (위 내용 참조). 보내기, 작성하기, 추가하기, 검색하기 등의 기본 액션을 표시하며 다른 표면들보다 보통 8dp 상승되어 있습니다. 주로 스크린 오른쪽이나 두 표면이 만나는 가장자리 가운데에 위치시키는 것이 일반적입니다. 

앱 바 (액션 바)


  • 주요 원칙: 일반적인 표준 안드로이드 앱 바 (액션바)를 사용하시면 됩니다. 앱 바는 앱 아이콘 대신 색상과 타이포그라피를 통해 앱의 브랜드를 나타낼 수 있습니다. 앱 바는 그림자를 갖고 있으며, 보통 4dp 상승되어 있습니다.
    • 코드: 안드로이드 5.0의 새로운 Toolbar 위젯을 사용합니다. 최신 버전의 AppCompat 라이브에는 모든 플랫폼 버전을 지원하는 android.support.v7.widget.Toolbar 가 제공되고 있습니다.
  • 앱 바는 표준 앱바의 세로 길이 보다 2배 혹은 3배 길게 디자인 될 수 있습니다. 화면이 스크롤 됨에 따라 앱바의 크기가 자연스럽게 표준 크기로 줄어 들도록 구현 할 수 있습니다.
  • 앱 바는 경우에 따라 완전히 투명하게 디자인 될 수도 있으며 텍스트와 액션을 갖고 이미지 위에 위치할 수 있습니다. 구글 플레이 뉴스스탠드 앱이 이러한 방식으로 구현되었습니다.
  • 앱 바에 표시되는 제목은 두 번째 키라인에 맞춰 정렬되어야 합니다. (키라인에 대한 내용은 위의 내용 참조)
    • 코드: Toolbar 위젯의 android:contentInsetStart 속성을 사용할 수 있습니다.
  • 필요한 경우, 콘텐츠를 위한 공간을 더 확보할 수 있도록 스크롤을 올릴 때 앱 바가 사라지고, 다시 아래로 스크롤하면 앱 바가 나타나도록 구현할 수 있습니다.

<머티리얼 디자인 탭>

  • 주요 원칙: 탭은 머티리얼 디자인의 새로운 상호작용과 스타일 가이드를 준수해야 합니다. 탭 사이에는 구분선이 없으며 최상위 탭은 시각적으로 앱 바의 일부처럼 보이게 디자인 되어야 합니다. 
    • 코드 : SlidingTabsBasic SDK의 샘플 코드를 확인하거나 Google I/O 앱 소스를 참조 할 수 있습니다. ("My Schedule" 섹션을 확인해 보세요)
  • 사용자가 스와이프를 통해 탭을 전환 할 수 있어야 합니다.
    • 코드: 서포트 라이브러리에 포함된 ViewPager 위젯을 사용할 수 있습니다.
  • 선택된 탭은 전경색의 변화와 탭의 텍스트 혹은 아이콘 밑의 강조 색상(colorAccent)의 구분선으로 구분됩니다.

네비게이션 드로어

<머티리얼 디자인이 적용된
네비게이션 드로어>

  • 주요 원칙: 네비게이션 드로어를 사용하는 경우, 옆의 그림과 같은 새로운 머티리일 디자인 가이드라인을 준수해야 합니다. 드로어는 앱바 위 그리고 반투명한 스테이터스 바 아래에 위치해야 합니다
  • 주요 원칙: 안드로이드 5.0 에서 앱 바에서 가장 왼쪽에 있는 아이콘은 네비게이션 드로어 표시 이며, 앱 아이콘은 사용되지 않습니다. 개발자 여러분이 원하는 경우, 이전 버전의 플랫폼에서는 기존 안드로이드 4.0 에서처럼 앱 아이콘과 더 좁은 형태의 드로어 아이콘을 사용할 수 있습니다.
    • 코드 : 서포트 라이브러리의 DrawerLayout 위젯을 사용해 새로운 툴바 위젯과 함께 드로어를 구현하세요. 다음 Stack Overflow 포스트에서 더 자세한 정보를 보실 수 있습니다.
  • 드로어의 표준 너비는 스마트폰에서는 320dp를 넘기지 않으며 태블릿에서는 400dp를 넘기지 않습니다. 최소 너비는 스크린 너비에서 표준 툴바의 높이를 뺀 값보다 더 적지 않은 것이 좋습니다. (넥서스5에서 360dp - 56dp = 304dp)
  • 드로어에 있는 아이템의 높이는 기본 그리드 라인을 따릅니다. 각 열은 48dp 높이를 갖으며, 리스트 섹션 위는 8dp 의 여백을, 각 열을 구분하는 구분선 위 아래에도 8dp 여백을 남겨둡니다.
  • 텍스트와 아이콘은 위에 설명된 키라인을 따라 배치됩니다.
구글에서 제공하는 앱을 포함하여 점점 더 많은 앱들이 머티리얼 디자인으로 업데이트 될 예정입니다. 2014년 겨울은 안드로이드 디자인에 있어서 큰 지표가 될 것 입니다. 디자이너 분들을 위한 머티리얼 디자인에 대한 더 다양한 내용을 DesignBytes 시리즈에서 확인하실 수 있습니다. 개발자 분들은 머티리얼 디자인으로 앱 만들기 문서를 참조하실 수 있습니다.