SlideShare a Scribd company logo
1 of 49
Download to read offline
안드로이드 6.0 마시멜로
targetSdkVersion를 고민하는
개발자를 위한 안내서
양찬석
Developer Advocate, Google
말랑말랑한
안드로이드 마시멜로가
10월 5일 공개 되었습니다.
23 올려야 할까요? 말아야 할까요?
6.0 마시멜로의 새로운 기능이 필요하다면?
사용자가 잠자는 동안에도 작업이 진행되어야 한다면?
항상 정확한 시간에 작업이 이루어져야 한다면?
체크리스트 #1
targetSdkVersion을 올려야 합니다!
체크리스트 #2
targetSdkVersion을 올리지 않더라도,
앱을 수정해 재배포 해야합니다.
마시멜로에서 앱을 실행했더니 죽는다면?
강제로 권한을 제거하면 심각한 문제가 발생한다면?
백그라운드에서 WiFi / Bluetooth Scan 작업을 수행해야 한다면?
마시멜로의 새로운 기능
Fingerprint Authentication
지문 인식을 통해 사용자 인증 가능
지문 인식을 위한 전체 UI/UX 플로우 제공
지문 인식 대화 창을 활용하는 샘플코드
Fingerprint and Payments APIs (Video)
App Linking
기존 Deep Link는 사용자가 실행할 앱을 선택 후 앱이 실행 됨
App Linking
새로운 App Linking 을 활용하면,
앱 설치 시 자동으로 등록된 도메인 사이트 인증
이 후에는, 사용자 확인 과정 없이 바로 특정 앱으로 이동
App
Verify
웹 사이트
Voice Interactions
사용자가 마치 대화하는 것 처럼
앱의 특정 기능을 수행할 수 있도록 지원
Voice Interactions Codelab
Direct Share
‘공유하기’를 통해 특정 아이템을 공유할 때,
공유할 앱 뿐만아니라,
특정 대상(예> 주소록 내 사람)을 지정하여 공유 가능
Direct Share 샘플코드
마시멜로 대상으로 앱을 빌드하면
달라지는 것들
targetSdkVersion 23
Runtime Permissions
앱 설치 시 권한 확인 없이 바로 앱 설치/업데이트 가능
앱 실행 중 권한 여부를 확인 한 후 권한 요청 필요
사용자는 설정화면을 통해 언제든지 앱의 권한을 변경 가능
새로운 권한 모델은 ‘Dangerous’ 수준의 권한에만 적용 됨
CALENDAR, CAMERA, CONTACTS, MICROPHONE, LOCATION, PHONE, SENSORS,
SMS, STORAGE
Runtime Permissions
Normal 수준 권한은 메니페스트에 선언하면 바로 사용 가능
INTERNET, USE_FINGERPRINT, ACCESS_NETWORK_STATE,
RECEIVE_BOOT_COMPLETED, etc…
“설정 > 애플리케이션 > 앱 선택 > 권한”
내 앱이 사용하고 있는 Dangerous 수준 권한 확인하기
체크 리스트
표시되는 권한이 없다면?
축하합니다 : ) Dangerous 수준 권한이
메니페스트에 선언되지 않았고, 앱은 런
타임 권한 모델에 영향을 받지 않습니다.
권한 확인
권한 요청 이유 설명
권한 요청
콜백 확인 후 처리
App System
Runtime Permissions Flow
권한 요청을 위한 대화창은 시
스템에서 생성 및 관리 됨
Activtiy LifecCycle에 주의
(onPause / onResume 호출)
권한 확인
권한 요청 이유 설명
권한 요청
콜백 확인 후 처리
App
Runtime Permissions Flow
ContextCompat#checkSelfPermissions
ActivityCompat#shouldShowRequestPermissionRationale
ActivtiyCompat#requestPermissions
OnRequestPermissionsResultCallback
#onRequestPermissionsResult
Runtime Permission Sample App 코드를 확인하세요.
google.com/design/spec/patterns/
permissions.html
시스템 권한으로 변경된 권한들
다른 앱 위에서 팝업을 띄우기 위해 사용되던
SYSTEM_ALERT_WINDOW 권한과 시스템 설정 값을 강제로 변경하기
위해 사용되던 WRITE_SETTINGS 권한은 더이상 일반적인 방법으로 획
득할 수 없습니다.
고급 권한 설정을 통해
사용자가 직접 변경 가능합니다.
SYSTEM_ALERT_WINDOW 올바르게 처리하기
권한 확인
권한 요청 엑티비티 실행
App
Settings.System.canDrawOverlays()
Start Activtiy
ACTION_MANAGE_OVERLAY_PERMISSION
action and app package url in data field
(eg> package:com.my.app)
onPause
onStop
onRestart
onStart
onResume
WRITE_SETTINGS 올바르게 처리하기
권한 확인
권한 요청 엑티비티 실행
App
Settings.System.canWrite()
Start Activtiy with
ACTION_MANAGE_WRITE_SETTINGS action
and app package url in data field
(eg> package:com.my.app)
onPause
onStop
onRestart
onStart
onResume
android {
useLibrary ‘org.apache.http.legacy'
…
}
안드로이드 2.3 이 후 버전 부터는 HttpUrlConnection 사용이 권장 됩니다.
HttpUrlConnection 기반의 오픈 소스 라이브러리 Volley 혹은 OkHttp를 검토해보세요.
Apache Http Client 삭제
ApacheHttpClient 가 꼭 필요하다면 build.gradle 파일에
컴파일 의존성을 추가해주세요.
Access to Hardware Identifier
WifiManager.getScanResults()
BluetoothDevice.ACTION_FOUND
BluetoothLeScanner.startScan()
…
ACCESS_FINE_LOCATION 혹은 ACCESS_COARSE_LOCATION
권한이 없으면 주변 Wifi / Bluetooth 디바이스를 발견할 수 없습니다.
다음과 같은 메서드가 정상적으로 동작하지 않습니다.
23으로 타겟을 올린 후, 멀쩡한 so 파일을 불러올 수 없다면?
Shared library with text relocations
target 23 미만에서는 다음과 같은 경고가 발생하지만,
사용 가능했던 라이브러리는
linker XXX has text relocations. This is wasting memory and is a security risk. Please fix.
target 23 이후는 ‘dlopen(3)’ 오류와 함께 사용 불가합니다.
Shared Library 컴파일 할 때
-fPIC 플래그를 컴파일 옵션에 추가해서 다시 빌드하세요.
그 외 변경/삭제된 API
BrowserBookmark
android.provider.Browser.getAllBookmarks()
android.provider.Browser.saveBookmark()
Notification
Notification#setLatestEventInfo()
AudioManager
AudioManager#setStreamSolo()
AudioManager#setStreamMute()
기존 앱이라도
꼭 확인 해봐야 할 변화들
targetSdkVersion <= 23
Open SSL 체크 리스트
마시멜로에서 앱이 정상적으로 실행되나요?
안드로이드 6.0부터는 OpenSSL대신 BoringSSL 라이브러리가 사용됩니다.
NDK를 사용하는 경우, OpenSSL 라이브러리에 대해 직접 링크를 연결하지
마세요(예:libcrypto.so 및 libssl.so)
앱이 실행하자 마자 죽는다면? 의심해 보세요.
OpenSSL이 사라집니다
안드로이드 플랫폼 API를 이용해 SSL을 활용할 수 있습니다.
꼭 필요한 경우 앱 패키지내에 Shared Library 파일을 직접 추가하세요.
(libssl.so , libcrypto.so)
OpenSSL이 사라집니다
Doze 체크 리스트
만일 여러분의 앱이,
AlarmManager를 활용하거나,
GCM등 푸시 서비스를 사용하면서,
반복적으로 작업을 수행하거나,
정확한 시간에 특정 작업을 수행해야 한다면...
테스트가 필요합니다!
디바이스는 잠이 듭니다.
아주 깊이 ZZZ...
Doze
만일 오랜 시간 동안 (1시간 정도)
1. 배터리가 충전 중이 아니고
2. 스크린이 꺼져 있고
3. 디바이스가 움직이지 않을 때,
네트워크를 사용할 수 없고,
애플리케이션이 요청한 WakeLock을 무시하고,
AlarmManager, JobScheduler, SyncAdapter를 통해 예약된 작업이 지
연됩니다.
디바이스가 잠이들면...
잠이든 디바이스는...
Doze 모드 중간 중간 미뤄둔 작업을 처리하기 위해
Maintenance 모드에 진입합니다. (약 5분간)
Doze 대응을 고민하기 전에
여러분의 앱은 사용자가 잠자고 있는 동안에도
처리해야할 중요한 작업이 있나요?
예> 알람시계, 실시간 메시징
그렇지않다면, 너무 걱정하지마세요.
사용자가 화면을 켜는 순간 Doze 모드가 바로 종료됩니다.
API Level 23
Doze 와 AlarmManager
Doze 모드에서도 작업이 수행 되어야한다면...
AlarmManager#setAndAllowWhileIdle
AlarmManager#setExactAndAllowWhileIdle 메서드를 사용합니다.
두 메서드 모두 배터리 사용량에 나쁜 영향을 미칠 수 있습니다. 따라서...
Doze 모드가 아니면,
>알람은 개별 앱 당, 최대 1분에 한 번 동작합니다.
Doze 모드 상에서는,
>알람은 개별 앱 당, 최대 15분에 한 번 동작합니다.
API Level 21
Doze 와 AlarmManager
Doze 모드에서 동작하는 알람 시계를 구현하려면...
AlarmManager#setAlarmClock 메서드를 사용합니다.
AlaramClock이 설정되면...
StatusBar에 아이콘이 표시되고,
설정된 알람 시간 조금 전에 Doze 모드에서 벗어납니다
상황에 맞춰 올바른 API를 사용하세요!
보다 자세한 설명이 필요하면
왼쪽 그림을 클릭! 하세요.
Doze 와 GCM
Doze 모드 일 때, Normal Priority GCM 수신이 지연됩니다.
Doze 모드 중에서도 리얼타임 메세징이 꼭 필요하다면...
High Priority GCM 을 사용합니다.
{
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
"priority" : "high",
"notification" : {
"body" : "This week’s edition is now available.",
"title" : "NewsMagazine.com",
"icon" : "new",
},
"data" : {
"volume" : "3.21.15",
"contents" : "http://www.news-magazine.com/world-week/21659772"
}
}
Doze 모드 올바르게 대응하기
현재 디바이스가 Doze 모드인지 확인할 수 있습니다.
현재 앱이 Whitelist에 포함되어 있는지 확인할 수 있습니다.
디바이스 IDLE 상태 변화를 확인할 수 있습니다.
PowerManager#isDeviceIdleMode
PowerManager#isIgnoringBatteryOptimizations
ACTION_DEVICE_IDLE_MODE_CHANGED 브로드캐스트 인텐트
배터리 최적화 무시
Doze 중에도 네트워크 연결이 꼭 필요한 경우, 사용자에게 특정 앱의 배터리 최적화를 무시
할 것을 요청할 수 있습니다. 하지만 주의하세요. 불필요한 요청은 GooglePlay 정책에 위배
될 수 있습니다.
1. 메니페스트 상에
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 권한 선언
2. 다음 형태의 Intent 생성 후 엑티비티 실행
• ACTION: ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
• DATA URI: package:[app package name]
3. “배터리 최적화를 무시할까요?” 대화창 표시
런타임 권한 체크 리스트
권한 설정에서 강제로 권한을 제거한 후에도
앱이 기대한 방식으로 동작하나요?
런타임 권한
안드로이드 6.0 에서는 23 타겟으로 빌드되지 않은 앱도,
설정 메뉴를 통해 사용자가 앱의 권한을 강제로 제거할 수 있습니다.
사용자에게 위험성을 경고하는
대화창이 표시됩니다.
targetSdk 가 23 미만의 앱에서 API 호출에 필요한 권한이 없는 경우, 안드로
이드 플랫폼은 SecurityException 대신 민감한 정보에 접근하지 못하게 API
결과값을 조정합니다.
제거된 권한 메서드 이름 결과
android.permission-
group.PHONE getLine1Number() null
android.permission-
group.STORAGE Querying MediaStore Empty Cursor
android.permission-
group.CAMERA openCamera() CameraAccessException
android.permission-
group.CONTACTS Querying Contacts Empty Cursor
런타임 권한
타겟 버전과 관계없이 권한을 갖고 있는지 확인할 수
있는 API가 추가되었습니다.
PermissionChecker#checkSelfPermission
런타임 권한
권한은 사용하지 않을수록 좋습니다.
WiFi / Bluetooth Scan
체크리스트
백그라운드 상에서 WiFi / Bluetooth Scan
작업을 수행하시나요?
주변 디바이스 정보를 활용하면 사용자 위치를 알 수 있습니다.
targetSdkVersion이 23 미만인 경우 Location 권한이 없으면,
WiFi / Bluetooth Scan 작업은 앱이 포그라운드 상에서 동작할 때만
정상적으로 동작하며, 백그라운드 상에서는 동작하지 않습니다.
(빈 리스트를 반환합니다.)
Location 권한이 없는 경우...
안드로이드 개발자 사이트
안드로이드 6.0 API 소개 비디오 플레이리스트
구글 코리아 개발자 블로그
Google Developer Group Korea
GDG Korea Android
OneStore 개발자 센터 블로그
참고자료 / 참고사이트
여러분의 앱이 마시멜로에서 잘 동작하길 기원합니다...

