3 сентября 2017 г.

Изменения в поведениях Android 8.0. Часть 1: Приложения с любым target API level

   Перевод первой половины статьи об изменениях в Android 8.0. Как обычно, я рекомендую вам читать оригинал: https://developer.android.com/about/versions/oreo/android-8.0-changes.html Свои комментарии я пометил курсивом.
    Android 8.0 (API level 26), кроме новых возможностей и разных плюшек, некоторые привычные поведения системы и API. В этой статье описываются некоторые ключевые изменения, которые вам необходимо понимать и учитывать при разработке приложений.
   И хотя большинство этих изменений затрагивают все приложения и не важно, какая версия Android указана как target, есть и такие, которые повлияют лишь на те приложения, которые объявили в манифесте о готовности к Android 8.0. Для упрощения чтения, статья была разделена на две: приложения с любым target API level и приложения с target на Android 8.0.
   

21 мая 2017 г.

Представляем Treble: модульную основу для Android

    Статья является переводом вот этой запси в блоге для разработчиков под Android: https://android-developers.googleblog.com/2017/05/here-comes-treble-modular-base-for.html Как и всегда прежде, я рекомендую вам читать оригинал, если ваш уровень владения английским языком выше моего (наверняка это так).
    Сама запись важна хотя бы тем, что я пока не встречал упоминания об этом проекте нигде в Твиттере, Фейсбуке и Гугл Плюс. Единственный человек, который упоминал о нём — мой коллега, сидящий у меня за спиной. А между тем, это очень интересная фича. Впрочем, как и всегда, производители устройств её наверняка проигнорируют. Спойлер: Sony — молодцы.

    Мы, в Android team, считаем, что каждый сладкий (прим. перев.: буквально «сладкий», «десертный», если хотите; думаю, вы понимате, почему так) релиз — это причина сделать Android лучше для наших пользователей и партнёров по экосистеме. И каждый рах мы слышим от партнёров, создающих устройства, что обновление существующих устройств на новую версию Android чрезвычайно трудозатратно и дорого.
    При разработке Android O, мы очень тесно работали с изготовителями устройств и чипсетов, делали шаги к решению проблемы и теперь, с волнением, представляем вам Project Treble — самое большое низкоуровневое изменение в архитектуре Android на сегодня.

13 апреля 2017 г.

Изменения в работе с идентификаторами устройства в Android O

    Перевод записи https://android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html

    В этой записи рассказывается о том, что вам грозит, когда пользователь обновится на Android O, если вы тем или иным способом пытаетесь этого пользователя распознавать, получать его ID. Как обычно, строго рекомендую читать оригинал, а не мой корявый перевод.


Изменения в работе с идентификаторами устройства в Android O

Posted by Giles Hogben, Privacy Engineer

    В Android O появляются некоторые улучшения, дабы помочь пользователю управлять доступом к своим идентификаторам. Эти улучшения включают:
  • Ограничение на использование постоянных (не сбрасываемых) устройство-зависимых идентификаторов
  • Обновление системой Wi-Fi стека, связанного с изменениями прошивки Wi-Fi чипсета на устройствах типа Pixel, Pixel XL и Nexus 5x для рандомизации MAC адресов во время сканирований сетей
  • Обновление в механизме, которым приложения запрашивали информацию об учётной записи и предоставление большего контроля над данными пользователя

16 июля 2016 г.

Что делать, если не нажимается кнопка «Разрешить» в Android

Запрос разрешения, без которого антивирус будет слепым и беззубым
    Если у вас на устройстве установлен Android 6, то вы уже много раз нажимали кнопку «Разрешить» / „Allow“. А некоторые из вас в июне 2016 года столкнулись с проблемой, что кнопка разрешения не реагирует на тапы, а запрет работает нормально. Этой достаточно короткой записью я попробую указать на причины проблемы и рассказать решение. Если вам нужно только решение и вы пришли сюда по запросу из поисковой системы, то вот оно: «Удалите приложения, использующие оверлей и написанные не руками, а жопой. Чаще всего жизнь портит вот этот файловый менеджер: https://play.google.com/store/apps/details?id=com.rhmsoft.fm»

    Если вам интересна причина этого поведения, то добро пожаловать в статью.

26 мая 2016 г.

