Локальное тестирование для Android-приложения с использованием Cloud Endpoints для Google App Engine

Я разрабатываю приложение для Android, которое использует Google Cloud Endpoints в Google App Engine (на Python) для своего бэкэнд. Приложение Android разрешает пользователю использовать Google Play Services на устройстве Android, и все это работает фантастически.

Однако теперь, когда у меня есть фактические пользователи, я бы хотел протестировать это все локально, прежде чем развертывать какие-либо изменения API для API приложений для производства, и я не понял, как заставить приложение Android общаться с моим локальным сервером разработки в любом месте. Рекомендации по тестированию показывают, что я просто выполняю ручную мастеринг с API Explorer, но поскольку я использую Endpoints Proto Datastore для своего API, что упрощает разработку Android, это также делает API Explorer практически бесполезным, поскольку мне нужны звонки Сделать намного сложнее, чем то, что я могу создать вручную.

Один из ответов на этот вопрос предполагает, что есть способ указать клиента Android на локальном сервере, но, хотя я могу использовать аргумент -host, чтобы сервер по умолчанию dev_appserver прослушивал что-то отличное от localhost, я не могу показаться Найти способ сделать то же самое для сервера API. И даже если бы я мог это сделать, это может быть только первый шаг к полной локальной тестовой настройке моего приложения для Android.

Может ли кто-нибудь опубликовать более подробную информацию о том, как я могу это сделать, или, если возможно, просветите меня о лучших методах тестирования приложений Android, использующих конечные точки Google Cloud в App Engine? Заранее благодарим за любые ответы.

    В локальной среде dev_appserver является сервером API. Если вы настроили его так, чтобы он был доступен с компьютеров, отличных от localhost (т.е. другого компьютера / устройства в сети), также должны быть доступны запросы API.

    Однако в настоящее время проблема с локальным сервером и запросами gzipped. Пока это не будет исправлено, вам нужно отключить gzipping в клиентской библиотеке вашего приложения для Android (см. Этот пост ).

    Хорошо, наконец, это заработало, спасибо за советы, Дэн! Вот оставшиеся детали, которые бы сэкономили мне несколько часов – надеюсь, это полезно кому-то другому.

    1) Как и ожидалось ранее, dev_appserver.py необходимо запустить с -host = 0.0.0.0, чтобы он мог прослушивать локальную сеть.

    2) Чтобы правильно проанализировать токен идентификатора, чтобы выполнить аутентификацию пользователя, вам необходимо установить библиотеку PyCrypto – она ​​не установлена ​​по умолчанию, так что просто ее в вашем приложении app.yaml недостаточно. Здесь я нашел двоичные файлы для Windows.

    3) Затем в моем сгенерированном эквивалентном классе Tictactoe.java мне пришлось изменить DEFAULT_ROOT_URL как http://<my-local-machine>:8080/_ah/api/ (где находится моя локальная машина) , Так что запросы отправляются в локальную сеть. Альтернативно (и, возможно, менее инвазивно), вы можете использовать builder.setRootUrl по тому же адресу, откуда вы инициализируете свой строитель. Таким образом, вы не обманываете свои сгенерированные классы.

    4) Я также должен был сделать описанную здесь замену Дан.

    После выполнения этих четырех вещей все, кажется, работает сейчас, и я могу проверить свое приложение локально – ура!