22 ноября 2018 г.

Когда в Android Studio отсуствует Module

    Ещё одна сверх короткая запись.
Этот модуль должен быть доступен сразу
Но если его нет, то, видимо, эта запись для вас

    Бывала ли у вас с Android Studio проблема, что проект нифига не собирается, в проект даже Android SDK не подключается, кнопка синхронизации с файлами Gradle недоступна, либо просто ничего не делает. И при этом Студия то и дело сообщает об ошибке
java.lang.IllegalArgumentException: Argument for @NotNull parameter 'message' of com/android/tools/idea/gradle/project/sync/GradleSyncState.syncFailed must not be null
    Вот так выглядит ситуация, когда проблемы нет. В случае воспроизведения этой ошибки здесь будет только 1.8 (ну или другая версия JDK) и всё:
Когда проблема решена


5 августа 2018 г.

Изменения поведений в Android P. Часть 2: от тегирования сокетов до ещё большего урезания Apache HTTP client (дважды!)

Последняя публичная бета
Дальше — релиз

     Эта статья является переводом второй половины вот этой: https://developer.android.com/preview/behavior-changes.html. Как всегда, я рекомендую читать оригинал.
    Перевод первой половины: https://myachinqa.blogspot.com/2018/04/android-p-1.html

   Теги сокетов

    До Android P, если сокет был затеган методом setThreadStatsTag(), то при использовании binder IPC с ParcelFileDescriptor контейнером для отправки сокета другому процессу, тег слетал.
    В Android P это поведение изменилось и теперь в этом сценарии тег сохраняется. Такое изменение может повлиять на оценки статистик сетевого трафика, если, например, получить их у метода queryDetailsForUidTag(). Чтобы вернуть старое поведение  вам нужно вызвать untagSocket() перед отправкой сокета другому процессу.

Сообщение о доступном объёме байтов в сокете

    Если вызвать метод available() после shutdownInput(), то будет возвращён 0.

Больше данных о сетях для VPN клиентов

    До версии платформы ниже Android P класс NetworkCapabilities сообщал ограниченный набор данных для VPN. Например, сообщал TRANSPORT_VPN, но не NET_CAPABILITY_NOT_VPN. Из-за этого разработчикам было трудно понимать, приведёт ли использование VPN к расходу средств пользователя. К примеру, проверка NET_CAPABILITY_NOT_METERED не определяла, поднят VPN на сети с оплатой трафика или же на безлимитной сети.
    Начиная с Android P, когда VPN вызывает метод setUnderlyingNetworks(), система просуммирует транспорты и свойства всех сетей, на которых запущено подключение и вернёт нормальную совокупность свойств этих сетей.

19 апреля 2018 г.

Почему мой новый Android телефон не поддеривает Quick Charge, но быстро заряжается на родной зарядке с Type C разъёмом?

То самое зарядное устройство
    Заказал я как-то на Aliexpress зарядное устройство на 5 портов — 4 просто мощных (до 15 Ватт) и одно QC 3.0. Устройство приехало, планшет на microUSB заряжало быстро. Быстро заряжает и Power Bank от Xiaomi. Но вот мои Pixel 2 и Nexus 5x заряжаются от него как от обычного зарядного устройства. Т.е. никаких 15/18 Ватт, максимум 7,5, т.е. даже не 8 Ватт. Но почему? Устройство ведь современное!
    tl;dr: я — дурак. Зарядка не может иметь выход не Type C. Деньги на ветер.


4 апреля 2018 г.

Изменения поведений в Android P. Часть 1: от доступа к датчикам до возможных проблем взаимодействия с сетью

    Эта статья является переводом первой половины вот этой: https://developer.android.com/preview/behavior-changes.html. Как всегда, я рекомендую читать оригинал.


    В Android P есть множество изменений поведения системы и большая их часть скажется на всех приложениях, вне зависимости от заявленного в них target. Разумеется, есть и такие изменения, которые будут применены только к тем приложениям, в которых объявлена поддержка Android P. Для максимальной ясности описания, эта запись будет разделена на несколько частей. В первой статье будет описана часть изменений, применимых ко всем приложениям, во второй статье будет продолжение описания этих изменений. В третьей статье будут описаны те изменения, которые коснутся приложений, заявивших поддержку Android P.

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

18 марта 2018 г.

Android P: Возможности и API. Ч. 2: от Анимации до Переворота

    Это продолжение перевода, начатой здесь: https://myachinqa.blogspot.ru/2018/03/android-p-api-1-wi-fi-rtt-imagedecoder.html Разумеется, я снова рекомендую во-первых читать оригинал, во-вторых дождаться финальной версии статьи. Пока делался перевод второй части, я уже увидел изменения, которые Google успел сделать за несколько дней. Думаю, к релизу их будет ещё несколько.
    Чтобы хоть как-то оправдать чтение моего перевода, а не оригинала, я добавил свои комментарии, помогающие прояснить некоторые возможные вопросы.

  Анимация

    В Android P появился новый класс для отрисовки и отображения анимированных GIF и WebP — AnimatedImageDrawable. Как и в ситуации с AnimatedVectorDrawable, анимацией в AnimatedImageDrawable управляет RenderThread. Операции декодирования RenderThread выполняет в рабочем потоке, потому они не мешают самому RenderThread. Благодаря такой реализации в вашем приложении могут быть анимированные изображения и при этом нет нужды заботиться их управлением или переживать, что они будут оказывать влияние на UI поток.

