Вот так сел учить 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 такого не было.
И о плохом для конечного пользователя.
После Hard Reset приложения восстанавливаются с примерно теми же настройками (если разработчик это не запретил явно).
Так вот пермишен геолокацию после такого восстановления наследуется, но игнорируется «Только когда приложение на переднем плане». То есть если вы дали приложению разрешение на локацию вида «only while using the app», то при восстановлении после сброса настройка будет на «Allow all the time».
Возможно поведение выше — это костыль, пытающийся хоть как-то исправить ошибку неправильного восстановления прав.
После Hard Reset приложения восстанавливаются с примерно теми же настройками (если разработчик это не запретил явно).
Так вот пермишен геолокацию после такого восстановления наследуется, но игнорируется «Только когда приложение на переднем плане». То есть если вы дали приложению разрешение на локацию вида «only while using the app», то при восстановлении после сброса настройка будет на «Allow all the time».
Возможно поведение выше — это костыль, пытающийся хоть как-то исправить ошибку неправильного восстановления прав.
Если вдруг кто не знает, для Android 5.0 и новее есть классная утилита scrcpy: https://github.com/Genymobile/scrcpy
Утилита кросс-платформенная. Её суть — иметь на экране компьютера доступ к вашим реальным устройствам. Ну точно как с эмуляторами. На скриншоте у меня запущен эмулятор 5.1 и мой реальный Pixel 2
Для Linux можете поикать готовые пакеты в репозиториях, даже если на ГитХабе про это не сказано. К примеру вот для openSUSE: https://software.opensuse.org/package/scrcpy?search_term=scrcpy Только используйте не экспериментальный (он не работает сейчас, по крайней мере для 15.1), а комьюнити.
Утилита кросс-платформенная. Её суть — иметь на экране компьютера доступ к вашим реальным устройствам. Ну точно как с эмуляторами. На скриншоте у меня запущен эмулятор 5.1 и мой реальный Pixel 2
Для Linux можете поикать готовые пакеты в репозиториях, даже если на ГитХабе про это не сказано. К примеру вот для openSUSE: https://software.opensuse.org/package/scrcpy?search_term=scrcpy Только используйте не экспериментальный (он не работает сейчас, по крайней мере для 15.1), а комьюнити.
GitHub
GitHub - Genymobile/scrcpy: Display and control your Android device
Display and control your Android device. Contribute to Genymobile/scrcpy development by creating an account on GitHub.
Forwarded from fudoshi
топовые девайсы на ios-автотестах
Дохнут не только Android устройства, но и iOS. Законы физики не щадят ничего и производитель значения не имеет. Ждём, когда наука шагнёт сильно вперёд и батареи перестанут деградировать и пухнуть.
https://myachinqa.blogspot.com/2019/08/no-changes-detected-jetbrains.html
Если вдруг у вас тоже среда разработки когда-нибудь скажет «Изменений нет»
Если вдруг у вас тоже среда разработки когда-нибудь скажет «Изменений нет»
Blogspot
Ответ No changes detected в продуктах JetBrains при попытке сделать коммит
Блог об Android и тестировании программного обеспечения. A blog about Android abd software testing.
Which API should I use? | SMS Verification APIs | Google Developers
https://developers.google.com/identity/sms-retriever/choose-an-api
https://developers.google.com/identity/sms-retriever/choose-an-api
Google for Developers
Which API should I use? | Credential Verification | Google for Developers
Если вы работаете с кодами в SMS, например для 2FA, то под Android следует реализовать вот такой подход. Плюсы:
— автоматически отдаёт вам код из SMS
— не требует пермишен на чтение всех SMS
— обработка на стороне системы. То есть этот код никуда не пересылается дополнительно
Минусы:
— от пользователя требуется нажимать Разрешить на каждое такое SMS
— нужно реализовывать. Рискуете столкнуться с «Да у нас и так всё работает, зачем оно нам сейчас. В бэклог»
— к формату SMS есть определённые требования. Например, код может быть только цифровым и иметь 4-10 цифр
Вообще там 2 апи. Одно на вашу реализацию и ожидает хеш, другое общее для кодов и универсально для многих.
— автоматически отдаёт вам код из SMS
— не требует пермишен на чтение всех SMS
— обработка на стороне системы. То есть этот код никуда не пересылается дополнительно
Минусы:
— от пользователя требуется нажимать Разрешить на каждое такое SMS
— нужно реализовывать. Рискуете столкнуться с «Да у нас и так всё работает, зачем оно нам сейчас. В бэклог»
— к формату SMS есть определённые требования. Например, код может быть только цифровым и иметь 4-10 цифр
Вообще там 2 апи. Одно на вашу реализацию и ожидает хеш, другое общее для кодов и универсально для многих.
Не смотря на то, что здесь https://android-developers.googleblog.com/2019/08/final-beta-update-official-android-q.html сказано «To get started developing, download the official API 29 SDK and tools into the stable release of Android Studio 3.4...», оно не работает. По крайней мере у меня вернулась старая проблема