Негативные сценарии тестирования

    Ииииииии... Это последняя запись из цикла! Она самая короткая, самая простая и практически целиком состоит из реальных историй. По возможности — глупо-смешных. Даже есть видео, снятое специально для записи вот прямо в момент написания. Свежачок-с. К сожалению, я не догадался снять скриншот с сообщением о падении Youtube клиента, он бы подошёл. Упал прямо при заливке того ролика, который вставлен в статью. Ладно, пусть будет мой экран блокировки.

    На старте тестирования, вне зависимости от того, новый это проект или такой, что его стоило бы уже похоронить, в целом всегда ясно, с чего начинать. Если, конечно, к момент старта тестирования ни одно из звеньев цепи не слажало. Обычно тестировщики вычитывают требования и прочие документы с нерусскими названиями, типа «БиЭрКью», «ЭсАрки» и «Юзер стори» и прикидывают, как написать тест кейс, чтобы он проверил выполенения всех этих документов. Это всё понятно, на поверхности и нет смысла на этом задерживаться. Но есть ещё поведение самого Android, о котором иногда не знают не то что аналитики, но даже архитекторы и некоторые разработчики. А помня, что с AOSP никто не работает, только с кастомами, таких особенностей всплывает довольно много. И я говорю не о стрессовых сценариях, когда памяти нет или батарейку внезапно вынули (как-то встречал негодование человека на терминал GNU/Linux, что тот не показывает пароль при вводе, а у него глючная клавиатура и он не понимает, вводит пароль или же это клавиатура снова не работает), а о штатном поведении кастомизации Android и даже поведении, заложенном в AOSP. То есть штатные поведения системы, которые могут отрицательно сказаться на тестируемом продукте. Так называемые, негативные сценарии.

9 мая 2016 г.

Android SDK. Тестируем по-настоящему!

    Эта запись — предпоследняя из всего цикла. Пожалуй, она самая скучная, однако она ближе всего к тому, что называется тестированием. И, мне кажется, она ещё и самая длинная. Я попытался разбавить всю эту скукоту наглядными примерами, скриншотами. Книги с картинками читают охотнее? По крайней мере популярные «блоггеры» (а я — популярный, у меня есть минимум 8 читателей, скоро продамся кому-нибудь и работать перестану!) часто ставят всякие картинки, возможно это и работает.
    Как бы то ни было, здесь можно получить минимальное понимание того, что есть в Android SDK и что из этого нужно тестировщику. А главное — зачем. Ещё тут есть море грамматических ошибок, наверное, так как писать большую часть текста приходилось ночью, а я по ночам люблю спать и после 22 часов, как правило, уже сплю.

    Уверен, вам было интересно узнать, во сколько я засыпаю. Читайте дальше, там ещё интереснее!

 Android SDK

    Мы подбираемся всё ближе и ближе к инструментам и методам тестирования. Инструменты для тестирования, а также всякий вспомогательный инструментарий, входит в состави Android SDK. Самые нужные компоненты из состава SDK, конкретно для тестировщиков, это инструменты SDK, они же SDK tools, инструменты сборки, они же Build tools (внезапно, да?) и инструменты платформы, они же Platform tools. Нет никакого смысла запоминать это. Я просто сказал названия папок из установленного пакета Android SDK:
Рис. 1. Содержание папки Android SDK
    В этих папках лежит много чего, но я расскажу про минимальный полезный набор.

14 апреля 2016 г.

Исследовательское тестирование как метод изучения Android

Картинка без смысла
    Вторая часть лекции рассматривает реальные проблемы на реальных устройствах. Все рассмотренные проблемы вызваны архитектурой системы, Если точнее, изменениями, которые вносят некоторые производители в архитектуру, а приложения ничего с этим сделать не могут, потому что не имеют возможности влиять на работу системы. Использовать буду только реальные ситуации и, по возможности, буду давать ссылки в баг-трекер Google, чтобы каждый мог убедиться, что это всё не выдумки.

    В целом мы выяснили в общих чертах, как работают приложения в Android. Это поможет нам понять, как проводить хорошее глубокое исследовательское тестирование приложений и самой операционной системы. Глубоким я буду считать такое, которое позволит находить не ошибки переводов и не проблемы с влезанием надписей в кнопки, а разлом функциональности продуктов из-за архитектурных особенностей как Android, так и устройств под этой операционной системой.

    Сразу нужно уяснить, что более-менее одинаковые реализации Android есть лишь у горстки производителей. И ситуация, когда на одной и той же модели устройства, но выпущенные в разных странах или даже в одной стране, но от разных операторов, используются разные прошивки — это жестокая реальность! Прошивка — это не ОС Android, а всё, под чем работает устройство. Начиная от загрузчика, заканчивая доступными в Android на этом устройстве языками и предустановленными приложениями с их настройками. ОС Android — это лишь часть прошивки.

    Все ключевые термины, что описано ниже, вы уже встречали в предыдущей статье из этого цикла. Теперь дополним понимание этих терминов с той стороны, которая называется «исследовательское регрессионное тестирование». Регрессионное здесь — потому что я буду описывать проблемы, которые появлялись из-за обновлений системы.

