Бывает в тестировании и такое. У коллеги чуть не случился пожар.
Instant Run в Android Studio — отстой.
У коллеги падало моё приложение с совершенно очумительным исключением:
java.lang.RuntimeException: Unable to instantiate application com.kaspersky.clsdkexample.SampleApplication: java.lang.ClassNotFoundException: Didn't find class "com.kaspersky.clsdkexample.SampleApplication" on path: DexPathList[[zip file "/data/app/com.kaspersky.clsdkexample-l0LW8-jXK8s6meADbR3ZSw==/base.apk", zip file "/data/app/com.kaspersky.clsdkexample-l0LW8-jXK8s6meADbR3ZSw==/split_lib_dependencies_apk.apk"],nativeLibraryDirectories=[/data/app/com.kaspersky.clsdkexample-l0LW8-jXK8s6meADbR3ZSw==/lib/x86, /data/app/com.kaspersky.clsdkexample-l0LW8-jXK8s6meADbR3ZSw==/base.apk!/lib/x86, /data/app/com.kaspersky.clsdkexample-l0LW8-jXK8s6meADbR3ZSw==/split_lib_dependencies_apk.apk!/lib/x86, /system/lib, /vendor/lib]]
Разумеется, не было ни единой реальной причины, почему такое исключение могло бы вообще возникать. Проблема решилась отключением Instant Run. Так что рекомендую всем не создавать себе проблемы в будущем. Даже если "У меня всё всегда работало". Выключается в настройках, поиск по Instant Run.
У коллеги падало моё приложение с совершенно очумительным исключением:
java.lang.RuntimeException: Unable to instantiate application com.kaspersky.clsdkexample.SampleApplication: java.lang.ClassNotFoundException: Didn't find class "com.kaspersky.clsdkexample.SampleApplication" on path: DexPathList[[zip file "/data/app/com.kaspersky.clsdkexample-l0LW8-jXK8s6meADbR3ZSw==/base.apk", zip file "/data/app/com.kaspersky.clsdkexample-l0LW8-jXK8s6meADbR3ZSw==/split_lib_dependencies_apk.apk"],nativeLibraryDirectories=[/data/app/com.kaspersky.clsdkexample-l0LW8-jXK8s6meADbR3ZSw==/lib/x86, /data/app/com.kaspersky.clsdkexample-l0LW8-jXK8s6meADbR3ZSw==/base.apk!/lib/x86, /data/app/com.kaspersky.clsdkexample-l0LW8-jXK8s6meADbR3ZSw==/split_lib_dependencies_apk.apk!/lib/x86, /system/lib, /vendor/lib]]
Разумеется, не было ни единой реальной причины, почему такое исключение могло бы вообще возникать. Проблема решилась отключением Instant Run. Так что рекомендую всем не создавать себе проблемы в будущем. Даже если "У меня всё всегда работало". Выключается в настройках, поиск по Instant Run.
Forwarded from Android Security & Malware
Google has stopped providing Huawei with hardware and software products.
In other words, while Huawei can still use Android itself, most proprietary services will be inaccessible — including the Google Play Store, Gmail, and presumably anything else that requires the closed-source Play Services Framework.
https://www.androidpolice.com/2019/05/19/huaweis-future-phones-reportedly-wont-have-access-to-google-services-including-the-play-store/
In other words, while Huawei can still use Android itself, most proprietary services will be inaccessible — including the Google Play Store, Gmail, and presumably anything else that requires the closed-source Play Services Framework.
https://www.androidpolice.com/2019/05/19/huaweis-future-phones-reportedly-wont-have-access-to-google-services-including-the-play-store/
Android Police
[Update x3: Official Huawei/Honor statement] Future Huawei phones reportedly won't have access to Google services, including the…
Last week, the United States added Huawei to its 'Entity List', meaning US companies can't do business with Huawei without explicit government approval. A... by Corbin Davenport in Breaking, Google, Huawei, News
Forwarded from Android Security & Malware
This means that Huawei loses Android updates and all their users access to Google Play Store.
Tweet from @Android
https://twitter.com/Android/status/1130313848332988421
@Android: For Huawei users' questions regarding our steps to comply w/ the recent US government actions: We assure you while we are complying with all US gov't requirements, services like Google Play & security from Google Play Protect will keep functioning on your existing Huawei device.
https://twitter.com/Android/status/1130313848332988421
@Android: For Huawei users' questions regarding our steps to comply w/ the recent US government actions: We assure you while we are complying with all US gov't requirements, services like Google Play & security from Google Play Protect will keep functioning on your existing Huawei device.
Twitter
Android
For Huawei users' questions regarding our steps to comply w/ the recent US government actions: We assure you while we are complying with all US gov't requirements, services like Google Play & security from Google Play Protect will keep functioning on your…
JFYI. Использование форэграунд сервиса не будет выводить ваше приложение в Android 10 из-под действия ограничения "Старт активити из форэграунда".
TL;DR: Андроид 10 будет давить адварей, которые поднимали свой экран из ниоткуда.
Чуть подробнее. В 10-ке будет ограничение, которое заденет всех, вне зависимости от targetAPI, которое будет запрещать приложению поднимать свой экран из ниоткуда на передний план. Этим злоупотребляли всякие адвари. И некоторые полезные приложения использовали это в своих сценариях.
Такое поведение будет разрешено, если:
— Другой экран вашего приложения уже на переднем плане
— Ваше приложение доступно в бэк стеке (т.е., грубо говоря, по нажатию на Back на устройстве пользователь может вернуться к экрану вашего приложения) задачи, которая сейчас на переднем плане
— Ваше приложение получило PendingIntent от системы или же от другого приложения, находящегося на переднем плане
— У приложения есть сервис, который прямо сейчас используется каким-либо другим приложением, находящемся на переднем плане
— Ну и ещё несколько других сценариев
Так вот. Наличие форэграунд сервиса НЕ УЧИТЫВАЕТСЯ само по себе. Раньше такой сервис снимал много разных ограничений, но не сейчас. Так что если вы создали этот сервис для выполнения какой-то очень длительной задачи и пользователь покинул ваше приложение, то высока вероятность, что вы не сможете поднять себя из фона по выполнению задачи. Если для вас это важно, используйте разрешённые варианты работы для этого сценария.
TL;DR: Андроид 10 будет давить адварей, которые поднимали свой экран из ниоткуда.
Чуть подробнее. В 10-ке будет ограничение, которое заденет всех, вне зависимости от targetAPI, которое будет запрещать приложению поднимать свой экран из ниоткуда на передний план. Этим злоупотребляли всякие адвари. И некоторые полезные приложения использовали это в своих сценариях.
Такое поведение будет разрешено, если:
— Другой экран вашего приложения уже на переднем плане
— Ваше приложение доступно в бэк стеке (т.е., грубо говоря, по нажатию на Back на устройстве пользователь может вернуться к экрану вашего приложения) задачи, которая сейчас на переднем плане
— Ваше приложение получило PendingIntent от системы или же от другого приложения, находящегося на переднем плане
— У приложения есть сервис, который прямо сейчас используется каким-либо другим приложением, находящемся на переднем плане
— Ну и ещё несколько других сценариев
Так вот. Наличие форэграунд сервиса НЕ УЧИТЫВАЕТСЯ само по себе. Раньше такой сервис снимал много разных ограничений, но не сейчас. Так что если вы создали этот сервис для выполнения какой-то очень длительной задачи и пользователь покинул ваше приложение, то высока вероятность, что вы не сможете поднять себя из фона по выполнению задачи. Если для вас это важно, используйте разрешённые варианты работы для этого сценария.
Всякий раз, когда я перехожу на новую мажорную версию Android, я делаю полный сброс. Потому что помню как выяснил, что при обновлении по воздуху с Android 4.4 на Android 5 часовой пояс Москвы оставался +4, а если прошить по шнуру с вайпом или просто вайпнуть после апгрейда, то часовой пояс становился +3.
И ведь это изменение, которое заметно глазами. А могут быть проблемы, не заметные сходу, но раздражающие и с неясной природой.
И ведь это изменение, которое заметно глазами. А могут быть проблемы, не заметные сходу, но раздражающие и с неясной природой.
Теперь система сообщает, что медиа канал погашен, когда медиа проигрывается. Beta 4
Приложения, не учитывающие системную тему в Android 10 выглядят чужеродно. К релизу ОС стоит поддержать эту фичу хотя бы на уровне Theme.AppCompat.DayNight.
Сейчас солнце и я включил светлую тему в системе, но почти все приложения остались в чёрной теме (у меня AMOLED). В итоге я вижу всё прекрасно в лончере и настройках, но ничего не вижу в сторонних приложениях.
Сейчас солнце и я включил светлую тему в системе, но почти все приложения остались в чёрной теме (у меня AMOLED). В итоге я вижу всё прекрасно в лончере и настройках, но ничего не вижу в сторонних приложениях.
Вот так сел учить Java по лекциям Mail.Ru а тебе говорят, что void возвращает булевы значения
https://dontkillmyapp.com/ Здесь собрана вся боль всех разработчиков и тестировщиков под Android.
https://android.googlesource.com/platform/frameworks/base/+/854060a%5E%21/
В старших версиях Android (7 и выше, вроде) появилась вот такая проверка, кто и как дёргает am (adb shell am). Вылилось это, кроме прочего, в то, что теперь через adb нельзя переводить время. Ну и в разное другое.
Если для тестов вам это всё-таки нужно, то используйте рутованные устройства и эмуляторы. НО! Собственно, ради чего я это пишу. Есть 3 типа образов эмуляторов (не считая типов процессоров): без гугла совсем, с Google API и с Google Play Services и Market. Вот в последнем просто нет su и потому для тестов, связанных с повышением привилегий, использовать этот образ не получится.
При прочих равных выбирайте образ с Google API.
В общем, как переводить время:
1. Отключаем автоматическую установку времени: adb shell settings put global auto_time 0 (1 для включения обратно)
1.1. Можно, но не обязательно, отключить автоматическую тайм зону: adb shell settings put global auto_time_zone 0 (1 для включения обратно)
1.2. Можно, но не обязательно, включить 24 часовой формат времени: adb shell settings put system time_12_24 24 (12 для формата AM/PM)
2. Проверяем версию Android
2.1. Если 22 и ниже (т.е. 5.1 и старее), то используем unix timestamp
2.2. Если 23 и выше (т.е. начиная с 6-ки), то используем формат MMDDHHmmCCYY. Месяц, день, часы, минуты, год. Всё, кроме года, двухчисловое, год — четыре числа. CC — это 20, YY — это 19, соотвественно вместе — 2019. Т.е. прямо сейчас 070810582019.
2.3. Если 24 и выше, то дополнительно нужно выставлять время от su. Об этом ниже
3. Выставляем время: adb shell [su 0] date NEW_TIME. Если это Android 7 и новее, то нужно добавить su 0. Аналогично и для следующей команды
4. Уведомляем систему, что время изменилось (если не хочется ждать целую минуту): adb shell [su 0] am broadcast -a android.intent.action.TIME_SET
Повторю, su вам доступен (безо всяких подтверждений действий в UI), только если это образ БЕЗ Play Services.
В старших версиях Android (7 и выше, вроде) появилась вот такая проверка, кто и как дёргает am (adb shell am). Вылилось это, кроме прочего, в то, что теперь через adb нельзя переводить время. Ну и в разное другое.
Если для тестов вам это всё-таки нужно, то используйте рутованные устройства и эмуляторы. НО! Собственно, ради чего я это пишу. Есть 3 типа образов эмуляторов (не считая типов процессоров): без гугла совсем, с Google API и с Google Play Services и Market. Вот в последнем просто нет su и потому для тестов, связанных с повышением привилегий, использовать этот образ не получится.
При прочих равных выбирайте образ с Google API.
В общем, как переводить время:
1. Отключаем автоматическую установку времени: adb shell settings put global auto_time 0 (1 для включения обратно)
1.1. Можно, но не обязательно, отключить автоматическую тайм зону: adb shell settings put global auto_time_zone 0 (1 для включения обратно)
1.2. Можно, но не обязательно, включить 24 часовой формат времени: adb shell settings put system time_12_24 24 (12 для формата AM/PM)
2. Проверяем версию Android
2.1. Если 22 и ниже (т.е. 5.1 и старее), то используем unix timestamp
2.2. Если 23 и выше (т.е. начиная с 6-ки), то используем формат MMDDHHmmCCYY. Месяц, день, часы, минуты, год. Всё, кроме года, двухчисловое, год — четыре числа. CC — это 20, YY — это 19, соотвественно вместе — 2019. Т.е. прямо сейчас 070810582019.
2.3. Если 24 и выше, то дополнительно нужно выставлять время от su. Об этом ниже
3. Выставляем время: adb shell [su 0] date NEW_TIME. Если это Android 7 и новее, то нужно добавить su 0. Аналогично и для следующей команды
4. Уведомляем систему, что время изменилось (если не хочется ждать целую минуту): adb shell [su 0] am broadcast -a android.intent.action.TIME_SET
Повторю, su вам доступен (безо всяких подтверждений действий в UI), только если это образ БЕЗ Play Services.
Интересное поведение Android 10, которое нужно будет учитывать.
Система показывает уведомление о том, что у некого приложения слишком широкие права на геолокацию.
В Beta 4 такого не было.
Система показывает уведомление о том, что у некого приложения слишком широкие права на геолокацию.
В Beta 4 такого не было.