Редактировать : следующее официальное решение от Google ( ссылка )
Сводка
Тема Google Maps SDK вылетает приложение (ArrayIndexOutOfBoundsException) - предлагаемое решение
Описание
В 23 апреля 2020 года, начиная с 11:30 PDT , Google работал в течение 4 часов обновить конфигурацию мобильного компонента Maps, вызывая сбои в Maps SDK для Android и iOS. Приложения на устройствах, которые загрузили эту версию конфигурации (в период простоя), были уязвимы для cra sh. Обходные решения предлагаются для SDK для карт для Android и iOS.
SDK для карт для Android
SDK для карт для Android v2 (включено в Сервисы Google Play)
Обновления Сервисов Google Play для исправления cra sh были опубликованы на всех устройствах с Сервисами Google Play версии 17.4.55 и новее. После установки обновления номер версии Служб Google Play на устройстве не изменяется. От разработчиков или конечных пользователей не требуется никаких действий для получения обновленного модуля Карт; однако разработчики могут проверить наличие модуля на данном устройстве с помощью следующей команды adb:
adb shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider
Вы должны увидеть строку Module Set ID: maps
, указанную в разделе Module Sets
.
Module Set ID: maps, Module Set Version: 2015120015120000
Скорость sh использования Maps SDK для Android v2 вернулась к норме.
На данный момент, если вы не обновили свое приложение с помощью обходных путей кода на стороне клиента, указанных ниже, вам не нужно предпринимать дальнейших действий.
Если вы уже обновили свое приложение с помощью обходных путей, вы можете удалить обходной путь в последующем обновлении вашего приложения (но сохранить обходной путь безопасно).
Premium Plan Maps SDK для Android v2 или Maps SDK для Android v3 beta (stati c библиотеки)
Если ваше приложение использует Premium Plan Maps SDK для Android v2 или Maps SDK для Android v3 beta (stati c библиотеки) и все еще возникают сбои, мы по-прежнему настоятельно рекомендуем вам развернуть нижеприведенные обходные пути через обновление вашего приложения. Поскольку ваше приложение загружает стати c версию SDK, которая уязвима для плохих данных, хранящихся на некоторых устройствах, только обновление вашего приложения может решить эту проблему.
Обзор Play Store согласования
Если вы обновляете свое приложение, но испытываете задержки одобрения проверки в Play Store, отправьте заявку в службу поддержки с идентификатором пакета вашего приложения: Свяжитесь со службой поддержки . Наша служба поддержки внутренне обработает ваш запрос и ускорит одобрение.
Отрицательные отзывы в Google Play Store
Некоторые разработчики приложений спрашивали о 1-звездочных отзывах в Google Play Store, оставленный конечными пользователями из-за сбоев. Только комментарии, нарушающие политику Google Play [1], могут быть удалены. Вы также можете пометить оскорбительные отзывы в консоли Play [2]. Приложения не будут автоматически удалены из магазина Google Play из-за отрицательных отзывов. Стоит также отметить, что подсчет общего рейтинга ваших обзоров приложений благоприятствует последним обзорам, что означает, что ваш рейтинг со временем восстановится до уровня, предшествующего инциденту.
[1] Рейтинги и обзор на Play Store
[2] Сообщить о неуместных отзывах
Карты SDK для iOS
Cra sh ставки по iOS вернулись к норме. Если ваше приложение по-прежнему испытывает сбои, вам необходимо обновить и опубликовать sh ваше приложение с указанными здесь обходными путями кода.
По вопросам развертывания или ускорения работы приложения в Apple App Store обращайтесь напрямую в Apple. .
С этим обновлением мы закрываем эту проблему. Спасибо всем за терпение. Наша команда проводит углубленное внутреннее расследование этого инцидента; как можно скорее, мы опубликуем sh наш анализ (примерно через неделю). Тем временем, если у вас есть какие-либо вопросы или у вас все еще есть проблемы, пожалуйста, please подайте заявку в службу поддержки .
Обходные пути:
Конечные пользователи Android могут очистить данные уязвимого приложения (а не только кэш).
Конечные пользователи на iOS могут удалить и переустановить уязвимые приложения.
Разработчики приложений могут применять обходные пути кода, приведенные ниже в Чтобы решить эту проблему для всех своих конечных пользователей.
Обход кода для iOS:
Рекомендуемое размещение кода перед GMSServices инициализация в приложении (_: didFinishLaunchingWithOptions :) (Swift) или в приложении: didFinishLaunchingWithOptions: (Objective- C). В частности:
Swift:
let key = "GoogleMapsServerControlledParamsKey_bug_154855417"
if !UserDefaults.standard.bool(forKey: key) {
let urls = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)
if urls.count > 0 {
let paramUrl = urls[0].appendingPathComponent("com.google.GoogleMaps/ServerControlledParams", isDirectory: false)
try? FileManager.default.removeItem(at: paramUrl)
}
UserDefaults.standard.set(true, forKey: key)
}
Объектив- C:
NSString *key = @"GoogleMapsServerControlledParamsKey_bug_154855417";
BOOL keyExists = [[NSUserDefaults standardUserDefaults] boolForKey:key];
if (!keyExists) {
NSArray<NSURL *> *array =
[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory
inDomains:NSUserDomainMask];
if (array.count > 0) {
NSURL *url =
[array[0] URLByAppendingPathComponent:@"com.google.GoogleMaps/ServerControlledParams"
isDirectory:NO];
if (url) {
[[NSFileManager defaultManager] removeItemAtURL:url error:NULL];
}
}
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:key];
}
Код Обходной путь для Android:
Рекомендуемое размещение кода в Application.onCreate ():
Java
try {
SharedPreferences hasFixedGoogleBug154855417 = getSharedPreferences("google_bug_154855417", Context.MODE_PRIVATE);
if (!hasFixedGoogleBug154855417.contains("fixed")) {
File corruptedZoomTables = new File(getFilesDir(), "ZoomTables.data");
File corruptedSavedClientParameters = new File(getFilesDir(), "SavedClientParameters.data.cs");
File corruptedClientParametersData =
new File(
getFilesDir(),
"DATA_ServerControlledParametersManager.data."
+ getBaseContext().getPackageName());
File corruptedClientParametersDataV1 =
new File(
getFilesDir(),
"DATA_ServerControlledParametersManager.data.v1."
+ getBaseContext().getPackageName());
corruptedZoomTables.delete();
corruptedSavedClientParameters.delete();
corruptedClientParametersData.delete();
corruptedClientParametersDataV1.delete();
hasFixedGoogleBug154855417.edit().putBoolean("fixed", true).apply();
}
} catch (Exception e) {
}
Kotlin
try {
val sharedPreferences = getSharedPreferences("google_bug_154855417", Context.MODE_PRIVATE)
if (!sharedPreferences.contains("fixed")) {
val corruptedZoomTables = File(filesDir, "ZoomTables.data")
val corruptedSavedClientParameters = File(filesDir, "SavedClientParameters.data.cs")
val corruptedClientParametersData = File(filesDir, "DATA_ServerControlledParametersManager.data.${packageName}")
val corruptedClientParametersDataV1 = File(filesDir, "DATA_ServerControlledParametersManager.data.v1.${packageName}")
corruptedZoomTables.delete()
corruptedSavedClientParameters.delete()
corruptedClientParametersData.delete()
corruptedClientParametersDataV1.delete()
sharedPreferences.edit().putBoolean("fixed", true).apply()
}
} catch (exception: Exception) {
}
Обходные пути, представленные здесь, охватывают все доступные варианты и версии наших SDK для Android. Для уточнения (в случае, если вы выпустили более раннюю версию обходного пути, который не удалял столько файлов):
- Приложения, использующие Карты Android SDK v2, должны удалять только один файл: ZoomTables .data.
Приложения, использующие Maps Android SDK v3 beta, должны удалять только один файл: либо
DATA_ServerControlledParametersManager.data.v1. + getBaseContext (). getPackageName ()) или
DATA_ServerControlledParametersManager.data. + getBaseContext (). getPackageName ())