Android VPN: сервис hexene LocalVPN через некоторое время не работает
Я довольно новичок в программировании для Android, и у меня был небольшой проект для брандмауэра Android VPN - что-то вроде этого, основанное на этом репозитории GitHub: https://github.com/hexene/LocalVPN (так в дополнение к VpnService)
Проблема в том, что без изменений, внесенных в код из исходного репозитория, VPN перестает работать через некоторое время (обычно через несколько секунд). Я имею в виду, что интернет-соединение теряется во всех приложениях, поэтому я думаю, что пакеты перестают проходить через VPN. Это происходит случайно и, по-видимому, без запускающего события. Я снова отредактировал 0 строк из кода.
Что я пробовал до сих пор:
- Использование startForeground() как предложено здесь. Ничего не меняется
- Наличие постоянного высокоприоритетного уведомления, показывающего, чтобы предотвратить остановку службы (хотя я не знаю, является ли остановка службы причиной.
- Разрешить только определенные приложения в VPN с помощью Builder.addAllowedApplication(). Это не сработало, как ожидалось.
У кого-нибудь есть какие-либо идеи или мудрость, чтобы поделиться? Буду очень признателен!
Редактировать: журнал, когда интернет перестает работать, говорит это:
03-16 00:52:18.904 13182-13260/xyz.hexene.localvpn E/TCPInput: Network read error: 172.217.23.67:443:42746
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:192)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:382)
at xyz.hexene.localvpn.TCPInput.processInput(TCPInput.java:133)
at xyz.hexene.localvpn.TCPInput.run(TCPInput.java:72)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:776)