У меня была похожая проблема, и эта публикация помогла мне решить мою проблему. Я забыл установить Сервисы Google Play.
Если вы используете его на своем эмуляторе, убедитесь, что у вас включены службы Google Play в
Tools -> Android -> SDK Manager -> SDK Tools -> Google play services
После установки перезагрузите Android Studio и ваш эмулятор
Мне пришлось понизить com.google.gms: google-services: с 4.1.0 до 4.0.0, и это сработало для меня. Этот пост здесь помог в этом
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.google.gms:google-services:4.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
Мое исходное предположение - то, что это могло потенциально использоваться для управления версиями.
Это - одна причина. Я думаю, что это - более обычное.
Другой для структур, которые имеют данные переменной длины.
Я не думаю, что проверка корректную упаковку или ошибки в вызывающей стороне является конкретным обоснованием позади него, но это имело бы тот эффект.
Это используется для управления версиями. Хорошим примером является вызов GetVersionEx. Можно передать или в OSVERSIONINFO или в OSVERSIONINFOEX. OSVERSIONINFOEX является надмножеством OSVERSIONINFO, и единственный способ, которым знает ОС, в котором Вы передали, dwOSVersionInfoSize участником.
Частично управление версиями, главным образом безопасность..., чтобы препятствовать тому, чтобы вызванная функция ввела по абсолютному адресу в память, которая не была частью структуры, передало в.
Это также позволяет API WIN32 сделать минимальную сумму исправности, проверяющей данные, передаваемые в.
Например, общая ошибка состоит в том, чтобы структура WIN32 была передана в с неправильным или деинициализировала cbSize и когда это происходит, API WIN32 обычно просто возвращает неудавшийся результат, вместо того, чтобы попытаться обработать то, что, кажется, поврежденные данные.