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

Post on 11-Jan-2017

293 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Android Marshmallow

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

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

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

Igor.tseglevskiy@gmail.com

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

http://mobiledimension.ru

http://jollydroid.ru

Marshmallow

Permissions

Permissions

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

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

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

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

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

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

Permissions

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

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

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

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

Permissions. Steps

ActivityCompat.shouldShowRequestPermissionRationale()

ContextCompat.checkSelfPermission()

Нет

ActivityCompat.requestPermissions()

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

Работаем

Да

Нет

Да

Permissions. Steps

Permissions. Steps

grantResults[0] ==PackageManager.PERMISSION_GRANTED

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

onRequestPermissionsResult()

Работаем

Нет

Да

Permissions. Interface

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/

ID

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

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.

App Standby and Doze Mode

Doze Mode & App Standby

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Doze Mode. Отладка

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

Doze Mode. Работа

Doze Mode. Работа

White list

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

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

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

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

White list

White list

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

App Standby. Условия

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

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

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>

Notifications

Notifications

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

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

• adb shell dumpsys notification --noredact

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

Text Selection

Text Selection

Text Selection

Text Selection. Callback

Text Selection. Callback

Text Selection

Text Selection. Грабли

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

Text Selection. Грабли

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

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

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

App Links

App Links

App Links

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

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

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/

Auto Backup

Auto Backup

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

часов

Auto Backup

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

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

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

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

Auto Backup. Config

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>/ или аналог(названия каталогов – условные, они могут меняться в зависимости от конфигурации)

Auto Backup. Config

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

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

Auto Backup. Event

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>

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М)

Вопросы?

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

igor.tseglevskiy@gmail.com

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

top related