13 марта 2018 г.

Форматирование карты памяти как внутренней памяти. Возвращение Android Adoptable Storage

Получаем вот этот экран
    В Android 6, кроме прочего, появилась встроенная возможность форматировать карточки памяти как часть внутренней памяти — adoptable storage. Это отлично, это удобно. Конечно, мрази-производители убирали эту возможность, но МОЖЕТ БЫТЬ решение ниже может помогать и в случае таких производителей.

    В моём же варианте речь про Android Emulator. Дело в том, что
ещё недавно образы в эмуляторе позволяли форматировать «карты памяти» так, чтобы они становились внутренней памятью. Без этого вы не можете, к примеру, выполнить простое
adb push myDir /sdcard/

11 марта 2018 г.

Android P: Возможности и API. Ч. 1: от Wi-Fi RTT до ImageDecoder

Подсвечивание новых API

    Эта статья является переводом вот этой: https://developer.android.com/preview/features.html Как и всегда раньше, я рекомендую читать оригинал. Т.к. в оригинале 100% будут изменения текста, я буду обновлять и свою статью. Так что разумнее всего читать её после релиза. И эту, и оригинал — смотря что вам удобнее.
    Кроме того, здесь лишь половина от оригинала. Вторая часть находится под заголовком «ч. 2». Так и читать попроще, и корректировать точнее.

    В Android P вводится несколько отличных фишек для пользователей и разработчиков. Этот документ кратко описывает, что нового появилось именно у разработчиков.

    Для изучения новых API, прочтите отчёт по API diff или посетите страницу со списком всех Android API — на ней новые API подсвечены, чтобы их было проще увидеть.
    Также ознакомьтесь со страницей «Изменение поведений Android P» (TODO: когда переведу и эту страницу, ссылку заменю), чтобы прикинуть, в каких местах могли быть задеты ваши приложения.

7 марта 2018 г.

Android эмулятор не запускается с ошибкой PANIC: Missing emulator engine program for 'x86' CPU

Утилита имеет множество опций,
включая аргументы quemu
    Если вы привыкли запускать Android эмулятор из командной строки (а если не привыкли — рекомендую), то могли заметить, что в последних версиях она перестала запускать самые новые эмуляторы. Скажем, она не сможет запустить эмулятор Android 8.1 на Pixel 2.
    В моём случае возникает вот такая ошибка:
umnik@myachin: > emul @Pixel_2_API_27
PANIC: Missing emulator engine program for 'x86' CPU.
    Пусть вас не смущает emul. Это просто алиас на  $ANDROID_HOME/tools/emulator. В общем, если вы столкнулись с похожей проблемой, то вот решение.

24 февраля 2018 г.

PyCharm под Linux не сохраняет пароли и токены

Ну всё, заработало
    Если под вашей Kubuntu, openSUSE или любом другом дистрибутиве без GNOME установленный PyCharm/AndroidStudio/IDEA или иной продукт JetBrains не может никак сохранить пароль или токен от вашей любимой системы контроля версий, то, возможно, вы столкнулись с той же самой проблемой, что и я. В моём случае PyCharm Community не сохранял токен для GitHub, из-за чего я не мог удобно работать с ним.
    Решение супер простое. Нужно просто установить gnome-keyring. Всё, проблема решена. Теперь при сохранении пароля/токена поднимется запрос пароля кейринга, куда это пароль/токен и будет сохранён.

3 февраля 2018 г.

Проблема запуска Android emulator из командной строки

Хочется, но не удаётся
    Если вы попытались запустить эмулятор Android из командной строки и словили ошибку
ERROR:android/android-emu/android/qt/qt_setup.cpp:28:Qt library not found at ../emulator/lib64/qt/lib
для GNU/Linux или
emulator/qemu/windows-x86_64/qemu-system-i386.exe': No such file or directory
для Windows, то вам сюда.

5 января 2018 г.

Как работает Now Playing в Google Pixel 2

Now Playing распознал гимн СССР
    Да нет никакой тайны, как работает распознавание окружающей музыки в Pixel 2. Тут, скорее, интересны мелкие детали. Если вы не знаете, что такого особенного в Now Playing и чем это отличается от распознавание другими инструментами, тем же Ассистентом (Google Now для России, где ещё нет Ассистента) или же Google Music, то мне есть чем вас удивить. Ключевыми особенностями Now Playing в том, что оно во-перых работает оффлайн, ей не нужен Интернет, во-вторых ей не нужна специальная команда для начала распознавания трека.
    Если вас это заинтересовало хотя бы с точки зрения реализации, то добро пожаловать под кат.