Игорь Цеглевский: Взгляд практика на android 6.0 marshmallow

59
Android Marshmallow

Upload: mobile-dimension

Post on 11-Jan-2017

293 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Android Marshmallow

Page 2: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Давайте познакомимся…

Mobile Dimension LLCСтарший Android Разработчик

Учебный центр «Jolly Droid»Основатель и преподаватель

[email protected]

Игорь Цеглевский

http://mobiledimension.ru

http://jollydroid.ru

Page 3: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Marshmallow

Page 4: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Permissions

Page 5: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Permissions

• targetSdkVersion=22– Permissions (права доступа) работают как прежде:

разрешено всё, что описано в манифесте– Пользователь может в настройках отозвать любое

из прав! • Андроид предупреждает, что это может вызвать падение

приложения, но не запрещает• При изменении списка прав приложение будет

остановлено– Если пользователь отозвал права, то

соответствующие API вернут 0 или null

Page 6: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Permissions

• targetSdkVersion=23– «Нормальные» права доступа даются

автоматически– «Опасные» права необходимо запросить явно,

для каждой группы– «Опасные» права пользователь может отозвать

в настройках приложения. Приложение должно всегда (каждый раз при обращении к соответствующим API) проверять наличие прав

Page 7: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Permissions. Steps

ActivityCompat.shouldShowRequestPermissionRationale()

ContextCompat.checkSelfPermission()

Нет

ActivityCompat.requestPermissions()

Notification-Объяснение

Работаем

Да

Нет

Да

Page 8: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Permissions. Steps

Page 9: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Permissions. Steps

grantResults[0] ==PackageManager.PERMISSION_GRANTED

Учитываем в работе или информируем пользователя

onRequestPermissionsResult()

Работаем

Нет

Да

Page 10: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Permissions. Interface

Page 11: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Permissions. Ресурсы

https://gist.github.com/tseglevskiy/cc715f36e10ad81c83b6

http://developer.android.com/intl/ru/training/permissions/requesting.html

https://newcircle.com/s/post/1737/2015/05/31/the-new-android-m-permissions-model

http://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en

http://habrahabr.ru/post/269491/

Page 12: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

ID

Page 13: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

ID наши• WiFi MAC, Bluetooth MAC:

– всегда 02:00:00:00:00:00• Phone number (telephonyManager.getLine1Number()):

требуется:– READ_PHONE_STATE «Осуществление телефонных звонков и

управление ими» – или READ_SMS «Отправлять и просматривать SMS-

сообщения»• IMEI (telephonyManager.getDeviceId()):

– требуется READ_PHONE_STATE• Попробуйте Settings.Secure.ANDROID_ID

Page 14: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

ID чужие

• Доступ к данным, содержащим ID окружающих устройств требует ACCESS_COARSE_LOCATION– WifiManager.getScanResults()– BluetoothDevice.ACTION_FOUND– BluetoothLeScanner.startScan()

• Note: When a device running Android initiates a background Wi-Fi or Bluetooth scan, the operation is visible to external devices as originating from a randomized MAC address.

Page 15: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

App Standby and Doze Mode

Page 16: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Doze Mode & App Standby

• Doze Mode – режим, в который устройство переходит, если находится некоторое время с залоченным экраном, без движения и работающее от батарей

• App Standby – лишение ресурсов приложений, которые давно не использовались

Page 17: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Doze Mode. Ограничения

• AlarmManager – только setAndAllowWhileIdle(), setExactAndAllowWhileIdle() и setAlarmClock(). Остальные задерживаются до maintenance window.

• JobScheduler – все текущие задачи завершаются, все отложенные ждут maintenance window

• SyncManager – все синки завершаются• PowerManager – работают только Wake Lock-и

приложений из белого списка, остальные игнорируются• NetworkPolicyManager – для него doze mode тоже самое,

что и idle mode. Т.е. сеть есть только для приложений из белого списка

Page 18: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Doze Mode. Что работает

• AlarmManager – set[Exact]AndAllowWhileIdle() не чаще раз в 15 минут– setAlarmClock()

• GCM messages with high priority• Сеть и Wake Locks, если приложение в белом

списке• Все приложения получают возможность

выполнить работу в течение Maintenance window

Page 19: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Doze ModeMaintenance window наступит через:• 1 час• 2 часа• 4 часа• 6 часов (и далее каждые 6 часов)

Page 20: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Doze Mode. Отладка

• Запустить приложение• Залочить экран• adb shell dumpsys battery unplug• adb shell dumpsys deviceidle step

Page 22: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Doze Mode. Работа

Page 23: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Doze Mode. Работа

Page 24: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

White list

• Приложению из white list доступна сеть и Wake lock-и

• Пользователь может включить сам:– Настройки –> Батарея -> Экономия заряда

батареи -> Все приложения -> App -> Не экономить

– Settings -> Battery -> Battery Optimization• Можно запросить программно

