Это история о том, как я тестировал одно мобильное приложение для которого важным было то, что установка и работа приложения происходит за границей. Казалось бы, все должно быть просто, поменял регион в телефоне/эмуляторе или включил VPN и вот тебе счастье. Но это не всегда так, и настройка окружения может затянуться на сутки!

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

Кстати, если вы знаете еще способ, как можно было всего этого избежать, то напишите, пожалуйста.

Эмулятор не всесилен

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

Выглядит настройка интуитивно понятно. Выбираем точку на карте или поиском, или даже можно загрузить GPX файл.

GPX - это формат, который позволяет хранить и обрабатывать данные GPS, т.е. можно проложить маршрут и эмулятор будет по нему ходить

VPN тоже не спасает

Это была следующая попытка. Поставил бесплатный VPN и чудо не случилось, приложение все равно вычисляло мое реальное местоположение. А еще бесплатные VPN редко дают выбрать нужную локацию. Так что если вам нужно выбирать - выбирайте платный VPN.

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

Добавляем в связку "настройка эмулятора и VPN" спец. приложения

Есть такое приложение fake gps, которое позволяет задать свое местоположение просто поставив точку на карте! Очень крутая штука, если нужно тестировать что-то простое.

А еще стоит попробовать приложение morelocale 2. Оно в один клик меняет локаль (язык и страну) в ОС. Не нужно лазить в настройки, искать смену региона и языка.

Но и добавление этих приложений не решило мою задачу (сымитировать установку и работу приложения заграницей). И тут подходим к следующему источнику, откуда аппка узнает мою реальную геопозицию.

Мобильная сеть, как источник геопозиции

Не секрет, что сим-карта может подсказывать приложениям о геопозиции юзера. В случае с физическим устройство все просто - надо вытащить симку.

На счет авиа-режима не уверен, но по личному опыту не решает проблему

В эмуляторе это решается через выполнение пары команд в adb (если не знаешь что это, читай статью "ADB - лучшее начало для погружения в тестирование Android"):

adb shell
su
setprop gsm.operator.iso-country <код страны>
setprop gsm.sim.operator.iso-country <код страны>

Код страны можно взять в доке ВК для разработчиков: https://dev.vk.com/reference/country-codes. Команда setprop задает свойства эмулятора. Полный список свойств и значений можно посмотреть командой getprop.

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

Идем к разработке

Рассказываем что хотели сделать, рассказываем и показываем скринкаст с тем, что делали выше и спрашиваем: "Как решить задачу?". Скорее всего тебе дадут какие-то подсказки, например, мне порекомендовали подменить ответы пары вызовов API. Сделал, но все равно решить полностью задачу не удалось, приложение все также понимало где я нахожусь.

Идем к менеджеру/лиду/etc, но...

  1. Предварительно отписываемся в задаче, что не удалось подменить геопозицию полностью и честно проверить работу приложения.

  2. Заводим задачу на доработку приложения, чтобы у тестирования был простой способ имитировать геопозицию в нужно стране. И вот это очень важный момент:

Если для успешного тестирования тебе нужен отладочный механизм - требуй его. Лучше всего просить еще на этапе начала разработки.

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

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

Скромно приглашаю читать мой блог в телеграмме "Тестировщик" :)

Комментарии (7)


  1. avelor
    20.05.2022 00:42
    +2

    На физических девайсах можно сделать так

    1. Берем штук 5 роутеров дешманских

    2. На них настраиваем sid и mac точек доступа в нужном регионе (есть публичные данные, например тут https://www.wigle.net ) Выбираем сети похожие на домашние

    3. Раздаём вайфай с впн/прокси в нужном регионе. Желательно резидентные/мобильные

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

    5. Ессно вырубаем симку и gps который спутниковый

    Вместо 4-5 можно использовать/совместить с глушилкой маломощной (могут быть сложности с покупкой готовых).

    В целом всё. Ну и у wigle есть апишка, настройку роутеров можно автоматизировать, делал PoC на микротиках.


  1. Hlad
    20.05.2022 08:25
    +3

    1. С симки можно считать ICCID, и расшифровать его, узнав страну и оператора. Так что симку придётся вытащить
    2. После того, как симка вытащена, телефон всё равно может совершить экстренный звонок в службы спасения. То есть, ему доступна информация о вышках сотовой связи по соседству. По ним он может определить своё местонахождение с точностью до 400-500 метров. Так что после вытаскивания симки надо врубить авиарежим
    3. Доступные сети WiFi и устройства Bluetooth тоже способны «спалить» местонахождение. Так что WiFi и BT тоже придётся вырубить.
    4. IP-адрес и маршруты до сайтов тоже палят контору на раз. Так что придётся включить VPN.
    5. Ну и модуль GPS, само собой надо вырубить…


    1. ferosod
      20.05.2022 09:51
      +3

      1. Для общения с API бэкенда использовать NFC или ИК порт


      1. avelor
        20.05.2022 14:18

        ndis по usb.

        но некоторые приложеньки требуют как минимум вайфая включенного, чтоб определить расположение, без этого просто не запускаются


    1. Blacklynx
      20.05.2022 13:27

      1. С симки можно считать ICCID, и расшифровать его, узнав страну и оператора. Так что симку придётся вытащить

      А как обычное приложение может получить доступ к этой информации?


      1. Hlad
        20.05.2022 13:41

        stackoverflow.com/questions/9751823/how-can-i-get-the-iccid-number-of-the-phone

        У автора, как я понимаю, программа достаточно специфическая. Так что она может и напрямую запросить у пользователя все требуемые для этого разрешения


        1. Sovetkali Автор
          20.05.2022 17:31

          Ого, сколько интересного в комментах! Чувствую какой я дилетант в этой теме.

          Да, мне посчастливилось тестировать такое приложение, которое (по моему опыту), даже получая серверные конфиги начинает определять гео.