레이블이 google i/o인 게시물을 표시합니다. 모든 게시물 표시
레이블이 google i/o인 게시물을 표시합니다. 모든 게시물 표시

2017년 7월 2일 일요일

Google I/O 2017 Extended in Seoul

Google I/O 2017 Extended in Seoul에 다녀옴.



거의 자발적으로 행사를 진행하는 것 같아 이런 행사가 매년 있음에 감사하다.
비록 외부 시스템으로 인한 등록 이슈, 애매한 시간 공지가 있긴했지만
전반적인 진행과 내용도 다 괜찮았던 것 같다. 발표자에 따라서 좀 차이는 있지만..

행사 주소
https://io-extended-seoul-17.firebaseapp.com/

발표 세션들
https://io-extended-seoul-17.firebaseapp.com/schedule/


Google I/O 주요 내용이야 기사를 통해서 알 수 있겠지만
이런 행사를 통해서 한번에 직접 들으면서 정리를 하는게
게으른 나에게는 큰 도움이 되고 있다.

대충 적어두고 아 그렇구나 하고 말겠지만
아무것도 몰라서 사용하지 못하는 것보다
대충은 알고 있다가 필요할 때 바로 가져다 쓸 수 있는것도 유익하다.


주로 관심이 많았던 Track A를 듣다가 내게 필요한 부분만 대충 정리함.
아래 사이트에 동영상이 올라와 있어 이를 보는게 좋겠음.
https://www.youtube.com/playlist?list=PLF_OUznA3RTRSTDdjnlzyC-rKVq6nq4S7


[Architecture Components, 김상일]


Google IO 2017에서 첨 소개됨.
함께 아키텍처 가이드가 제공되고 있음
https://developer.android.com/topic/libraries/architecture/index.html

4가지로 구분
. Handling life cycle
. Live data
. ViewModel
. Room

추후 support library로 나올 예정

=Handling life cycle
. Lifecycle, Lifecycle owner, Lifecycle observer로 구성
. Observer 구현하고 등록 삭제하여 사용하면 됨.
. Custom Activity를 사용하려면 owner를 직접 구현하면 된다.

=Live data
Live Data = Observeable data holder
Live data 상속 시 onActive(active onserver가 있을 때). OnInactive(active onserver가 없어질 때)를 구현해야 함.
: https://developer.android.com/topic/libraries/architecture/livedata.html 설명이 명확하지 않았는데 구글 문서를 봐도 명확하지 않음.

=Viewmodel
. View가 변경되어도 configuration을 유지할 수 있음.
. Androidviewmodel은 Viewmodel과 달리 application instance를 인자로 받으므로 필요하면 선택해서 사용하면 된다.
. ViewModel은 뷰와 생명주기가 다르므로 메모리릭 등을 유의해야 함.
 : View, Activity context, Resources를 참조하면 안 됨

=Room

Sqlite ORM이며 아래 클래스로 구성
. Entity
. DAO
. Database

Entity 선언 시 어노테이션 필요
: class내 pojo class들을 의해 embedded 어노테이션 제공
: typeconverter 제공

. DAO interface는 쿼리 작성을 할 수있음.
 : Insert, delete, update는 기본 쿼리로 제공
. Database =sqlite open helper


Data insert는 main thread에서 불가. 런타임 에러 발생

.RXjava vs lifecycle
 : Lifecycle은 rxjava를 잘 사용하고 있다면 굳이 변경할 필요 없고 간단하게 적용해보고자 할 경우


.Room vs greenDAO vs realm
 : Realm이 가장 성능도 좋고 지원하는 feature가 많음(relation지원 강력).
 : Room은 아직 초반이고 feature도 부실한 상황임.

[Kotlin: Make Android Great Again, 김태호]


2011년부터 시작하여 2016년 1.0 공개 2017년에 공식 안드로이드 언어로 추가됨.

Java 1.8은 jack toolchain을 사용하면 가능
https://developer.android.com/guide/platform/j8-jack.html?hl=ko
Retro lamda를 사용하는 것도 방법

안드로이드 기기도 바뀌고
IDE도 바뀐 상태에서
언어는 java 그대로임.

Kotlin에서는
. 람다 지원, it으로 single argument생락 가능
. No getter.setter > property 지원
. Builtin  nullable check > ?
. ?. 지원
. 타입 선언 필요 없음.
. Kotlin android extension응 사용하면 findviewby... 사용할 필요없음.
. Intent도 Anko을 사용하면 간편함
  : https://blog.jetbrains.com/kotlin/2015/05/advanced-features-of-anko/
. Pair > to 사용
. Data class에는 getter setter equal 등을 자동 생성
. 자바코드를 코틀린 코드로 변환해주는 플러그인 있음.

