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.

«Android Marshmallow — будь готов». Денис Неклюдов

923 views

Published on

Доклад с GDG DEvFest Voronezh 2015.

Published in: Software
  • Be the first to comment

  • Be the first to like this

«Android Marshmallow — будь готов». Денис Неклюдов

  1. 1. Android Marshmallow будь готов! Неклюдов Денис
  2. 2. target_sdk = 23
  3. 3. Auto Backup Лимит в 25 Mb на одно приложение в шифрованной части Drive (не затрагивает пользовательскую квоту) Бэкап осуществляется каждые 24 часа, при зарядке, когда устройством не пользуются, и оно подключено к Wi-Fi
  4. 4. Auto Backup Не сохраняются: External Storage Files (кроме getExternalFilesDir()) getCacheDir() getCodeCacheDir() getNoBackupFilesDir()
  5. 5. Auto Backup <android:fullBackupContent="@xml/mybackupscheme"> <full-backup-content> <[exclude, include] domain= ["file" | "database" | "sharedpref"| "external" | "root"] path="string”> </full-backup-content> ! не бекапить данные аккаунтов, токены в т.ч. GCM @Override onRestoreFinished()
  6. 6. Apache Client Deprecation Если осталась необходимость использовать HttpClient: android { useLibrary 'org.apache.http.legacy' }
  7. 7. Other Deprecations libcrypto.so и libssl.so из OpenSSL заменены на BoringSSL notification.setLatestEventInfo() удален Вместо него: Notification.Builder
  8. 8. Adoptable storage Context methods: getFilesDir() getCacheDir() getCodeCacheDir() getDatabasePath() getDir() getNoBackupFilesDir() getFileStreamPath() getPackageCodePath() getPackageResourcePa th() ApplicationInfo fields: dataDir sourceDir nativeLibraryDir publicSourceDir splitSourceDirs splitPublicSourceDirs
  9. 9. Five more changes Android Keystore Changes (упразднениe DSA) Wi-Fi and Networking Changes (управление соединениями, мультисоединение всегда) Camera Service Changes (приоритеты, несколько приложений для нескольких камер) Runtime(багфиксы в ART) Access to Hardware Identifier (нет доступа к макадресам из сети, новые права доступа)
  10. 10. The cat goes idle
  11. 11. Idle Doze Mode and App Standby
  12. 12. Doze mode ● Доступ приложению к сети отключен, пока приложение не получит high-priority GCM-push. ● Система игнорирует Wake lock’и. ● Alarm’ы запланированные в AlarmManager не будут вызываться, кроме тех, которые будут обновлены с помощью setAndAllowWhileIdle(). ● Система не производит поиска сетей Wi-Fi.
  13. 13. Doze mode ● NetworkPolicyManagerService Пропускает только приложения из белого списка. ● JobSchedulerService Все текущие задачи отменяются. Новые откладываются до пробуждения. ● SyncManager Все текущие отменяются, новые откладываются до пробуждения. ● PowerManagerService Только задачи приложений из белого списка вызовутся.
  14. 14. Doze mode: step by step
  15. 15. Doze mode: step by step DeviceIdleController: ACTIVE - Устройство используется или на зарядке INACTIVE - Устройство недавно вышло из активного режима (пользователь выключил экран, выдернул зарядку и т.п.) ...30 минут IDLE_PENDING - Устройство готовится перейти в режим ожидания ...30 минут IDLE - Устройство в режиме бездействия IDLE_MAINTENANCE - Открыто короткое окно, чтобы приложения выполнили свою работу
  16. 16. Doze mode: exclusions setAndAllowWhileIdle()- у обработчика есть 10 секунд, затем уходит в Idle Остальные алармы - в бездействии, пока активен Doze Mode GCM: Пуш уведомление с высочайшим приоритетом дает получившему его приложению недолгий доступ к сети. Whitelist: Alarm Manager:
  17. 17. Standby mode 1. Пользователь явно запустил приложение. 2. Приложение имеет процесс, работающий в данный момент на переднем плане (Activity или foreground service, или используется другой activity или foreground service’ом). 3. Приложение создало уведомление, которое висит в списке уведомлений. 4. Пользователь принудительно добавил приложение в список исключений оптимизации в настройках системы.
  18. 18. Permissions
  19. 19. Permissions SDK < 23 1.Описать все разрешения в manifest 2.Пользователь разрешит сразу все при установке 3.Пользователь может запретить любое из разрешений после установки SDK >= 23 1.Описать только PROTECTION_NORMAL запросы в manifest 2.Пользователь их все подтвердит при установке 3.Когда приложению нужен доступ к одному или нескольким разрешениям из
  20. 20. Permissions 1. ContextCompat.checkSelfPermission (Context context, String permission) 2. ActivityCompat.requestPermissions(); 3. ActivityCompat.OnRequestPermissionsResultCallback
  21. 21. Permissions Хорошие практики: • Запрашивать лишь те разрешения, которые действительно нужны • Если есть возможность, вместо запроса воспользоваться внешним Intent • Запрашивать разрешение, только перед тем, когда оно понадобится • Пояснять пользователю, для чего запрашивается разрешение
  22. 22. Fingerprint <uses-permission android:name="android.permission.USE_FINGERPRINT" /> Для использования: android.hardware.fingerprint.FingerprintManager; isHardwareDetected(); hasEnrolledFingerprints() authentificate(...)
  23. 23. Confirm Credential Для ипользования: KeyguardManager.isKeyguardSecure() KeyGenerator.generateKey(); setUserAuthenticationValidityDurationSeconds() KeyguardManager.createConfirmDeviceCredentialI ntent()
  24. 24. Text Selection Для исользования: startActionMode(Callback, ActionMode.TYPE_FLOATING)
  25. 25. App Linking <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" android:host="www.android.com" /> <data android:scheme="https" android:host="www.android.com" /> </intent-filter>
  26. 26. App Linking Положить JSON на свой сайт (https://www.domain1.com/.well-known/assetlinks.json) [{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:9 6:B2:3F:CF:44:E5"] } }]
  27. 27. Direct share Необходимо создать Service, наследник ChooserTargetService <service android:name=".YourChooserTargetService" android:label="@string/yourLabel» android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> <intent-filter> <action android:name="android.service.chooser.ChooserTargetService" /> </intent-filter> </service>
  28. 28. Voice Iteraction Проверить доступность: activity.isVoiceInteraction() Взаимодействовать при помощи VoiceInteractor
  29. 29. Спасибо за внимание! Денис Неклюдов plus.google.com/+ДенисНек nekdenis@gmail.com

×