Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

안드로이드 6.0 마시멜로 대응을 위해 먼저 확인해야 할 항목들, App Linking, Fingerprint API등의 새로운 기능들과 Runtime Permission, Doze 모드등 주요 변경사항을 정리했습니다.

  • Login to see the comments

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

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

×