Ответ 1
Способ ping для каждого OEM (производителя оригинального оборудования) может отличаться. Это не ограничивается только ping. Например, попробуйте запустить команду linux du на старых устройствах Samsung (S3) и более новых устройствах (Motorola G) на оболочке adb.
S3 поддерживает du, но не принимает некоторые параметры, такие как -m (отображение в мегабайтах), в то время как новые устройства, такие как Moto G или даже устройства Samsung (в прошлом Galaxy S5), поддерживают его. Попробуйте запустить ping -c 1 8.8.8.8 на оболочке adb в S3, и вы заметите, что это не ваш код Java, это OEM.
Опять же, даже команды, такие как dumpsys, имеют отформатированный формат в зависимости от версии Android и устройства. Из-за этого было бы лучше, если бы вы могли использовать совершенно другой метод, чтобы попытаться выполнить идентификацию желаемого IP-адреса с помощью API-интерфейсов, представленных на Android, вместо использования процесса с параметрами, которые могут быть по-разному поддерживаться для каждого OEM-сервера.
Также может быть, что разрешения для каждого устройства различны.
Когда вы запускаете процесс в своем приложении, вы предоставляете только ограниченное разрешение приложения для этого процесса. Поэтому, если для ping требуется разрешение на уровне root (на конкретном устройстве), это также может быть причиной того, что он не работает. В конечном счете, до OEM-производителей, как они настроили Android.
Источник: Я работаю на OEM-сервере.