В Android 6, как запретить приложению разрешение на доступ к сети?

30

В Android 6 пользователь имеет (наконец-то!) Возможность одобрения или отклонения определенных разрешений для приложения.

Тем не менее, я не смог найти способ одобрить или запретить доступ к сети, либо через Wi-Fi, либо через сотовую передачу данных. Соответствующее разрешение отображается в разделе «Другие возможности приложения» и является только информативным - по-видимому, изменить его невозможно.

Вот пример с приложением Chess Free:

Скриншот

dr01
источник
4
Ты не можешь Позвольте мне найти надежный источник, но вы не можете сделать это изначально, так как это сильно повредит интересам Google (то есть рекламы). Изменить: Вы найдете эту статью интересной: androidpolice.com/2015/06/06/…
Повелитель

Ответы:

27

Вы не сможете добиться успеха через собственный механизм Android.

Коди Тоомбс из Android Police очень хорошо указал на это в статье: Android M никогда не будет запрашивать у пользователей разрешение на использование Интернета, и это, вероятно, хорошо .

В разделе « Обычные и опасные разрешения» документа « Обзор разрешений» Google отметил:

Разрешения делятся на несколько уровней защиты.

Существуют два уровня защиты, влияющие на сторонние приложения: обычные и опасные разрешения.

  • Обычные разрешения охватывают области, где вашему приложению требуется доступ к данным или ресурсам вне изолированной программной среды приложения, но где очень мало риска для конфиденциальности пользователя или работы других приложений . Например, разрешение на установку часового пояса является обычным разрешением.

    Если приложение в своем манифесте заявляет, что оно нуждается в обычном разрешении, система автоматически предоставляет это разрешение приложению во время установки. Система не предлагает пользователю предоставить нормальные разрешения, и пользователи не могут отозвать эти разрешения.

  • Опасные разрешения охватывают области, где приложению требуются данные или ресурсы, которые включают в себя личную информацию пользователя или могут потенциально повлиять на сохраненные данные пользователя или работу других приложений. Например, возможность читать контакты пользователя является опасным разрешением. Если приложение заявляет, что оно требует опасного разрешения, пользователь должен явно предоставить разрешение приложению.

(Акцент мой)

Удивительно или нет, но следующие разрешения входят в список нормальных разрешений :

  • CHANGE_NETWORK_STATE - позволяет приложениям изменять состояние подключения к сети - то есть мобильные данные;
  • CHANGE_WIFI_STATE - позволяет приложениям изменять состояние подключения Wi-Fi;
  • ИНТЕРНЕТ - позволяет приложениям открывать сетевые сокеты.

Если этого недостаточно, ознакомьтесь с разрешениями, управляемыми AppOps здесь . Если вы не найдете там своего разрешения, вы не сможете ничего сделать с ним в графическом интерфейсе.

Поскольку альтернативные методы уже широко описаны на этом сайте, обратитесь к:

Повелитель огня
источник
12
Спасибо за Ваш ответ. Это разочаровывает, когда функции ограничены не из-за технических невозможностей, а из-за рыночных причин.
dr01
25

Вы можете использовать NetGuard (см. Мой список интернет-брандмауэров для других альтернатив), который работает без рута и позволяет выборочно блокировать доступ в Интернет для приложений (WiFi или мобильные данные, и даже всегда или только при отключенном экране). Это от разработчика XPrivacy, так что должно быть хорошо;)

NetGuard NetGuard NetGuard
NetGuard (источник: Google Play ; нажмите на картинку для увеличения)

NetGuard с открытым исходным кодом, так что вы также можете найти его на F-Droid .

Обновление: обратите внимание, что последние версии Netguard включают в себя Google Ads, а также Firebase Analytics - две вещи, которые IMHO не имеют никакого отношения к брандмауэру (или любой другой системе безопасности) - что, скорее всего, является причиной того, что он больше не обновляется на F-Droid официальный репо (все еще доступен в моем с соответствующими предупреждениями).

Иззи
источник
1
Вариант NetGuard F-Droid фактически добавил функциональность сверх той, которая разрешена в Play Store.
andDevW
Может ли он блокировать рекламу в приложении?
Бессмертный игрок
1
@ImmortalPlayer, если приложению отказано в доступе к сети, оно также не может загружать рекламу. Таким образом, ответ на это будет «да».
Иззи
6