More Related Content

What's hot

Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJSEunYoung Kim
 
안드로이드 개발하기 2nd week
안드로이드 개발하기 2nd week안드로이드 개발하기 2nd week
안드로이드 개발하기 2nd weekEunGi Hong
 
AngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSAngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSKenneth Ceyer
 
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Google app engine
Google app engineGoogle app engine
Google app enginescor7910
 
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기Kenneth Ceyer
 

What's hot (8)

Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
 
안드로이드 개발하기 2nd week
안드로이드 개발하기 2nd week안드로이드 개발하기 2nd week
안드로이드 개발하기 2nd week
 
AngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSAngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJS
 
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육
 
8장 editor
8장 editor8장 editor
8장 editor
 
(인드로이드교육추천)안드로이드 .AAR 파일 생성하기_안드로이드 라이브러리 만들기
(인드로이드교육추천)안드로이드 .AAR 파일 생성하기_안드로이드 라이브러리 만들기(인드로이드교육추천)안드로이드 .AAR 파일 생성하기_안드로이드 라이브러리 만들기
(인드로이드교육추천)안드로이드 .AAR 파일 생성하기_안드로이드 라이브러리 만들기
 
Google app engine
Google app engineGoogle app engine
Google app engine
 
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
 

Viewers also liked

여러분의 앱은 android 6.0에서 잘 동작합니까?
여러분의 앱은 android 6.0에서 잘 동작합니까?여러분의 앱은 android 6.0에서 잘 동작합니까?
여러분의 앱은 android 6.0에서 잘 동작합니까?Sangyong Gwak
 
