Создать профиль VPN программно для Android
Я разбирал в Интернете способ создания VPN-клиента на Android. Я не могу найти хорошие ресурсы о том, как это сделать.
Цель состоит в том, чтобы я хотел иметь возможность настроить VPN с помощью встроенной функции VPN в Android (возможно, с программным добавлением нового подключения) или иным образом.
Я наткнулся на VpnService
в документах, но неясно, как его использовать. У кого-нибудь есть хороший пример этого и возможно ли это с Android SDK
как в это время?
1 ответ
Android предоставляет пример кода ToyVpn, который вы можете посмотреть и использовать логику для своих нужд.
А вот некоторые подробности из документации
В этом классе есть два основных метода: prepare(Context) и VpnService.Builder.establish(). Первый касается действий пользователя и останавливает VPN-соединение, созданное другим приложением. Последний создает интерфейс VPN с использованием параметров, предоставленных VpnService.Builder. Прикладная программа должна вызывать prepare (Context), чтобы предоставить право на использование других методов в этом классе, и это право может быть отозвано в любое время. Вот основные шаги для создания VPN-соединения:
Когда пользователь нажимает кнопку для подключения, вызовите prepare (Context) и запустите возвращенное намерение, если оно не равно NULL.
Когда приложение будет подготовлено, запустите службу.
Создайте туннель для удаленного сервера и согласовайте параметры сети для VPN-подключения.
Укажите эти параметры в VpnService.Builder и создайте интерфейс VPN, вызвав VpnService.Builder.establish().
Обрабатывать и обмениваться пакетами между туннелем и дескриптором возвращаемого файла.
Когда onRevoke() вызывается, закройте файловый дескриптор и корректно выключите туннель.
Службы, расширяющие этот класс, должны быть объявлены с соответствующим разрешением и фильтром намерений. Их доступ должен быть защищен разрешением Manifest.permission.BIND_VPN_SERVICE, а их фильтр намерений должен соответствовать действию SERVICE_INTERFACE. Вот пример объявления службы VPN в AndroidManifest.xml:
<service android:name=".ExampleVpnService"
android:permission="android.permission.BIND_VPN_SERVICE">
<intent-filter>
<action android:name="android.net.VpnService"/>
</intent-filter>
</service>