[주의]
. 새로운 코틀링 문법이 최적이 아님
. 자바에서 넘기는 객체는 주의해서 보자.
. 메서드 카운트가 늘어나 multi dex 사용 시 주의

[장점]
. 코드 안정성
. LOC 감소
. Swift. scala 같은 새로운 언어에 적응 가능


[Application 용량줄이기 플레이윙즈 실적용을 중심으로, 신호석]


. Download size < Installed size
. 평균적잉 앱 사이즈큰 23M (Android 12M iOS 34M)
. 플레이윙즈 광고.. 성공적

어플 용량 분석 툴은 Android Studio의 Analyze APK를 사용하면 됨.
 : 용량 분석. Manifest 분석. Apk 비교 분석
 . Android Studio 3.0에서는 프로가드 난독화 확인 가능

줄이는 방법
1. Proguard
 . 코드 난독화
 . 코드 최적화
  : dead code elimination
  : resource shrinking

2. Vector drawables
 . 해상도별 이미지 말고 하나의 벡터 이미지로 모든 해상도 대응
 . support library 사용 필요. App:srcCompat 사용 필요.
 . sketch를 사용하여 벡터 이미지 제작하는 것을 추천
 . 안되면 png 용량을 줄여라.
 . Android Studio 3.0에서는 WebP변환 기능을 제공한다. (단 API 16.18제약)

3. Exclude space translation
 . 번역 중 비어있는 문자열들을 찾아서 주언어를 기준으로 압축함.

4. Set specific circumstance
 . 지원하는 해상도로만 추릴 수 있음.

5. Use downloadable fonts
 . font family에서 downloable google font들을 사용.
 . 구글 downloadble fonts sample앱이 있음.
 . 단 아직은 잘 안되더라...

시간 대비 효과적인 방법을 찾아보는 것이 필요함.

. 시간 대비 Proguard 적용 효과 있음.
. Exclude space translation도 해볼 만 함.
. Vector drawable 효과 좋음


. 벡터 이미지로 변환 시 해상도 제약이 있으니 확인 필요.
. 일러 사용으로 svg 추출 시 문제가 생겨 스케치를 사용함.
. 5.0에서 벡터 이미지 사용 시 메모리 릭이 있었으나 현재 테스트 중에서는 아직 발견되지는 않았음.
. Downloadable fonts 테스트 시 Play service v11 이상이어함.


[아주 주관적인 안드로이드 O 살펴보기, 양찬석]


주요기능은 좀 찾아보면 나올 거고..

. 현재 DP3. API 종료.
. Q3에 정식 릴리즈

http://d.android.com/preview

. 안드로이드 업데이트가 좀 자주 있긴 하지만
 더 좋은 안드로이드를 만들기 위해
 안드로이드 플랫폼 및 하위 layer들도 함께 업데이트하기 위함임

플랫폼에서 향상된 기능들

.런타임 업데이트
 : dex파일 layer 최적화
 : Forground 앱에대한 concurrent compaction, read barrier based GC
   > 적은 메모리. 빠른 메모리 할당. 부드러운 앱
 : project treble
   . 안드로이드.업데이트가 느린 것을 위한 프로젝트
   . 안드로이드 3단 분리(앱.프레임워크>앱.벤더인터페이스.프레임워크)
   . VTS (vender Test Suite)응 통과하면 안정성 보장됨
   . 안드로이드 O부터 시작

사용자에게 더 좋은 경험
.구글 플래이 프로텍트
 : Android O, 최신 플레이스토어 설치 시 사용 가능
.PIP지원
 : resizable activity를 지원했었어야 했지만...이젠 상관 없는듯?
. Autofill framework 지원
. Alert window
 : 다른 앱위에 경고창을 띄울 수 있음
 : type_application_overlay 윈도우 타입 추가
  . 시스템 layout 아래에서만 표시됨
  . 상단 notification창에 어떤 앱이 띄우는지 확인 가능함.

알림
. 알림 종류에 따른 배치 (중요한 알림 순으로)
. 알림 채널 (개별 알림별 설정>채널별 설정)
. 알림 표시 점(dot)
 : 채널별. 롤프래스로 알림 확인


개발자를  위해
.Android Studio 3.0
.Emulator
 : google play 탑재 바이너리 추가, 단 루팅 불가
.Kotlin
.Instant app
.architecitre component
.android support library 26
.폰트 리소스
.폰트 다운로드 by font provider

우리 모두를 위해
. Android vitals (d.android.com/vitals)
 : 플레이스토어에 메뉴가 추가 되어 있음.
 : anr, crash rate
 : 느린 렌더링, 프레임 멈춤
 : stuck wake lock
 : wakeup


