вторник, 15 августа 2017 г.

Не работает Google Play (Playmarket) на Android 6 Samsung A500f

6 версия Андроид для Samsung A500F (2015) вышла довольно давно. Но читая 4pda и видя множественные сообщения о проблемах даже не собирался обновлять. Однако по прошествии времени телефон начал активно потреблять ресурсы аккумулятора и пришел терпению конец. В результате отправился обновляться на новую версию и конечно путь был тернист.
Я сбился со счета количества разных прошивок, которые побывали на телефоне. Все версии прошивок замечательные, но одна системная проблема - через домашний wifi Google Play на отрез отказывался работать выдавая "play market ошибка время ожидания истекло". При этом через мобильную сеть все работало, через рабочий wifi так же. На домашнем же роутере Keenetik вроде как соединение проходило и приложения работали, но отдельные с какими то провалами и всплесками. Телефон порой хотелось немного поколотить.

Битва длилась добрых две недели - победил разум )


Ну во первых все ранее описанные способы (чистка кэша, удаление аккаунта, сброс к заводским настройкам и т.д.) не раз описанные в интернете, были проверены и пришло понимание что проблема где то в другом месте. Тем более что народ судя по 4pda долго и без особых успехов ломал головы.


Решений нашлось несколько.

На не рутованом телефоне в принципе есть 3 способа выхода из ситуации.

1. Заменить роутер. (Минус - доп затраты). Судя по многочисленным крикам в сети - большей частью страдают люди на старых роутерах, со старыми прошивками. В моем случае это Keenetik первой версии, обновления прошивки давно перестали выходить. Вариант в принципе неплохой, если действительно у вас очень старый роутер, но мне не подходил. Не время еще. Да и как то это не в моем стиле.


2. Перенастроить роутер подобрав нужное значение mtu (специфично от провайдеров и конкретных моделей роутеров - много разных значений встречается на которых у людей работало). Подобрать свое можно с помощью windows программы TCPOptimizer. Запускаем программу, переходим на вкладку MTU, далее нажимаем Largest MTU и на основании пинга фрагментированными пакетами определяется рекомендуемое нам значение. Далее по инструкции к конкретному роутеру.

Минусы п.1 и п.2 которые сразу мне вырисовывались - это лечение конкретного случая, но не проблемы телефона. Завтра уедешь куда и будешь иметь проблемы с wifi.

3. Установить какой либо VPN клиент (рекомендовать конкретный не стану) и использовать для таких целей его. Через VPN все сервисы работают нормально - одно неудобство, ВПН жрет деньги, если он хороший.

Более широкое поле деятельности нам открывает root. На рутованном теле.

1. Можно так же поменять значение mtu на самом телефоне. Сам способ мне не очень понравился по определенным причинам, но не упоминать его считаю нельзя. Запускаем терминал
su
ifconfig wlan0 mtu 1400


включаем wifi - все работает. Минус - после включения/выключения WiFi операцию надо повторить. Для ее упрощения создаем на телефоне скрипт с таким содержимым -

#!/system/bin/sh
ifconfig wlan0 mtu 1400

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

2. После долгих курения манов и чтения различных англоязычных сайтов отправился искать как изменить требуемый параметр системы. На Unix-подобных все просто, они открыты, отредактировла параметр, ребутнулся и полетел. Android далеко не открытая система. Нам потребуется ядро с поддержкой init.d делал на hadesKernel v2.6 Добавил в /etc/init.d файл со следующим содержимым -

#!/system/bin/sh
sysctl -w net.ipv4.tcp_mtu_probing=1

После запуска системы данный параметр устанавливает нужное значение поменяв 0 на 1. Нужно обязательно убедиться что поддержка на телефоне init.d завелась и корректно работает. На тему установки и проверки и без меня полно статей.

Проверять наше решение можно как любой утилитой позволяющей править sysctl (их правка только до ребута работает), так и посмотрев содержимое файла /proc/sys/net/ipv4/tcp_mtu_probing. Значение должно быть 1.





tcp_mtu_probing (integer; default: 0; since Linux 2.6.17):

This parameter controls TCP Packetization-Layer Path MTU Discovery. The following values may be assigned to the file:

0 Disabled

1 Disabled by default, enabled when an ICMP black hole detected

2 Always enabled, use initial MSS of tcp_base_mss.


Последний способ лучшее и правильное решение. Теперь можно успокоиться и улучшать телефон далее.
Судя по проблеме - я не думаю что это проблема исключительно Samsung A5 (2015). И предполагаю что возможно и на других телефона Google Play не запуститься из за проблемы конфигурации TCPIP на связке роутер/телефон, поэтому и расписал более менее подробно свой путь.

P.S. После этих танцев у меня язык не повернется назвать Андроид открытой системой. Sysctl и то через бубен надо править!

Комментариев нет:

Отправить комментарий