• Introducing XDA Computing: Discussion zones for Hardware, Software, and more!    Check it out!
  • Fill out your device list and let everyone know which phones you have!    Edit Your Device Inventory

[APP][5.0+] DNS66 - Open Source Host/Ad-Blocker without Root

Search This thread

julian_klode

Senior Member
Apr 23, 2015
278
944
Hey,

I am the developer of DNS66, a free (GPL-3) host and ad blocker for Android 5.0 and newer. It utilises Android's VPN service to redirect DNS traffic to the local app, and filters out any blocked hosts from reaching the servers (instead responding directly with "non-existing domain").

As it only intercepts DNS traffic it is a fairly lightweight solution and does not seem to have any measurable effect on the battery life. Given that it only blocks entire host names, it cannot block as detailed as some other ad blockers. But it still catches almost all ads on the web.

The project can be found in the https://github.com/julian-klode/dns66 project on GitHub and you can directly install it via F-Droid: https://f-droid.org/app/org.jak_linux.dns66, the personal fdroid repository at https://jak-linux.org/fdroid/repo (updated immediately when there is a new release), or download the apk from the github releases page: https://github.com/julian-klode/dns66/releases (or use the fdroid repository listed on github

Android 7 notice: The DownloadManager in Nougat and newer fails to download files when a VPN service is active. This affects Play Store updates and installs, and downloads in Chrome, amongst other things. Versions 0.1.3 contains a workaround for the Play Store, but other apps might still fail to download unless the bug in Android is fixed. See https://code.google.com/p/android/issues/detail?id=213341 and https://github.com/julian-klode/dns66/issues/31#issuecomment-256695500 for further details.

Not working? For blocking issues, send me logcat via E-Mail ([email protected]). If it worked before, send a logcat for the old version as well. Note that not all ads can be blocked via DNS, so partial ad blocking is usually not a bug - If you see requests in the logcat, that means DNS66 works correctly, and I'm not going to investigate further. Issues in UI elements and stuff like that you can just report directly (especially in preview builds).

In-App Ad Blocking: Might or might not work. Seems Google worked around VPNs blocking the ads or something. In-Browser blocking works fine.
 
Last edited:

julian_klode

Senior Member
Apr 23, 2015
278
944
Hi, saw this on F-Droid the other day.

Sounds nice, but is there any benefit to using it if I'm already rooted and have AdAway?