11 апреля 2016 г.

Android не запрашивет пароль в процессе загрузки устройства

До Android N Accessibility недоступен в процессе загрузки ОС

    На официальном форуме «Лаборатории Касперского» пользователь задал интересный вопрос, суть которого я, к своему стыду, не понял сразу и отправил человека не в то направление. К счастью, пользователь верно разобрался сам, а я потратил несколько минут выходных на то, чтобы докопаться до причины.

    Итак, ситуация. У пользователя устройство зашифровано и включена настройка запроса пароля при загрузке системы. В какой-то момент на очередной загрузке этот пароль  не был запрошен, хотя экран блокировки остался без изменений. Почему так может произойти?

6 апреля 2016 г.

Основы понимания приложений

    Этой записью я открою короткий цикл длинных и скучных (не просто так же имя блогу дано!) статей о тестировании приложений под Android. Здесь теория, теория, теория, вперемешку с историями «из жизни», которые, конечно, наиболее ценны (для меня).
    Все статьи буду идти от очень общего к частностям. Это поможет сначала разобраться с тем, как всё работает, как устроено, как называется, а затем — жонглировать этими теоретическими знаниями. Например в этой, открывающей статье, я сначала расскажу вскользь о компонентах приложений, затем расскажу о них подробно, а затем — добавлю понимания, где можно найти эти компоненты. Так будет построена каждая последующая статья, но, кроме того, каждая последующая будет сильно завязана на каждую предыдущую. Так что если уж решили подтянуть уровень понимания Android и исследовательского тестирования приложений под Android, стоит читать всё.
    К чёрту, приступим!

    Программный код пишется, в основном, на Java. То есть вы можете писать на чём угодно, хоть на той же Scala, да хоть на Python. Но тут есть свои подводные камни, очевидные и не очевидные. Можно писать и на C и нативный код будет работать также быстро, как и Java (слова «быстро» и «Java» в одном предложении и даже нет слова «память», спешите видеть!), возможно даже быстрее, но это дороже в скорости разработки и затратах на сопровождение.
Итак, код пишется на Java. Далее Android SDK (Software Development Kit — набор средств для разработки) собирает код и все требуемые файлы ресурсов в файл APK (Android Application Package) — программный пакет Android, который суть — zip файл с расширением .apk. То, что это zip, легко убедиться, посмотрев на заголовок, где мы увидим буквы PK:
    Ну или «РК» — РосКом и многозначительное многоточие… Кстати, а кто помнит, какие буквы находятся в заголовках exe и dll файлов и что они означают? Это буквы MZ — инициалы Марка Зибовски, бывшего архитектора компании Microsoft, который был одним из создателей MS DOS. Он и разработал этот формат исполняемых файлов, который заменил собой устаревший .com. Пятиминутка бесполезных знаний!

15 марта 2016 г.

Trusty TEE (Безопасная среда выполнения Trusty)

    Вся статья является переводом вот этой: https://source.android.com/security/trusty/index.html. Как обычно, я предлагаю читать оригинал, так как в своём переводе я могу допустить ошибки. Этот записью планирую начать небольшой набор статей о том, как обеспечивается безопасность в Android, когда все разработки ещё не сломаны конечными производителями аппаратов. И первая статья — о TEE. Потому что даже про FDE нельзя рассказать, пока не усвоится вот это базовое знание.
    По возможности я вставлял поясняющие комментарии и ссылки на Википедию. Также старался избегать перевода терминов, если этот перевод уже не общепринят в русском языке. Потому по всему тексту будет TEE, а не БСВ.

Trusty TEE

    Trusty — это набор программных компонентов, поддерживающих на мобильном устройстве безопасную среду выполнения или, в оригинальной терминологии, — Trusted Execution Environment (TEE).

    Trusty состоит из:
  • Операционной системы (Trusty ОС), работающей на процессоре, поддерживающем TEE
  • Драйверов для ядра Android (Linux), обеспечивающих взаимодействие с приложениями, работающими под Trusty OS
  • Набора библиотек для системного ПО Android, обеспечивающих взаимодействие с доверенными приложениями, выполняемыми внутри Trusty OS, использующего драйверы ядра
