Похоже, этого достаточно, если вы введете
builder.setCleartextTrafficPermitted(true);
в строке 189, что кажется достаточным, поскольку вы используете старые приложения, которые, вероятно, не имеют сетевых настроек и используют только настройки по умолчанию.
источник: https://android.googlesource.com/platform/frameworks/base.git/+/refs/heads/master/core/java/android/security/net/config/NetworkSecurityConfig.java#189
Старый ответ
Я надеюсь, что вы выполнили свою домашнюю работу по поводу последствий обхода функции безопасности. При этом класс, ответственный за исключение, находится в фреймворке с пакетом android.security.net.config
, а класс ответственности - NetworkSecurityConfig
.
На момент написания этого ответа класс строителя stati c имел свойство boolean mCleartextTrafficPermittedSet
, которое по умолчанию установлено на false
. Возможно, вам придется установить значение по умолчанию true
, что делает метод getEffectiveCleartextTrafficPermitted()
в классе NetworkSecurityConfig
, возвращающим mCleartextTrafficPermitted
, который в свою очередь возвращает DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED
, который по умолчанию установлен в true
. поток будет
getEffectiveCleartextTrafficPermitted()
возвращает mCleartextTrafficPermitted
возвращает DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED
возвращает true
по умолчанию.
Если все это сбивает с толку, вызывайте setCleartextTrafficPermitted(true)
на сборщике всякий раз, когда сборщик создал.
Источник для класса доступен здесь: https://android.googlesource.com/platform/frameworks/base.git/+/refs/heads/master/core/java/android/security/net/config/NetworkSecurityConfig.java
Примечание : я не пробовал это и просто прошел через источник и сделал вывод о вышеизложенном. Вы можете попытаться исправить меня, если что-то не так.
Редактирование путем обновления из @Shadow:
В NetworkSecurityConfig измените логическую переменную с true на false.
//public static final boolean DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED = true;
public static final boolean DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED = false;
Также в ManifestConfigSource прокомментируйте следующую строку
/*boolean usesCleartextTraffic =
(mApplicationInfo.flags & ApplicationInfo.FLAG_USES_CLEARTEXT_TRAFFIC) != 0
&& mApplicationInfo.targetSandboxVersion < 2;*/
и применяется напрямую, как используетCleartextTraffi c как true.
boolean usesCleartextTraffic =true;