I don't think so right now (maybe one advantage is that you don't need to modify /system and can retain OTA this way?). In the future, you might also be able to block/allow hosts via wildcards, so you can say: "Allow **.example.com" for example (that needs to be implemented first, but at least it's possible here).

Also, if there is, will I have to change DNS servers? Because I have DNSCrypt on all my devices now.

If you disable the DNS servers in the DNS tab, it should pick up the DNSCrypt proxy. Or you can manually remove the entries there and add the DNSCrypt proxy. I'd love to have native DNSCrypt support, but there's still a bit to go: I could embed the DNSCrypt proxy, but that looks sort of ugly. I'd love to have a Java implementation of the protocol.
 
May 17, 2012
22
7
Currently DNSCrypt requires root to function. If you could get it to work on non-rooted devices using your VPN settings trick that would be revolutionary for DNSCrypt and unrooted android users!
 
  • Like
Reactions: jordanpa

julian_klode

Senior Member
Apr 23, 2015
278
944
Currently DNSCrypt requires root to function. If you could get it to work on non-rooted devices using your VPN settings trick that would be revolutionary for DNSCrypt and unrooted android users!

When I fix dns66 to allow proxies on ports other than 53, it should easily be possible to run dnscrypt-proxy as a non-root user and combine that with dns66. I mean, that's basically the only reason dnscrypt needs root: Android does not handle DNS servers on non-standard ports.
 
Last edited:

browngeek

Senior Member
Mar 16, 2010
710
68
Hong Kong
Hi, saw this via reddit and downloaded. So far so good. Am having to use an unrooted phone at the moment because of work MDM requirements and adblocking was one of the biggest thing I was missing. Your app seems to be running pretty well. Haven't noticed any major speed decrease.

One thing I have noticed though is that you have to turn the VPN off to download Play store apps and updates. Thanks.
 

julian_klode

Senior Member
Apr 23, 2015
278
944
Hi, saw this via reddit and downloaded. So far so good. Am having to use an unrooted phone at the moment because of work MDM requirements and adblocking was one of the biggest thing I was missing. Your app seems to be running pretty well. Haven't noticed any major speed decrease.

One thing I have noticed though is that you have to turn the VPN off to download Play store apps and updates. Thanks.


Are you running Nougat? Seems Nougat has a bug with downloads while VPNs are enabled ...
 

jerryn70

Senior Member
Mar 15, 2012
1,270
683
Tight competition is coming :laugh::laugh:

Everything works fine.

Now it needs some options like, different types of filters, whitelist option, ad block count, firewall and malware protection, advance protection option to block youtube and similar ads etc. And simple UI like adclear :good:
 
Last edited:

julian_klode

Senior Member
Apr 23, 2015
278
944
Tight competition is coming :laugh::laugh:

Everything works fine.

Now it needs some options like, different types of filters, whitelist option, ad block count, firewall and malware protection, advance protection option to block youtube and similar ads etc. And simple UI like adclear :good:

I'm still curious what you mean with simple UI like adclear. Even adding a filter (white or blacklist) for apps would make the whole UI a whole lot more complicated. Because, currently it has 3 clearly defined sections: One for starting it, one for controlling which hosts are allowed, and one for controlling DNS servers.

Let's assume I want to add whitelist for apps. I have to replace the hosts section with a filtering section. But then I can only reasonably implement whitelisting for app, not blacklisting. Meaning that some items (hosts) can have 3 options (allow/deny/ignore), whereas others (apps) can have 2 (allow/deny). Heck, I might even need a different name than allow and deny for apps (to be fair, I do have a hardcoded app whitelist right now to work around a bug in Nougat that prevents downloads [and thus play store] from working). But that's not all: We cannot represent it with the other filters, as the other filters implement a priority list, whereas app whitelisting ignores any other filters (the apps completely bypass the VPN service). But adding another tab with a list of whitelisted apps does not really make it intuitively clear how that lists relation to the "normal" filtering list is.:confused:

Almost every new feature will make the UI more confusing. Some don't - for example, IP based blocking or domain based blocking (**.example.com) generally have the same options as hostname based blocking. But if we add new things like app filtering that partially overlaps with other stuff, we're in for trouble. :D
 

jerryn70

Senior Member
Mar 15, 2012
1,270
683
I'm still curious what you mean with simple UI like adclear. Even adding a filter (white or blacklist) for apps would make the whole UI a whole lot more complicated. Because, currently it has 3 clearly defined sections: One for starting it, one for controlling which hosts are allowed, and one for controlling DNS servers.

Let's assume I want to add whitelist for apps. I have to replace the hosts section with a filtering section. But then I can only reasonably implement whitelisting for app, not blacklisting. Meaning that some items (hosts) can have 3 options (allow/deny/ignore), whereas others (apps) can have 2 (allow/deny). Heck, I might even need a different name than allow and deny for apps (to be fair, I do have a hardcoded app whitelist right now to work around a bug in Nougat that prevents downloads [and thus play store] from working). But that's not all: We cannot represent it with the other filters, as the other filters implement a priority list, whereas app whitelisting ignores any other filters (the apps completely bypass the VPN service). But adding another tab with a list of whitelisted apps does not really make it intuitively clear how that lists relation to the "normal" filtering list is.:confused:

Almost every new feature will make the UI more confusing. Some don't - for example, IP based blocking or domain based blocking (**.example.com) generally have the same options as hostname based blocking. But if we add new things like app filtering that partially overlaps with other stuff, we're in for trouble. :D

No prblm just do what you can do for your app :good:
 

jb0ne

Senior Member
Dec 7, 2011
490
65
Not working for me 5x/Stock/7.1.1

Stock unrooted locked bootloader 7.1.1 Nexus 5x.

Doesn't work. Pressing Start does nothing. Turning the "run at startup" on and rebooting doesn't either.
I've removed, reinstalled, rebooted, all combinations, no go.
Manually adding USB Storage permission since it's not asking explicitly and I'm sure it needs it. (Edit: Also turned off battery optimization for it)


Logcat of trying to press the Start:

10-27 19:12:46.068 882 2826 I nanohub : osLog: [BMI160] accSetRate: rate=51200, latency=250000000, state=4
10-27 19:12:46.071 882 2826 I nanohub : osLog: [BMI160] accSetRate: rate=51200, latency=250000000, state=4
10-27 19:12:46.073 882 2826 I nanohub : osLog: [BMI160] accSetRate: rate=51200, latency=250000000, state=3
10-27 19:12:46.468 8504 8504 I StartFragment: Attempting to connect
10-27 19:12:46.470 882 4140 I ActivityManager: START u0 {cmp=com.android.vpndialogs/.ConfirmDialog} from uid 10141 on display 0
10-27 19:12:46.510 882 4141 W InputMethodManagerService: Window already focused, ignoring focus gain of: [email protected] attribute=null, token = [email protected]
10-27 19:12:46.525 8504 8504 D MainActivity: onActivityResult: Received result=0 for request=131073
10-27 19:12:46.525 8504 8504 D StartFragment: onActivityResult: Received result=0 for request=1
10-27 19:12:50.943 882 4140 I nanohub : queueFlush: sensor=30, handle=14

Edit: logcat of a refresh (where it appears to "downkoad" succesfully, apologies for the other apps' activities not sure what to grep):
10-27 19:23:17.304 882 2826 I nanohub : osLog: [BMI160] accSetRate: rate=51200, latency=250000000, state=5
10-27 19:23:17.306 882 2826 I nanohub : osLog: [BMI160] accSetRate: rate=51200, latency=250000000, state=5
10-27 19:23:17.308 882 2826 I nanohub : osLog: [BMI160] accSetRate: rate=51200, latency=250000000, state=3
10-27 19:23:18.056 882 4141 I nanohub : queueFlush: sensor=30, handle=14
10-27 19:23:20.089 8504 8504 D MainActivity: refresh: Downkoading https://adaway.org/hosts.txt to /storage/emulated/0/Android/data/org.jak_linux.dns66/files/https%3A%2F%2Fadaway.org%2Fhosts.txt
10-27 19:23:20.127 8504 8504 D MainActivity: refresh: Downkoading http://someonewhocares.org/hosts/hosts to /storage/emulated/0/Android/data/org.jak_linux.dns66/files/http%3A%2F%2Fsomeonewhocares.org%2Fhosts%2Fhosts
10-27 19:23:20.152 4407 21829 D DownloadManager: [5748] Starting
10-27 19:23:20.174 4407 21829 D NetworkSecurityConfig: No Network Security Config specified, using platform default
10-27 19:23:20.179 8504 8504 D MainActivity: refresh: Downkoading http://www.malwaredomainlist.com/hostslist/hosts.txt to /storage/emulated/0/Android/data/org.jak_linux.dns66/files/http%3A%2F%2Fwww.malwaredomainlist.com%2Fhostslist%2Fhosts.txt
10-27 19:23:20.191 4407 21830 D DownloadManager: [5749] Starting
10-27 19:23:20.204 4407 21830 D NetworkSecurityConfig: No Network Security Config specified, using platform default
10-27 19:23:20.233 4407 21833 D DownloadManager: [5750] Starting
10-27 19:23:20.254 4407 21833 D NetworkSecurityConfig: No Network Security Config specified, using platform default
10-27 19:23:20.825 4407 21833 W DownloadManager: fallocate() not supported; falling back to ftruncate()
10-27 19:23:21.229 4407 21833 D DownloadManager: [5750] Finished with status SUCCESS
10-27 19:23:21.349 4407 21829 D DownloadManager: [5748] Finished with status SUCCESS
10-27 19:23:23.287 19922 19976 V ClClient: SEND(42) KeepAliveRequest_4{} UID:1cc563bc-eb10-4e94-8bf4-c3ce2def4e96
10-27 19:23:23.675 19922 19974 V ClClient: RECV(42) +0.4s KeepAliveResponse_5{hasEstablishedSession=true}
10-27 19:23:24.009 4407 21830 D DownloadManager: [5749] Finished with status SUCCESS
10-27 19:23:28.407 882 2826 I nanohub : osLog: [BMI160] accSetRate: rate=51200, latency=-256, state=3
10-27 19:23:31.034 21392 21392 D SyncService: onReceive: android.intent.action.BATTERY_CHANGED
10-27 19:23:31.051 19922 19922 I BatteryReceiver: now=1477632211050 source=USB level=0.25 health=GOOD
10-27 19:23:31.143 882 907 E BatteryStatsService: no controller energy info supplied
10-27 19:23:31.504 882 902 I ActivityManager: Start proc 21842:com.cgollner.systemmonitor/u0a133 for broadcast com.cgollner.systemmonitor/.widgets.BatteryWidgetCompleteProvider
10-27 19:23:31.628 21842 21842 I art : Starting a blocking GC AddRemoveAppImageSpace
10-27 19:23:31.632 21842 21842 W System : ClassLoader referenced unknown path: /data/app/com.cgollner.systemmonitor-1/lib/arm64
10-27 19:23:33.287 19922 19976 V ClClient: SEND(43) KeepAliveRequest_4{} UID:dd732948-a55a-4021-8711-9e418f22bca4
10-27 19:23:33.815 19922 19974 V ClClient: RECV(43) +0.5s KeepAliveResponse_5{hasEstablishedSession=true}
10-27 19:23:39.843 882 3867 I nanohub : queueFlush: sensor=30, handle=14
10-27 19:23:40.063 882 2826 I nanohub : osLog: [BMI160] accSetRate: rate=51200, latency=250000000, state=5
10-27 19:23:40.067 882 2826 I nanohub : osLog: [BMI160] accSetRate: rate=51200, latency=250000000, state=5
10-27 19:23:40.068 882 2826 I nanohub : osLog: [BMI160] accSetRate: rate=51200, latency=250000000, state=3
10-27 19:23:43.286 19922 19976 V ClClient: SEND(44) KeepAliveRequest_4{} UID:cf006fad-7a32-47c5-9db1-22f035761e92
10-27 19:23:43.953 19922 19974 V ClClient: RECV(44) +0.7s KeepAliveResponse_5{hasEstablishedSession=true}
10-27 19:23:51.170 882 2826 I nanohub : osLog: [BMI160] accSetRate: rate=51200, latency=-256, state=3
10-27 19:23:53.066 20464 20520 I PlayCommon: [719] com.google.android.play.a.g.e(790): Preparing logs for uploading
10-27 19:23:53.067 20464 20520 I PlayCommon: [719] com.google.android.play.a.g.e(792): No file ready to send
10-27 19:23:53.276 19922 19976 V ClClient: SEND(45) KeepAliveRequest_4{} UID:0aabbb4f-4b4c-4791-a9e3-a4952045d007
10-27 19:23:53.786 19922 19974 V ClClient: RECV(45) +0.5s KeepAliveResponse_5{hasEstablishedSession=true}
10-27 19:23:57.853 21040 21059 I ClearcutLoggerApiImpl: disconnect managed GoogleApiClient


(Edit 3: when I grep logcat for vpn this stands out:
10-27 20:05:29.261 14109 14109 W System : ClassLoader referenced unknown path: /system/priv-app/VpnDialogs/lib/arm64 )
And this:
10-27 19:54:04.147 8356 8422 I AdVpnThread: Configuring
10-27 19:54:04.160 8356 8422 I AdVpnThread: Got DNS servers = [/192.168.0.1]
10-27 19:54:04.167 8356 8422 I AdVpnThread: configure: Adding DNS Server 213.73.91.35
10-27 19:54:04.167 8356 8422 I AdVpnThread: configure: Adding DNS Server 85.214.20.141
10-27 19:54:04.167 8356 8422 I AdVpnThread: configure: Adding DNS Server 194.150.168.168
10-27 19:54:04.168 8356 8422 I AdVpnThread: configure: Adding DNS Server /192.168.0.1
10-27 19:54:04.173 8356 8422 I AdVpnThread: Configured
10-27 19:54:04.181 8356 8422 E AdVpnThread: Network exception in vpn thread, reconnecting
10-27 19:54:04.181 8356 8422 E AdVpnThread: java.lang.NullPointerException: Attempt to invoke a virtual method on a null object reference
10-27 19:54:04.181 8356 8422 E AdVpnThread: at org.jak_linux.dns66.vpn.AdVpnThread.runVpn(AdVpnThread.java:209)
10-27 19:54:04.181 8356 8422 E AdVpnThread: at org.jak_linux.dns66.vpn.AdVpnThread.run(AdVpnThread.java:160)
10-27 19:54:04.181 8356 8422 E AdVpnThread: at java.lang.Thread.run(Thread.java:761)
10-27 19:54:04.181 8356 8422 I AdVpnThread: Retrying to connect in 160seconds...
10-27 19:54:32.479 10341 10341 I Finsky : [1] com.google.android.finsky.installer.t.a(791): Presetting external-hosting status for non-installed net.openvpn.openvpn
10-27 19:55:18.299 8356 8356 I VpnService: onStartCommand
10-27 19:55:18.300 8356 8356 I VpnService: Stopping Service
10-27 19:55:18.300 8356 8356 I AdVpnThread: Stopping Vpn Thread
10-27 19:55:18.301 8356 8422 I AdVpnThread: Exiting


(Edit 3: I installed 0.1.3 but no change)
 
Last edited:

jerryn70

Senior Member
Mar 15, 2012
1,270
683

Attachments

  • PicsArt_10-28-01.41.16.jpg
    PicsArt_10-28-01.41.16.jpg
    147.4 KB · Views: 1,557
  • PicsArt_10-28-01.42.23.jpg
    PicsArt_10-28-01.42.23.jpg
    156.2 KB · Views: 1,534
  • PicsArt_10-28-02.04.00.jpg
    PicsArt_10-28-02.04.00.jpg
    95.1 KB · Views: 1,466
  • PicsArt_10-28-02.09.15.jpg
    PicsArt_10-28-02.09.15.jpg
    121.3 KB · Views: 1,470

julian_klode

Senior Member
Apr 23, 2015
278
944
Stock unrooted locked bootloader 7.1.1 Nexus 5x.

Doesn't work. Pressing Start does nothing. Turning the "run at startup" on and rebooting doesn't either.
I've removed, reinstalled, rebooted, all combinations, no go.
Manually adding USB Storage permission since it's not asking explicitly and I'm sure it needs it. (Edit: Also turned off battery optimization for it)


Logcat of trying to press the Start:
[...]

10-27 19:12:46.470 882 4140 I ActivityManager: START u0 {cmp=com.android.vpndialogs/.ConfirmDialog} from uid 10141 on display
10-27 19:12:46.525 8504 8504 D MainActivity: onActivityResult: Received result=0 for request=131073
10-27 19:12:46.525 8504 8504 D StartFragment: onActivityResult: Received result=0 for request=1

Sounds to me like you're running an Always-On-VPN like Project Fi's WiFi assist. Those do not allow other VPN connections to be created - The VPN Confirmation dialog in any case answers with "Cancelled". I should probably add an alert dialog for the cancelled case.
 

julian_klode

Senior Member
Apr 23, 2015
278
944
How about these changes ?

:good:

Yeah, something like that will probably happen at some point. I'm currently more concerned with getting downloads working on Nougat. It seems there is a bug somewhere deep in Nougat that prevents downloads from working while a VPN connection is active, unless that VPN connection basically redirects all internet traffic to it.
 
  • Like
Reactions: Ultramanoid

jb0ne

Senior Member
Dec 7, 2011
490
65
Sounds to me like you're running an Always-On-VPN like Project Fi's WiFi assist. Those do not allow other VPN connections to be created - The VPN Confirmation dialog in any case answers with "Cancelled". I should probably add an alert dialog for the cancelled case.


Yes! This was a project fi phone (only bought cause it was a $200 deal). Fi has been disabled but I do indeed recall seeing the auto VPN thing somewhere. Will try and figure out how to disable it and report back....I don't use it.

---------- Post added at 06:20 AM ---------- Previous post was at 06:15 AM ----------

It works! I set the Google one to not be always on, and presto! What a brilliant little app you have created!!

Should I hit the slider in the same place to make DNS 66 "always on"?
 

jerryn70

Senior Member
Mar 15, 2012
1,270
683
I have charged my phone to 100% & switched on then leave it for 30 minutes without using anything
Wifi data Bluetooth etc all where off, but the battery consumption of this app where little more without using anything .

Try to add inbuilt option for auto update app or check for updates.
As a junior member you cannot post links, just help xda members with useful post, after 10 post you can post link in the threads.
 

Attachments

  • Screenshot_20161029-093201.png
    Screenshot_20161029-093201.png
    237 KB · Views: 1,355

jb0ne

Senior Member
Dec 7, 2011
490
65
For myself it doesn't even appear on the list of battery users. Man this is a brilliant app, I'm really surprised this thread isn't going wild. Developer, how can we help to support you?

Sent from my Nexus 5X using Tapatalk
 

Top Liked Posts

  • There are no posts matching your filters.
  • 195
    Hey,

    I am the developer of DNS66, a free (GPL-3) host and ad blocker for Android 5.0 and newer. It utilises Android's VPN service to redirect DNS traffic to the local app, and filters out any blocked hosts from reaching the servers (instead responding directly with "non-existing domain").

    As it only intercepts DNS traffic it is a fairly lightweight solution and does not seem to have any measurable effect on the battery life. Given that it only blocks entire host names, it cannot block as detailed as some other ad blockers. But it still catches almost all ads on the web.

    The project can be found in the https://github.com/julian-klode/dns66 project on GitHub and you can directly install it via F-Droid: https://f-droid.org/app/org.jak_linux.dns66, the personal fdroid repository at https://jak-linux.org/fdroid/repo (updated immediately when there is a new release), or download the apk from the github releases page: https://github.com/julian-klode/dns66/releases (or use the fdroid repository listed on github

    Android 7 notice: The DownloadManager in Nougat and newer fails to download files when a VPN service is active. This affects Play Store updates and installs, and downloads in Chrome, amongst other things. Versions 0.1.3 contains a workaround for the Play Store, but other apps might still fail to download unless the bug in Android is fixed. See https://code.google.com/p/android/issues/detail?id=213341 and https://github.com/julian-klode/dns66/issues/31#issuecomment-256695500 for further details.

    Not working? For blocking issues, send me logcat via E-Mail ([email protected]). If it worked before, send a logcat for the old version as well. Note that not all ads can be blocked via DNS, so partial ad blocking is usually not a bug - If you see requests in the logcat, that means DNS66 works correctly, and I'm not going to investigate further. Issues in UI elements and stuff like that you can just report directly (especially in preview builds).

    In-App Ad Blocking: Might or might not work. Seems Google worked around VPNs blocking the ads or something. In-Browser blocking works fine.
    18
    0.5.6 release

    0.5.6 is out.

    Highlights:
    • Improved in-app ad blocking in "system apps bypass" mode - system webview now does not bypass anymore
    • Certain DNS requests where falsely rejected in 0.5.5 due to a bug in pcap4j 1.7.1, hence upgraded to 1.7.2 - This caused Conversations to fail to connect

    All changes:
    • Release 0.5.6 -
    • Update GSON to 2.8.2 -
    • Upgrade to SDK version 26 (Oreo) - That's what I'm using now, so let's build with it.
    • Update to pcap4j 1.7.2 for aitoy/pcap4#123 - pcap4j 1.7.1 had issues parsing certain packets.
    • Allow applications to bypass the VPN themselves - This might help with #193, not sure.
    • Report stopped when stopped by third party - There seems to be a more generic life-cycle problem here, as that does not seem to be the correct solution, but it at least fixes the issue as good as possible. Really gotta do that life-cycle rework.
    • Treat system webview like a browser in 'system except browsers' - System webview widgets might be running the view in some webview UID sandbox or something, not sure, but according to #125 this solves the issue. - Fixes #125
    • Don't just crash if logcat fails - Fixes #206
    • Increase update timeouts - Increase the time out for connect to 30 seconds, and the overall execution wait thing to an hour - this one really should not be timing out in the first place, otherwise you get inconsistent results.- Fixes #207
    • Re-add external storage permissions - Some vendors like Xiaomi seem to produce horribly broken systems that require external storage permission for ACTION_CREATE_DOCUMENT with CATEGORY_OPENABLE. They just pop up a toast saying to toggle on file permissions in settings, but if we do not list file permissions in the manifest, there are none to be toggled on in settings. This does not really have any effect on other Android >= 6.0 phone, as permissions have to be requested at run-time and the manifest just specifies an upper set, but it should allow Mi users to work around their horribly broken systems.

    Needless to say I'm sad about re-adding the external storage, but there seems to be a lot of broken MIUI and custom roms out there.
    14
    Version 0.6.3 released

    Versions 0.6.2 and 0.6.3 are out

    0.6.2 changes:
    • respect order of system dns servers (#382)
    • dependency updates

    0.6.3 changes:
    • Work around bug in pcap4j crashing dns66 (#373)
    • app whitelist: Fix crash when getContext() is null (#362)
    • StartFragment: Fix icon not being shown after disconnect (#361)
    • Force notifications on Oreo and above. Use notification channels to disable notifications you don't like
    • Fix crash when vpn is restarted in some situations (#360)
    • updates: Follow redirects (#338)
    • Automatically follow night/dark mode on Android 10+ (#358)

    I hope that f-droid picks them up soon, as usual my builds are available on github and in my f-droid repo.
    14
    0.5.0 released

    I just released 0.5.0. Changes since RC1:

    Code:
    Julian Andres Klode (7):
          WhitelistFragment: Correctly display changed toggle after scroll
          Configuration: Fix reading the itemsOnVpn array
          README.md: Add link to XDA
          Switch JSON I/O from JsonReader/JsonWriter to GSON
          strings: Some formatting cleanup
          Hack in the message for incomplete updates
          version 0.5.0
    
    Julien Lepiller (1):
          French translation
    
    Naofumi Fukue (1):
          japanese translation
    
    Nikolay Buzovsky (1):
          Russian translation

    An overview of changes since the last stable release is available at

    https://github.com/julian-klode/dns66/releases/tag/v0.5.0
    13
    Julian,
    I have some ideas for your app and provided you some new blocklists. I was wondering if you could hack together pi-hole to work on our local phones or take some of their features and add it to your app.
    Please see feature request:
    https://github.com/julian-klode/dns66/issues/197
    And:
    https://github.com/julian-klode/dns66/issues/196

    I saw it, the feature request is already equivalent to two others. That said, there likely won't be any new features this year anyway (at least not from me). My requirements are satisfied as is (in app log view and quick unblock/block would be nice, but it's not essential), and I have to hand in my master's thesis in January. I'd merge reasonable, understandable pull requests with unit tests, though; and will do the occasional 0.5 point release with bug fixes and updated translations.