Page 25: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

White list

Page 26: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

White list

Page 27: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

White list. Отладка

$ adb shell dumpsys deviceidleWhitelist user apps: ru.jollydroid.dozedemo1

$ adb shell dumpsys deviceidle \whitelist +ru.jollydroid.dozedemo1

$ adb shell dumpsys deviceidle \whitelist -ru.jollydroid.dozedemo1

Page 28: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

App Standby. Условия

Приложение может быть переведено в standby только если одновременно:• Устройство работает от батареи• Неверно следующее:– Пользователь явно запустил приложение.– Приложение имеет foreground процесс– Есть видимое уведомление (Notification),

созданное приложением.• Приложение не в белом списке

Page 29: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

App Standby. Отладка$ adb shell dumpsys battery unplug$ adb shell am set-inactive <packageName> true

$ adb shell am set-inactive <packageName> false$ adb shell am get-inactive <packageName>

Page 31: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Notifications

Page 32: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Notifications

• Notification.setLatestEventInfo() удален. – Для обновления повторно используйте

Notification.Builder и NotificationManager.notify() c тем же id.

• adb shell dumpsys notification --noredact

• У NotificationManager появился метод StatusBarNotification[] getActiveNotifications()

Page 34: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Text Selection

Page 35: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Text Selection

Page 36: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Text Selection

Page 37: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Text Selection. Callback

Page 38: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Text Selection. Callback

Page 39: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Text Selection

Page 40: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Text Selection. Грабли

Где наши пункты??

Page 41: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Text Selection. Грабли

• Не всё помещается, появляется невидимый скролл• Порядок задается с помощью android:orderInCategory, родные

нумеруются 1..5• Менюшка fullscreen input mode не дополняется таким способом

(можно выключить с помощью android:imeOptions="flagNoExtractUi")

Page 43: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

App Links

Page 44: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

App Links

Page 45: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

App Links

• https://<your host>/.well-known/assetlinks.json– Обязательно HTTPS!!

Page 46: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

App Links. Отладка

• keytool -list -v -keystore debug.keystore \| grep SHA256

• adb shell am start -a android.intent.action.VIEW \-c android.intent.category.BROWSABLE \-d "http://<domain1>:<port>"

• adb shell dumpsys package domain-preferred-apps

Page 47: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

App Links. Ресурсы

https://gist.github.com/tseglevskiy/5f6d7d7e81a291000782

http://developer.android.com/intl/ru/training/app-links/index.html

http://blog.hokolinks.com/android-m-app-links-implementation-drawbacks/

Page 48: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Auto Backup

Page 49: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Auto Backup

• Auto backup происходит, когда:– Устройство не используется– Находится на зарядке– Подключено к WiFi– С момента последнего бэкапа прошло более 24

часов

Page 50: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Auto Backup

• Не попадут файлы из каталогов– getCacheDir() – getCodeCacheDir()– getNoBackupFilesDir()

• С внешнего стораджа попадут только файлы из каталога getExternalFilesDir()

• Общий объем не более 25МБ на приложение– При превышении объема бэкап останавливается, «в

облаке» остается последнее сохраненное состояние

Page 51: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Auto Backup. Config

Page 52: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Auto Backup. Config

• domain – указание каталога, в котором искать файл– file – /data/data/<package>/files– database – /data/data/<package>/databases/– sharedpref – /data/data/<package>/shared_prefs/– external –

/storage/emulated/0/Android/data/<package>/files/– root – ссылка на /data/data/<package>/ или аналог(названия каталогов – условные, они могут меняться в зависимости от конфигурации)

Page 53: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Auto Backup. Config

• path – относительное имя файла– С расширением! Т.е. если

getSharedPreferences("pref1", MODE_PRIVATE), то <exclude domain="sharedpref"path="pref1.xml"/>

Page 54: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Auto Backup. Event

Page 55: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Auto Backup. Отладка

• Принудительный запуск бэкапаadb shell setprop log.tag.BackupXmlParserLogging VERBOSEadb shell bmgr runadb shell bmgr fullbackup <package>

• Восстановление из бэкапаadb shell bmgr restore <package>

• Очистка бэкапа в облакеadb shell bmgr wipe com.google.android.gms <package>

Page 56: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Auto Backup. Грабли

PFTBT : Error -1002 backing up ru.jollydroid.autobackupdemo1PFTBT : Transport suggested backoff=0PFTBT : Transport rejected backup of ru.jollydroid.autobackupdemo1, skippingPFTBT : Full backup completed.

Если бэкап не работает и в логе такое сообщение, возможно:- Ошибка в конфиге, в результате не найдено ни одного файла для бэкапа- Слишком много данных (больше 25М)

Page 58: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Вопросы?

Page 59: Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow

Спасибо за внимание!

[email protected]

http://jollydroid.ruhttp://mobiledimension.ru