Есть несколько действительно крутых приложений, которые могут делать это без рута. Вот два примера:

Baronz
источник
4

Если у вас есть root- доступ, вы также можете использовать:

Я обновил свое устройство до Android 6.0.1 и до сих пор кажется, что оба работают.

Крис
источник
3

Доступ к Интернету не может быть запрещен для отдельных приложений на Android изначально. Реклама является основным источником дохода Google.

Однако, если вы используете Opera Max, вы можете ограничить доступ в Интернет для отдельных приложений. Вы даже можете сохранять данные благодаря технологии сжатия Opera.

Установите Opera Max из магазина Play. Это абсолютно бесплатно и легко в использовании. Корень не требуется.

NVZ
источник
Обновление : больше не фанат Opera Max после того, как они начали показывать слишком много рекламы.
NVZ
3

В свете некоторых недавних событий я хотел бы улучшить этот вопрос, представив Google Triangle . Загрузите его на APKMirror или APKPure и установите с помощью ADB .

Вот некоторые из ключевых особенностей.

Используются мобильные данные Попросить разрешить данные для заблокированных приложений Отключить при включенном Wi-Fi Блокировать все по умолчанию

Это не VPN, а локально блокирует доступ ваших приложений к Интернету. Думайте об этом как о новом разрешении, так же как использование камеры или доступ к вашему местоположению.

NatoBoram
источник
1
Использует ли это VPN / прокси как подобные приложения? Блокирует ли он доступ из нативных библиотек?
хакель
1
@hackel Я установил его (пришлось загрузить, так как он сказал, что недоступен в моей стране). Он попросил меня включить VPN. Также, похоже, не блокирует WIFI.
Борт
3

преамбула

Возможно, уже поздно, но я хотел бы добавить свою точку зрения на ваш вопрос для полноты картины. Этот ответ - верный способ заблокировать доступ к приложению через Интернет. Недостатки? Он не блокирует Intents, он запутан и может привести к сбою целевого приложения, а также требует привилегий root .

Он был протестирован и подтвержден для работы до Android 7.1.2.


обоснование

Как уже упоминалось другими ответчиками, любое приложение, которое хочет получить доступ к Интернету, должно заявить о android.permission.INTERNETнеоспоримых разрешениях в пределах своего AndroidManifest.xml. Как Android запоминает, какие разрешения запрашивает приложение? Сохраняя их внутри packages.xml, защищенный файл находится по адресу /data/system.

Само собой разумеется, что кто-то вроде нас может быть заинтересован в редактировании указанного файла с целью добавления или удаления разрешения при условии, что у него есть права root. Это наш способ запретить доступ к приложению через Интернет без VPN или программного обеспечения брандмауэра.


packages.xmlфайл