Важно: В Trusty и Trusty API вносятся изменения.
Чтобы больше узнать о Trusty API, смотрите описание API. Примечание. Перевод описания возможно и будет, если в нём будут важные куски для понимания всего происходящего.

2 февраля 2016 г.

Экран блокировки с пустым паролем в Android — это не баг, а фича!

...на самом деле баг тут есть.
    В Android есть полезная (необходимая!) штука — FDE, то есть полное шифрование диска. Матчасть можно почитать здесь: https://source.android.com/security/encryption/. Ну или чуть позже в этом самом блоге, я планирую перевести статью. При использовании шифрования (в Nexus 6 и более новых, а также в некоторых устройствах сторонних производителей его предлагают использовать при первом же включении) у пользователя просят пароль*. Этим паролем устройство НЕ шифруется. И это уже интересное, так что здесь логично поставить кат.

17 января 2016 г.

В Google Play Developer Console появились промокоды

    Перевод вот этой статьи Google. Как обычно, рекомендую читать статью в оригинале, т. к. в своём переводе я могу ошибаться.

    За последние больше чем полгода в Google Play Developer Console было добавлено несколько новых инструментов, которые могут помочь в продвижении ваших продуктов. Фичи бета тестинга позволяют получить обратную связь от пользователями и помогают исправлять проблемы. В разделе экспериментов вы можете запустить A/B тестирование ваших приложений. Универсальные кампании для приложений и отчёты по активностям пользователей помогают расширять аудиторию за счёт понимания интересов пользователей и оценивать успешность маркетинга.

16 января 2016 г.

Не используйте aapt для удаления файлов из apk

    Очень короткая запись про то, что aapt не стоит использовать для модификации apk файлов, лучше 7z подтянуть или иное решение. А ещё лучше, конечно, свалить в Новую Зеландию или Таиланд на ПМЖ, чего уж тут. Открыт для ваших предложений =)

2 января 2016 г.

Chrome Custom Tabs

    Уже достаточно давно Google представила Custom Tab’ы. Чтобы не таскать конструкцию “custom tab” обзову их по своей сути – это управляемые вами (разработчиками) вкладки от браузера Chrome, но внутри ваших приложений, по типу WebView. Вы как бы заказываете у Хрома его возможности. Так что обзову их “клиентские табы”.
    Статья – перевод вот этой официальной статьи: https://developer.chrome.com/multidevice/android/customtabs Опубликован оригинал был давно, ещё 30 августа 2015, но популярности клиентские табы пока не получили. Лично у меня пока только одно приложение их использует – Talon for Twitter. А между тем это реально удобная вещь, возможности который сильно превышают возможности системного WebView. К тому же эта фишка работает быстрее ВебВью и загружается быстрее Хрома.

29 декабря 2015 г.

В Android аду есть специальное место для Samsung

    Это перевод вот этой записи: http://verybadalloc.com/android/2015/12/19/special-place-for-samsung-in-android-hell/. Как всегда, рекомендую читать в оригинале, если есть такая возможность.
    Отказ от отвественности: если вы здесь только чтобы услышать, как кто-то поносит Samsung, проматывайте вниз. И да, вы пришли по назначению.
    Если вы используете библиотеку поддержки appcompat (конечно же используете), то могли видеть вот такой стек трейс  с Статистике падений от устройств Samsung под Android 4.2.2:
java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
at android.support.v7.app.ActionBarActivityDelegateBase.initializePanelMenu(ActionBarActivityDelegateBase.java:991)
at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:1041)
at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1259)
at android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.java:80)
at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:116)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5299)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)

18 ноября 2015 г.

Парсим бесконечный вывод logcat с таймаутом (Python 3)

    Столкнулся с типичной ситуацией - нужно читать вывод logcat в Python 3. Вообще это не проблема, когда мы точно знаем, что нужная строка там появится. Но бывают ситуации, когда нужно выходить по таймауту:
  • Нужно сделать отказоустойчивость автотеста. Ведь в будущих сборках ожидаемой строки может не быть вообще или ключевые слова могут быть изменены
  • Операция не должна длиться больше заданного времени
    Весь текст ниже рассчитан на таких же нубов, как я. Если кто-то придёт и пояснит по хардкору, как же правильно сделать (кодом, а не словами, словами и я могу), я буду очень благодарен. А пока же мой автотест работает (на самом деле ещё в процессе написания) так, как описано ниже.