[파이어베이스 무엇 달라지나, 남상균]


듣기는 했으나...




2015년 7월 12일 일요일

Google I/O Extended 2015 서울, Android track

Google I/O Extended 2015 서울 참가 후
세션 내용 중 생각 나는 것 대충 정리

Google I/O Extended 2015 서울
: http://festi.kr/festi/2015-io-extended-seoul/

시간 : 2015년 7월 12일 13시~18시
장소 : 세종대학교 광개토관 컨벤션홀


안드로이드 track을 들었음.

- 구글 I/O 에서 전해진 새로운 안드로이드 소식들, 양찬석
 : http://www.slideshare.net/chansukyang/m-50490336?from_m_app=android

- Veni, Vidi, Built, 김용욱
 . 발표자료 : https://github.com/dalinaum/veni-vidi-built

- 안드로이드 측정 도구, 차영호

- Android Design Support Library, 김태호
 . 발표자료 : http://www.slideshare.net/jyte/20150712-support-designlibrary

* 아직 동영상은 안올라온듯 GDG Korea 쪽 참고하시길.


[듣다가 대충 기록한 것들]

* 자세한 것은 동영상이나 발표자료를 참고.
* 발로 메모한거라 오타 작렬.


[구글 I/O 에서 전해진 새로운 안드로이드 소식들, 양찬석]

참고로 상세한 내용은 아래 링크에서 확인 가능함.
: http://developer.android.com/intl/ko/preview/behavior-changes.html

[런타임 앱 권한]

- 기존에 설치 시 권한을 요청하고 일괄 승인 했던 것을
M target app에서는 이전처럼 manifest에 권한을 명시하더라도
권한을 사용할 때 사용자에게 다시 물어보도록 함.
또한 환경설정에서 앱별 권한을 설정할 수 도 있음.

- Runtime 시 개별적으로 권한을 요청 할 때 시스템 프로세스 상에서 권한 요청이 실행 됨.
- 액티비티 뿐만 아니라 서비스에서 Runtime시 permission 요청을 해야 할 수 있음.

- 콜백으로 사용자 응답 받게 되므로 기존 권한을 사용하던 부분을 callback trigger를 전후로 나눠 처리 해야 함.

- M 이전 Android 버전들 타겟 앱은 이전 방식 처럼 권한을 수락하게 됨.

- M 버전 기반 앱의 권한이 거부되면 안드로이드에서는 가짜 데이터를 제공할 예정이고 앱의 동작은 가늠할 수 없으므로 앱이 권한 거부 상황을 잘 처리하도록 만들어야 함.

- 권한이 변경되더라도 자동으로 업데이트 가능함. (설치 시 권한 수락이 필요 없으니)


[Doze, 엡 대기 모드]

Active -> In-active -> IDLE-Pending -> Sensing(유휴상태확인)
IDLE <-> IDLE maintenance

-대기모드에서는
. 네트워크 작업 불가
. 백그라운드 작업 불가
. Wake lock 무시
. Wi-Fi scan 멈춤

- 추후 GCM 을 통해 앱을 깨울 수 있게 하려 함.


[오토 백업]

25MB가 넘지 않으면 M 타겟 앱의 데이터가 사용자 구글 드라이브로 백업 됨.
추후 앱이 다시 설치 되면 기존 데이터가 업데이트 됨.

-백업 조건
. 백업은 24시간 내, 충전 중, 유후, Wi-Fi 연결
- M타겟일 때는 자동으로 백업
- XML 파일을 사용해 선택적 백업 가능

. 개인적인 생각으로 M은 사용자에게 도움이되는 방향으로 가는 것 같다.



[Veni, Vidi, Built, 김용욱]

* 발표 자료내 동영상이 좀 제대로 안나와서 초고수님이 좀 긴장을 하시며 발표를 하신듯.

- Gradle은 그루비를 사용 중
- Task 간 dependency 를 지정 할 수 있음.

안드로이드 gradle 에서

Build.gradle => 전체 빌드 설정
App/build.gradle => app 모듈 빌드 설정
Settings.gradle => Import app module

- JCenter vs Maven Central
. Maven central 은 최초 접곡시 다소 시간이 소요 되고 HTTPS 지원 안함. 모듈 올리기 어렵다.

- Type: exec를 상속 받고 PreBuild.dependsOn으로 지정하면 외부 스크립트 사용 가능

[New android plugin experimental]

- Gradle wrapper 앱 빌드 환경에서 버전 2.5로 변경하고 Build.gradle 변경

- App/build.gradle 에서
. Com.android.model.application 로 변경 됨 -> Component model mechanism의 영향
. 변수처럼 설정입력
. 설정명 들이 좀 변경 됨