В packages.xmlфайле перечислены все установленные приложения, а также их пути и разрешения. Каждое приложение размещается между <package></package>тегами; ради моего ответа я буду нацеливаться на Nova Launcher от TeslaCoil. Раздел приложения в файле выглядит следующим образом:

    <package name="com.teslacoilsw.launcher" codePath="/data/app/com.teslacoilsw.launcher-1" nativeLibraryPath="/data/app/com.teslacoilsw.launcher-1/lib" publicFlags="944258628" privateFlags="0" ft="16075caace8" it="16075cac965" ut="16075cac965" version="53000" userId="10083" installer="com.android.packageinstaller">
        <sigs count="1">
            <cert index="7" key="3082034d30820235a0030201020204638fbad3300d06092a864886f70d01010b05003057315530530603550403134c726f636b7a35353535204f553d44726f69642046726565646f6d20556e6974204f3d44726f69642046726565646f6d20496e63204c3d556e6b6e6f776e20533d556e6b6e6f776e20433d4c4b301e170d3134313230353030343535375a170d3434313132373030343535375a3057315530530603550403134c726f636b7a35353535204f553d44726f69642046726565646f6d20556e6974204f3d44726f69642046726565646f6d20496e63204c3d556e6b6e6f776e20533d556e6b6e6f776e20433d4c4b30820122300d06092a864886f70d01010105000382010f003082010a0282010100818b312365be3e55f48989d43468880067464eca65aa3ba73305178311fc2a053c143182f6d2ea635b57dc327adf8a5a9b763c03f0a48c38530114e6979358d6bfca37d161ca6fe8bb0d80f061d7b67bc1456cdfc38e0cda2ebd05c48113f701140950f0fe4315de6b95c7504129abb2c1a61f1e4f1229fb83f474dbcd7dc957b84a1b8a2aa0157b223609d77980a3f579c93fbb24a6f9fbb5a8e207cccdf1add616c95c732d5c114c0168fdbd9c00ddf211c2b8886b9498a34f389025802e334f404b7e4eb75f6308f086e5bdac64db10053c7ff8d21a350b941d5394ffbe2bd037139134eb065c2317625e65d3f628aecf7965a0d70b02e68aa8371efd1fe50203010001a321301f301d0603551d0e04160414a4e66b693ecdf3241883e3eed668354e1531ba11300d06092a864886f70d01010b050003820101003992f3f461a290db767911a4a519f035fe0c34e597e2fba2e31371e260bd2fc8f9a93c35e6f06553d02588d2f8453ee784d2ba09a696e66304e3e01f7c6bdf5b2747fc73f79d00379cc94eefa542c8eb308318364df2fa1a9c6a7ef0669d08f7b1f8635d0d4331e2817d5aeb0854760116c29801cf915ef67d5c0e04861cad4fa7b96fe8f9a0baf0cda649cd35a7122142ba38b2d16d9d319a8604a41fe0025d89be87f84ce8fc080ab54c76a96f3d9b70b1a5f5e18e48768e3684bca8a950665e16a6d50cf0045949baebca876d55eeba52ea421f33009872d9d654f8f8caa1bb465d754694d4bf6cb92f3299fbec3781849b37e6ba23ffe3d6c20ecb9bc65d" />
        </sigs>
        <perms>
            <item name="com.android.launcher3.permission.READ_SETTINGS" granted="true" flags="0" />
            <item name="com.google.android.c2dm.permission.RECEIVE" granted="true" flags="0" />
            <item name="com.teslacoilsw.launcher.permission.C2D_MESSAGE" granted="true" flags="0" />
            <item name="android.permission.EXPAND_STATUS_BAR" granted="true" flags="0" />
            <item name="android.permission.WRITE_MEDIA_STORAGE" granted="true" flags="0" />
            <item name="android.permission.INTERNET" granted="true" flags="0" />
            <item name="android.permission.ACCESS_NETWORK_STATE" granted="true" flags="0" />
            <item name="android.permission.SET_WALLPAPER" granted="true" flags="0" />
            <item name="android.permission.SET_WALLPAPER_HINTS" granted="true" flags="0" />
            <item name="android.permission.VIBRATE" granted="true" flags="0" />
            <item name="android.permission.ACCESS_WIFI_STATE" granted="true" flags="0" />
            <item name="android.permission.WAKE_LOCK" granted="true" flags="0" />
        </perms>
        <proper-signing-keyset identifier="10" />
    </package>

Отступы сообщаются дословно из файла.


Процедура

Вооружившись вышеуказанным знанием, теперь мы можем приступить к изучению разрешений Nova Launcher, заключенных между ними <perms></perms>. Достаточно скоро мы найдем единственное, что нам нужно отредактировать:

            <item name="android.permission.INTERNET" granted="true" flags="0" />

Чтобы эффективно запретить доступ к приложению через Интернет, нам просто нужно удалить всю строку и перезагрузить устройство. Комментируя это для будущего использования бесполезно: Android проверяет этот файл на каждой загрузке, и очистит ваши комментарии .


Недостатки

После этой процедуры вы получите приложение, которое никак не может общаться с Интернетом. Тем не менее, плохо закодированные приложения и программное обеспечение, предназначенные для Marshmallow и выше, могут потерпеть крах при попытке подключения к Интернету , как это делает Nova.

Более того, как указывает Firelord, обновление приложения приводит к тому, что изменения отменяются, что фактически сводит на нет наши усилия и требует повторного удаления разрешения.


Исправление этой процедуры

Чтобы отменить то, что мы сделали выше, все, что нужно, это добавить разрешение, которое мы удалили, обратно среди других и перезагрузить устройство.


отказ

Я никоим образом не связан с Nova Launcher или его разработчиками.

Продавец масок смерти
источник