안드로이드 M의 주요 변경 사항
안드로이드 M의 주요 변경 사항안드로이드 M의 주요 변경 사항
안드로이드 M의 주요 변경 사항Chansuk Yang
 
mikrotik router dan cisco packet tracer
mikrotik router dan cisco packet tracermikrotik router dan cisco packet tracer
mikrotik router dan cisco packet tracer10rico
 
Sun택장애 bus man.e.ya @seoul 발표
Sun택장애 bus man.e.ya @seoul 발표Sun택장애 bus man.e.ya @seoul 발표
Sun택장애 bus man.e.ya @seoul 발표Soo-young Her
 
안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴  안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴 YoungSu Son
 
Marshmallowで変更になったpermission
Marshmallowで変更になったpermissionMarshmallowで変更になったpermission
Marshmallowで変更になったpermissionPong Hiro
 
안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들Sewon Ann
 
(안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
(안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드(안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
(안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드Taeho Kim
 
Android 6.0 permission change
Android 6.0 permission changeAndroid 6.0 permission change
Android 6.0 permission change彥彬 洪
 
[강의소개] 프로그래밍 입문자가 안드로이드와 잘 사귀려면?
[강의소개] 프로그래밍 입문자가 안드로이드와 잘 사귀려면?[강의소개] 프로그래밍 입문자가 안드로이드와 잘 사귀려면?
[강의소개] 프로그래밍 입문자가 안드로이드와 잘 사귀려면?FAST CAMPUS
 
[1116 박민근] c++11에 추가된 새로운 기능들
[1116 박민근] c++11에 추가된 새로운 기능들[1116 박민근] c++11에 추가된 새로운 기능들
[1116 박민근] c++11에 추가된 새로운 기능들MinGeun Park
 
[한국의SNS 컨퍼런스]N스크린 기반 스마트UX
[한국의SNS 컨퍼런스]N스크린 기반 스마트UX[한국의SNS 컨퍼런스]N스크린 기반 스마트UX
[한국의SNS 컨퍼런스]N스크린 기반 스마트UXBosnag-Kim
 
제안서N School(영상교육영상회의)[1]
제안서N School(영상교육영상회의)[1]제안서N School(영상교육영상회의)[1]
제안서N School(영상교육영상회의)[1]kisu kim
 
S블로거가 본 스마트tv
S블로거가 본 스마트tvS블로거가 본 스마트tv
S블로거가 본 스마트tvTaehyun Brad Kim
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんRetrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんYukari Sakurai
 
RAD Studio XE8을 소개합니다.
RAD Studio XE8을 소개합니다.RAD Studio XE8을 소개합니다.
RAD Studio XE8을 소개합니다.Devgear
 
비즈니스 Application 솔루션 구조 기술 진화 모델 ②
비즈니스 Application 솔루션 구조 기술 진화 모델 ②비즈니스 Application 솔루션 구조 기술 진화 모델 ②
비즈니스 Application 솔루션 구조 기술 진화 모델 ②Yongkyoo Park
 

Viewers also liked (20)

여러분의 앱은 android 6.0에서 잘 동작합니까?
여러분의 앱은 android 6.0에서 잘 동작합니까?여러분의 앱은 android 6.0에서 잘 동작합니까?
여러분의 앱은 android 6.0에서 잘 동작합니까?
 
안드로이드 M의 주요 변경 사항
안드로이드 M의 주요 변경 사항안드로이드 M의 주요 변경 사항
안드로이드 M의 주요 변경 사항
 
mikrotik router dan cisco packet tracer
mikrotik router dan cisco packet tracermikrotik router dan cisco packet tracer
mikrotik router dan cisco packet tracer
 
Sun택장애 bus man.e.ya @seoul 발표
Sun택장애 bus man.e.ya @seoul 발표Sun택장애 bus man.e.ya @seoul 발표
Sun택장애 bus man.e.ya @seoul 발표
 
안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴  안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴
 
Marshmallowで変更になったpermission
Marshmallowで変更になったpermissionMarshmallowで変更になったpermission
Marshmallowで変更になったpermission
 
안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들
 
(안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
(안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드(안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
(안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
 
Android 6.0 permission change
Android 6.0 permission changeAndroid 6.0 permission change
Android 6.0 permission change
 
[강의소개] 프로그래밍 입문자가 안드로이드와 잘 사귀려면?
[강의소개] 프로그래밍 입문자가 안드로이드와 잘 사귀려면?[강의소개] 프로그래밍 입문자가 안드로이드와 잘 사귀려면?
[강의소개] 프로그래밍 입문자가 안드로이드와 잘 사귀려면?
 
Logging system of Android
Logging system of AndroidLogging system of Android
Logging system of Android
 
[1116 박민근] c++11에 추가된 새로운 기능들
[1116 박민근] c++11에 추가된 새로운 기능들[1116 박민근] c++11에 추가된 새로운 기능들
[1116 박민근] c++11에 추가된 새로운 기능들
 
[한국의SNS 컨퍼런스]N스크린 기반 스마트UX
[한국의SNS 컨퍼런스]N스크린 기반 스마트UX[한국의SNS 컨퍼런스]N스크린 기반 스마트UX
[한국의SNS 컨퍼런스]N스크린 기반 스마트UX
 
제안서N School(영상교육영상회의)[1]
제안서N School(영상교육영상회의)[1]제안서N School(영상교육영상회의)[1]
제안서N School(영상교육영상회의)[1]
 
S블로거가 본 스마트tv
S블로거가 본 스마트tvS블로거가 본 스마트tv
S블로거가 본 스마트tv
 
영화정보기술
영화정보기술영화정보기술
영화정보기술
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんRetrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
 
RAD Studio XE8을 소개합니다.
RAD Studio XE8을 소개합니다.RAD Studio XE8을 소개합니다.
RAD Studio XE8을 소개합니다.
 
비즈니스 Application 솔루션 구조 기술 진화 모델 ②
비즈니스 Application 솔루션 구조 기술 진화 모델 ②비즈니스 Application 솔루션 구조 기술 진화 모델 ②
비즈니스 Application 솔루션 구조 기술 진화 모델 ②
 
Smart TV UX
Smart TV UXSmart TV UX
Smart TV UX
 

Similar to 안드로이드 6.0 마시멜로 지원을 고민하는 개발자를 위한 안내서

Modularization with Dynamic Feature Module
Modularization with Dynamic Feature ModuleModularization with Dynamic Feature Module
Modularization with Dynamic Feature ModuleNAVER Engineering
 
구글앱엔진 스터디
구글앱엔진 스터디구글앱엔진 스터디
구글앱엔진 스터디소라 정
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔NAVER D2
 
Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Bansook Nam
 
Android Test Recorder & Profiler 구축 이야기
Android  Test Recorder & Profiler 구축 이야기 Android  Test Recorder & Profiler 구축 이야기
Android Test Recorder & Profiler 구축 이야기 YoungSu Son
 
All In One MDM솔루션_Mobile watcher 제안서_korean_20140408
All In One MDM솔루션_Mobile watcher 제안서_korean_20140408All In One MDM솔루션_Mobile watcher 제안서_korean_20140408
All In One MDM솔루션_Mobile watcher 제안서_korean_20140408Justin Shin
 
모바일 자동화 솔루션 Touch Test 소개
모바일 자동화 솔루션 Touch Test 소개모바일 자동화 솔루션 Touch Test 소개
모바일 자동화 솔루션 Touch Test 소개진일 최
 
21 application and_network_status
21 application and_network_status21 application and_network_status
21 application and_network_status운용 최
 
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020Bansook Nam
 
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin KimAWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin KimAmazon Web Services Korea
 
모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템
모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템
모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템SeungBeom Ha
 
React native development
React native developmentReact native development
React native developmentSangSun Park
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
모바일 앱(App) 개발 테스트 솔루션 v20160415
모바일 앱(App) 개발 테스트 솔루션 v20160415모바일 앱(App) 개발 테스트 솔루션 v20160415
모바일 앱(App) 개발 테스트 솔루션 v20160415SeungBeom Ha
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Dong Chan Shin
 
D3 네이버소셜앱스 어떻게 만들어야 하나
D3 네이버소셜앱스 어떻게 만들어야 하나D3 네이버소셜앱스 어떻게 만들어야 하나
D3 네이버소셜앱스 어떻게 만들어야 하나NAVER D2
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridappNAVER D2
 

Similar to 안드로이드 6.0 마시멜로 지원을 고민하는 개발자를 위한 안내서 (20)

Modularization with Dynamic Feature Module
Modularization with Dynamic Feature ModuleModularization with Dynamic Feature Module
Modularization with Dynamic Feature Module
 
구글앱엔진 스터디
구글앱엔진 스터디구글앱엔진 스터디
구글앱엔진 스터디
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔
 
Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지
 
Android Test Recorder & Profiler 구축 이야기
Android  Test Recorder & Profiler 구축 이야기 Android  Test Recorder & Profiler 구축 이야기
Android Test Recorder & Profiler 구축 이야기
 
All In One MDM솔루션_Mobile watcher 제안서_korean_20140408
All In One MDM솔루션_Mobile watcher 제안서_korean_20140408All In One MDM솔루션_Mobile watcher 제안서_korean_20140408
All In One MDM솔루션_Mobile watcher 제안서_korean_20140408
 
모바일 자동화 솔루션 Touch Test 소개
모바일 자동화 솔루션 Touch Test 소개모바일 자동화 솔루션 Touch Test 소개
모바일 자동화 솔루션 Touch Test 소개
 
Designing Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom TabletDesigning Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom Tablet
 
iOS9 소개
iOS9 소개iOS9 소개
iOS9 소개
 
21 application and_network_status
21 application and_network_status21 application and_network_status
21 application and_network_status
 
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020
 
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin KimAWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
 
모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템
모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템
모바일 앱(App) 개발 테스트 솔루션 - 인터링크시스템
 
React native development
React native developmentReact native development
React native development
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
모바일 앱(App) 개발 테스트 솔루션 v20160415
모바일 앱(App) 개발 테스트 솔루션 v20160415모바일 앱(App) 개발 테스트 솔루션 v20160415
모바일 앱(App) 개발 테스트 솔루션 v20160415
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1
 
D3 네이버소셜앱스 어떻게 만들어야 하나
D3 네이버소셜앱스 어떻게 만들어야 하나D3 네이버소셜앱스 어떻게 만들어야 하나
D3 네이버소셜앱스 어떻게 만들어야 하나
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp
 

안드로이드 6.0 마시멜로 지원을 고민하는 개발자를 위한 안내서

  • 1. 안드로이드 6.0 마시멜로 targetSdkVersion를 고민하는 개발자를 위한 안내서 양찬석 Developer Advocate, Google
  • 3. 23 올려야 할까요? 말아야 할까요?
  • 4. 6.0 마시멜로의 새로운 기능이 필요하다면? 사용자가 잠자는 동안에도 작업이 진행되어야 한다면? 항상 정확한 시간에 작업이 이루어져야 한다면? 체크리스트 #1 targetSdkVersion을 올려야 합니다!
  • 5. 체크리스트 #2 targetSdkVersion을 올리지 않더라도, 앱을 수정해 재배포 해야합니다. 마시멜로에서 앱을 실행했더니 죽는다면? 강제로 권한을 제거하면 심각한 문제가 발생한다면? 백그라운드에서 WiFi / Bluetooth Scan 작업을 수행해야 한다면?
  • 7. Fingerprint Authentication 지문 인식을 통해 사용자 인증 가능 지문 인식을 위한 전체 UI/UX 플로우 제공 지문 인식 대화 창을 활용하는 샘플코드 Fingerprint and Payments APIs (Video)
  • 8. App Linking 기존 Deep Link는 사용자가 실행할 앱을 선택 후 앱이 실행 됨
  • 9. App Linking 새로운 App Linking 을 활용하면, 앱 설치 시 자동으로 등록된 도메인 사이트 인증 이 후에는, 사용자 확인 과정 없이 바로 특정 앱으로 이동 App Verify 웹 사이트
  • 10. Voice Interactions 사용자가 마치 대화하는 것 처럼 앱의 특정 기능을 수행할 수 있도록 지원 Voice Interactions Codelab
  • 11. Direct Share ‘공유하기’를 통해 특정 아이템을 공유할 때, 공유할 앱 뿐만아니라, 특정 대상(예> 주소록 내 사람)을 지정하여 공유 가능 Direct Share 샘플코드
  • 12. 마시멜로 대상으로 앱을 빌드하면 달라지는 것들 targetSdkVersion 23
  • 13. Runtime Permissions 앱 설치 시 권한 확인 없이 바로 앱 설치/업데이트 가능 앱 실행 중 권한 여부를 확인 한 후 권한 요청 필요 사용자는 설정화면을 통해 언제든지 앱의 권한을 변경 가능
  • 14. 새로운 권한 모델은 ‘Dangerous’ 수준의 권한에만 적용 됨 CALENDAR, CAMERA, CONTACTS, MICROPHONE, LOCATION, PHONE, SENSORS, SMS, STORAGE Runtime Permissions Normal 수준 권한은 메니페스트에 선언하면 바로 사용 가능 INTERNET, USE_FINGERPRINT, ACCESS_NETWORK_STATE, RECEIVE_BOOT_COMPLETED, etc…
  • 15. “설정 > 애플리케이션 > 앱 선택 > 권한” 내 앱이 사용하고 있는 Dangerous 수준 권한 확인하기 체크 리스트 표시되는 권한이 없다면? 축하합니다 : ) Dangerous 수준 권한이 메니페스트에 선언되지 않았고, 앱은 런 타임 권한 모델에 영향을 받지 않습니다.
  • 16. 권한 확인 권한 요청 이유 설명 권한 요청 콜백 확인 후 처리 App System Runtime Permissions Flow 권한 요청을 위한 대화창은 시 스템에서 생성 및 관리 됨 Activtiy LifecCycle에 주의 (onPause / onResume 호출)
  • 17. 권한 확인 권한 요청 이유 설명 권한 요청 콜백 확인 후 처리 App Runtime Permissions Flow ContextCompat#checkSelfPermissions ActivityCompat#shouldShowRequestPermissionRationale ActivtiyCompat#requestPermissions OnRequestPermissionsResultCallback #onRequestPermissionsResult Runtime Permission Sample App 코드를 확인하세요.
  • 19. 시스템 권한으로 변경된 권한들 다른 앱 위에서 팝업을 띄우기 위해 사용되던 SYSTEM_ALERT_WINDOW 권한과 시스템 설정 값을 강제로 변경하기 위해 사용되던 WRITE_SETTINGS 권한은 더이상 일반적인 방법으로 획 득할 수 없습니다. 고급 권한 설정을 통해 사용자가 직접 변경 가능합니다.
  • 20. SYSTEM_ALERT_WINDOW 올바르게 처리하기 권한 확인 권한 요청 엑티비티 실행 App Settings.System.canDrawOverlays() Start Activtiy ACTION_MANAGE_OVERLAY_PERMISSION action and app package url in data field (eg> package:com.my.app) onPause onStop onRestart onStart onResume
  • 21. WRITE_SETTINGS 올바르게 처리하기 권한 확인 권한 요청 엑티비티 실행 App Settings.System.canWrite() Start Activtiy with ACTION_MANAGE_WRITE_SETTINGS action and app package url in data field (eg> package:com.my.app) onPause onStop onRestart onStart onResume
  • 22. android { useLibrary ‘org.apache.http.legacy' … } 안드로이드 2.3 이 후 버전 부터는 HttpUrlConnection 사용이 권장 됩니다. HttpUrlConnection 기반의 오픈 소스 라이브러리 Volley 혹은 OkHttp를 검토해보세요. Apache Http Client 삭제 ApacheHttpClient 가 꼭 필요하다면 build.gradle 파일에 컴파일 의존성을 추가해주세요.
  • 23. Access to Hardware Identifier WifiManager.getScanResults() BluetoothDevice.ACTION_FOUND BluetoothLeScanner.startScan() … ACCESS_FINE_LOCATION 혹은 ACCESS_COARSE_LOCATION 권한이 없으면 주변 Wifi / Bluetooth 디바이스를 발견할 수 없습니다. 다음과 같은 메서드가 정상적으로 동작하지 않습니다.
  • 24. 23으로 타겟을 올린 후, 멀쩡한 so 파일을 불러올 수 없다면? Shared library with text relocations target 23 미만에서는 다음과 같은 경고가 발생하지만, 사용 가능했던 라이브러리는 linker XXX has text relocations. This is wasting memory and is a security risk. Please fix. target 23 이후는 ‘dlopen(3)’ 오류와 함께 사용 불가합니다. Shared Library 컴파일 할 때 -fPIC 플래그를 컴파일 옵션에 추가해서 다시 빌드하세요.
  • 25. 그 외 변경/삭제된 API BrowserBookmark android.provider.Browser.getAllBookmarks() android.provider.Browser.saveBookmark() Notification Notification#setLatestEventInfo() AudioManager AudioManager#setStreamSolo() AudioManager#setStreamMute()
  • 26. 기존 앱이라도 꼭 확인 해봐야 할 변화들 targetSdkVersion <= 23
  • 27. Open SSL 체크 리스트 마시멜로에서 앱이 정상적으로 실행되나요?
  • 28. 안드로이드 6.0부터는 OpenSSL대신 BoringSSL 라이브러리가 사용됩니다. NDK를 사용하는 경우, OpenSSL 라이브러리에 대해 직접 링크를 연결하지 마세요(예:libcrypto.so 및 libssl.so) 앱이 실행하자 마자 죽는다면? 의심해 보세요. OpenSSL이 사라집니다
  • 29. 안드로이드 플랫폼 API를 이용해 SSL을 활용할 수 있습니다. 꼭 필요한 경우 앱 패키지내에 Shared Library 파일을 직접 추가하세요. (libssl.so , libcrypto.so) OpenSSL이 사라집니다
  • 30. Doze 체크 리스트 만일 여러분의 앱이, AlarmManager를 활용하거나, GCM등 푸시 서비스를 사용하면서, 반복적으로 작업을 수행하거나, 정확한 시간에 특정 작업을 수행해야 한다면... 테스트가 필요합니다!
  • 31. 디바이스는 잠이 듭니다. 아주 깊이 ZZZ... Doze 만일 오랜 시간 동안 (1시간 정도) 1. 배터리가 충전 중이 아니고 2. 스크린이 꺼져 있고 3. 디바이스가 움직이지 않을 때,
  • 32. 네트워크를 사용할 수 없고, 애플리케이션이 요청한 WakeLock을 무시하고, AlarmManager, JobScheduler, SyncAdapter를 통해 예약된 작업이 지 연됩니다. 디바이스가 잠이들면...
  • 33. 잠이든 디바이스는... Doze 모드 중간 중간 미뤄둔 작업을 처리하기 위해 Maintenance 모드에 진입합니다. (약 5분간)
  • 34. Doze 대응을 고민하기 전에 여러분의 앱은 사용자가 잠자고 있는 동안에도 처리해야할 중요한 작업이 있나요? 예> 알람시계, 실시간 메시징 그렇지않다면, 너무 걱정하지마세요. 사용자가 화면을 켜는 순간 Doze 모드가 바로 종료됩니다.
  • 35. API Level 23 Doze 와 AlarmManager Doze 모드에서도 작업이 수행 되어야한다면... AlarmManager#setAndAllowWhileIdle AlarmManager#setExactAndAllowWhileIdle 메서드를 사용합니다. 두 메서드 모두 배터리 사용량에 나쁜 영향을 미칠 수 있습니다. 따라서... Doze 모드가 아니면, >알람은 개별 앱 당, 최대 1분에 한 번 동작합니다. Doze 모드 상에서는, >알람은 개별 앱 당, 최대 15분에 한 번 동작합니다.
  • 36. API Level 21 Doze 와 AlarmManager Doze 모드에서 동작하는 알람 시계를 구현하려면... AlarmManager#setAlarmClock 메서드를 사용합니다. AlaramClock이 설정되면... StatusBar에 아이콘이 표시되고, 설정된 알람 시간 조금 전에 Doze 모드에서 벗어납니다
  • 37. 상황에 맞춰 올바른 API를 사용하세요! 보다 자세한 설명이 필요하면 왼쪽 그림을 클릭! 하세요.
  • 38. Doze 와 GCM Doze 모드 일 때, Normal Priority GCM 수신이 지연됩니다. Doze 모드 중에서도 리얼타임 메세징이 꼭 필요하다면... High Priority GCM 을 사용합니다. { "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...", "priority" : "high", "notification" : { "body" : "This week’s edition is now available.", "title" : "NewsMagazine.com", "icon" : "new", }, "data" : { "volume" : "3.21.15", "contents" : "http://www.news-magazine.com/world-week/21659772" } }
  • 39. Doze 모드 올바르게 대응하기 현재 디바이스가 Doze 모드인지 확인할 수 있습니다. 현재 앱이 Whitelist에 포함되어 있는지 확인할 수 있습니다. 디바이스 IDLE 상태 변화를 확인할 수 있습니다. PowerManager#isDeviceIdleMode PowerManager#isIgnoringBatteryOptimizations ACTION_DEVICE_IDLE_MODE_CHANGED 브로드캐스트 인텐트
  • 40. 배터리 최적화 무시 Doze 중에도 네트워크 연결이 꼭 필요한 경우, 사용자에게 특정 앱의 배터리 최적화를 무시 할 것을 요청할 수 있습니다. 하지만 주의하세요. 불필요한 요청은 GooglePlay 정책에 위배 될 수 있습니다. 1. 메니페스트 상에 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 권한 선언 2. 다음 형태의 Intent 생성 후 엑티비티 실행 • ACTION: ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS • DATA URI: package:[app package name] 3. “배터리 최적화를 무시할까요?” 대화창 표시
  • 41. 런타임 권한 체크 리스트 권한 설정에서 강제로 권한을 제거한 후에도 앱이 기대한 방식으로 동작하나요?
  • 42. 런타임 권한 안드로이드 6.0 에서는 23 타겟으로 빌드되지 않은 앱도, 설정 메뉴를 통해 사용자가 앱의 권한을 강제로 제거할 수 있습니다. 사용자에게 위험성을 경고하는 대화창이 표시됩니다.
  • 43. targetSdk 가 23 미만의 앱에서 API 호출에 필요한 권한이 없는 경우, 안드로 이드 플랫폼은 SecurityException 대신 민감한 정보에 접근하지 못하게 API 결과값을 조정합니다. 제거된 권한 메서드 이름 결과 android.permission- group.PHONE getLine1Number() null android.permission- group.STORAGE Querying MediaStore Empty Cursor android.permission- group.CAMERA openCamera() CameraAccessException android.permission- group.CONTACTS Querying Contacts Empty Cursor 런타임 권한
  • 44. 타겟 버전과 관계없이 권한을 갖고 있는지 확인할 수 있는 API가 추가되었습니다. PermissionChecker#checkSelfPermission 런타임 권한
  • 46. WiFi / Bluetooth Scan 체크리스트 백그라운드 상에서 WiFi / Bluetooth Scan 작업을 수행하시나요?
  • 47. 주변 디바이스 정보를 활용하면 사용자 위치를 알 수 있습니다. targetSdkVersion이 23 미만인 경우 Location 권한이 없으면, WiFi / Bluetooth Scan 작업은 앱이 포그라운드 상에서 동작할 때만 정상적으로 동작하며, 백그라운드 상에서는 동작하지 않습니다. (빈 리스트를 반환합니다.) Location 권한이 없는 경우...
  • 48. 안드로이드 개발자 사이트 안드로이드 6.0 API 소개 비디오 플레이리스트 구글 코리아 개발자 블로그 Google Developer Group Korea GDG Korea Android OneStore 개발자 센터 블로그 참고자료 / 참고사이트
  • 49. 여러분의 앱이 마시멜로에서 잘 동작하길 기원합니다...