[NDK support]
- Local.property에서 ndk.dir 추가

- Build.Gradle 에서
Android.ndk 명시, Android.productFlavors에 cpu 타입 명시 필요

- App/src/main/jni에 c 파일 추가


[Jack and Jill]

- Jack : java android compiler kit
- Jill : jack intermediate library linker

- Build.gradle에서 useJack = true 설정 하여 사용
- 다만 개발 중이라 빌드 안되는 앱이 있을 수 있음.
- 동영상에서 후반 질의 내용 중 마지막 질문을 빙자한 해명을 꼭 들어봐야 함.




[안드로이드 측정 도구, 차영호]

[New in Android studio 1.3]
중에서 측정 도구 관련 눈 여겨 볼것이
New Allocation Tracker, New Heap Dump Viewer, NDK 지원

Battery historian, Systrace

[Systrace]
Ftrace로 데이터 가져옴.
크로미엄 trace를 parse 및 ....

Pros
. Low overhead
. 여러 process의 데이터를 수집하므로 dependency 확인 가능

Cons
. 찗은 시간만 확인 가능 5초
. Specific category나 function만 track 가능

- Cmd 상에서는 Platform-tools/sustrace/systrace.py 로 실행, 단 Mac linux 에서만

- DDMS 에서는 아이콘 클릭

- tracing 가능한 Caregory
. Component life cycle
. View inflate, layout, draw
. OpenGL
. Audio camera
. Input event delivery
. Cpu scheduling
. Disk. Kernel. Workqueue 등, 단 Android를 직접 빌드했다면 가능함.

Platform tool r23에서 많이 개선 됨
.프로세스별 그룹핑
. Interaction lane추가로 context 확인 편하게
.성능 alert 표시 및 설명 및 동영상 안내
. 60hz mode 표시 (사용자가 끊김을 인지할 수 있는 너비 표시)
. Script console 지원 (javascript로 수행 가능... 뭘?)


- trace의 로그는
Curils/trace.h 에서 trace marker 추가함 (traceing_mark_write)
시작 시 b, pid, process name 기록
종료 시 e 기록
* 만약 process가 시작되고 종료되는게 순서대로 짝이 맞아야 함. 안맞으면 tracing 불가



[Android Design Support Library, 김태호]

* Design support library가 정말 반가움..

- package : com.android.support:design:22.2.0

[CoordinatorLayout]

- 다양한 방법으로 자식 뷰들의 위치를 지정 할 수 있음.
- 자식의 뷰에서 Behavior(뷰와 상호작용). Anchor(특정위치에 붙는 행위 지정) 지정

- 스크롤에 특화된 레이아웃
- 아래 뷰만 전체 기능 지원
. RecyclerView
. NestedScrollView

- 스크롤이 가능한 부를 자식으로 추가 가능하나 nested scroll 지원 불가

[AppBarLayout]

- Toolbar + TabLayout 구성
- 형제뷰에 scrollFlags 지정

[CollapsingToolbarLayout]

- 일정 높이까지 늘어날 수 있는 Toolbar를 만들 때 사용
- 항상 AppBarLayout의 자식으로 사용

[TabLayout]

- ViewPager indicator
- 액션바에서 제공하던 탭 기능을 분리한 레이아웃

[NavigationMenu]

- App Drawer를 편리하게 구현
- 메뉴를 XML로 구성 가능
- DrawerView?를 Navigation으로 교체

- FitSystemWindows=true 설정으로 제대로 보이도록

- Memu list는 xml로
- Android checkableBehavior는 하나만 선택 되도록
- NavigationItemSelectedListener 구현


[TextInpitLayout]
- EditText의 기능을 확장.
- Hint text, error text 표시 및 애니메이션 지원
- Edittext와 1:1 매칭
- 색상이 틀어지는 문제로 인해 EditText 대신 AppCompatEditText 사용 권장
- 색상 미지원 시 colorAccent 노란색 색상
- ColorContolNormal, ColorControlActive


[FloatingActionButton, FAB]

사용자가 자주 사용하는 동작을 지원
- Inbox app의 compose 버튼
- 기본 배경색은 colorAccent

[Snackbar]

- 토스트와 다이얼로그의 중간
- 메시지 + 액션 버튼
- Dismiss listener는 아직 지원 안함. 이슈 제기되어 accept 된 상태
- Snakebar 생성 시 표시할 view를 인자로 넘김


생각대로 잘 안되면...
다음버전을 기다려 봐라.

버그 리포팅 b.android.com
AOSP 소스 s.android.com

http://androidhuman.com/m/post/561 참고