15 ноября 2015 г.

Оптимизации Doze и App Standby

    Эта запись - неточный перевод статьи Google https://developer.android.com/training/monitoring-device-state/doze-standby.html. Обо всех найденных ошибках смело сообщайте - мне важно улучшить качество своих переводов.
    Начиная с Android 6.0 (API level 23), в Android добавлены две энергосберегающие технологии, которые увеличивают время жизни батареи, путём управление поведением приложений, когда устройство не подключено к источнику питания. Doze уменьшает потребление батареи откладыванием фоновых активностей приложений, использующих процессор и сеть, когда устройство не используется долгий период времени. App Standby откладывает использование процессора и сети приложениями, с которыми пользователь долго не взаимодействовал.
    Doze и App Standby управляют поведением всех приложений, работающих в Android 6.0 и выше, вне зависимости от того, используется TagetSdkVersion 23 или нет. Для обеспечения удобства взаимодействия пользователя с вашим приложением, протестируйте его в режимах Doze и App Standby и внесите необходимые корректировки в его код. Вся дополнительная информация под катом.

29 октября 2015 г.

Изменения в Android 6, часть вторая

    Это вторая часть перевода (первая здесь) и предупреждение тоже самое: читайте оригинал и сообщайте мне об ошибках

Изменения в Android 6.0: от букмарков до Android for Work

Условие: По тексту будет часто использоваться конструкция “Android 6.0 (API level 23)”. Её использует сам Google и, потому, использую и я. Возможно это поможет избежать ситуации, если в будущем Android 6 будет охватывать API других версий и если на одну версию API будет несколько версий Android 6.

23 октября 2015 г.

Изменения в Android 6, часть первая

    Эта запись - не точный перевод официальной статьи от Google: https://developer.android.com/intl/ja/about/versions/marshmallow/android-6.0-changes.html Если вы владеете английским языком на уровне, достаточным для комфортного чтения, лучше обратитесь к первоисточнику. Также мне будет полезно, если вы укажете на ошибки перевода, особенно в матчасти.

Изменения в Android 6.0: от пермишенов до выделения текста

    Условие: По тексту будет часто использоваться конструкция “Android 6.0 (API level 23)”. Её использует сам Google и, потому, использую и я. Возможно это поможет избежать ситуации, если в будущем Android 6 будет охватывать API других версий и если на одну версию API будет несколько версий Android 6.
   
Для реализации новых свойств и возможностей, Android 6.0 (API level 23) включает разнообразные изменения системы и изменение API. Этот документ освещает те из них, которые вам нужно понимать и которые затронут ваши приложения.
    Если вы ранее публиковали приложения под Android, будьте готовы, что изменения платформы заденут ваши приложения.

15 октября 2015 г.

Спасаемся от Андроидлокеров (Trojan-Ransom)

    Вчера ко мне обратился знакомый с проблемой, которая была когда-то популярна в Windows, а затем пришла под Android. На смартфоне работал троян-вымогатель. Он запускался вместе с самой системой и в течении трёх секунд показывал свой экран поверх всех прочих, полностью блокируя доступ к интерфейсу Андроида. Картинка справа - это как раз скриншот с моего тестового телефона. Реализовано это было штатной возможностью Device Admin. В отличие от обычных полноэкранных приложений, экран вымогателя нельзя было убрать нажатием Home или свайпом от области уведомлений и вниз. Собственно, это одна из тех возможностей, которые есть у приложения, использующего права DA.

    Однако избавиться от подобных троянов можно, если только они не заблокировали доступ паролем (хотя и здесь есть самая последняя надежда). Сделать это можно несколькими способами, но все они связаны с работой в командной строке, с подключением устройства по adb. И это не так уж сложно, даже если вы не знаете, что такое adb. И, прежде чем мы начнём, сразу скажу, где взять adb (кроме Android SDK). Вот здесь.

16 марта 2015 г.

Android Asset Packaging Tool: команды, параметры, вот это всё

    Страннота, но я не нашёл официальной документации для aapt на https://developer.android.com/. А между тем утилита нужная, когда речь идёт о работе с apk. Конечно, можно обойтись любым архиватором, но блин, кто его знает, какой баг притянет с собой этот архиватор в новой версии? В этом плане aapt мне видится более правильным.
    Итак (я вендоёб): aapt.exe 2> d:\aapt.txt и под кат.