The Android App

Why I hate the Android App

Hi

I am sorry to put the title that way but I want to get these out of my chest for real. The Android app has been nothing but a pain in the but for me for a long time. I own/owned tens of Android devices mostly between Lollipop and Marshmallow so I used the app on all of these devices and to this date I never ever had a single smooth experience. Never, that simple. I am at my limit of giving up this tool. I have been using this tool since it came out and it made me a worse person because I started to swear more and more.

Here are things that kept me busy with this app

  • Frequent crashes on all devices. The app crashes and you will never know that it did. So your syncs will stink later you will find out. I already use foreground priority, cpu weaks etc. Sometimes the syncthing binary crashes, sometimes both. This is the case on all of my devices.

  • The deleted files keeps coming back and keeps showing up on devices (Linux and Android). I delete files from a node to find out that the files showed up later. This is one of the worst offenders because I have to “manually sync files” meaning that I have to put all my devices infront of me and see what is what and make sure that all are equal. This is sooooooooooo tiring. I have to do this multiple times a day sometimes. If any of the android devices is offline while the deletion happens, it is pretty much guaranteed that some of those deleted files will rise from dead again. This is the case on all of my devices.

  • The whole run in background with condition thing is soooooo useless. It never works on any of my devices. I choose wireless, or on charge or both etc, it keeps asking me to change the settings otherwise it refuses to run, duhhhh why on earth? What is the point? This is the case on all of my devices.

  • That famous loading icon during startup. It is a stressful experience to keep watching that thing until it starts up successfully so I can put it to rest inthe background. Sometimes it takes a long time to open the actual interface, sometimes crashes during start etc. Why not put the log window or something so that we see what is going on? Why do I have to keep staring at my screens? Most of the time putting it to the background while loading increases the crash risk as far as I can tell. This is the case on all of my devices.

  • Useless log window. I am never able to see any logs in the log window. i can neither see syncthing logs nor android logs. This is the case on all of my devices.

  • I believe that one of the offenders is the actual arm builds. The arm build of Syncthing sucks to death to me. I tried the arm build without the Android app and same, so many crashes. It crashes every couple minutes. I wish that someone with deep knowledge of these arm devices takes care of the arm builds. It seems to me that the binary is never optimization conscious.

  • The battery life with this app is plain dismal. It can easily drain the batteries of my devices in couple hours, even when there si not much sync going on.

  • Tied to the above case, this app uses insane amounts of cpu such that my devices heat up and stay warm for long periods of times. The app minimum uses %13 even no sync should be happening.

  • The lack of external card support is a bit sad.

You say, well why do not you just get some logs and file bugs so things can be fixed? Well i did that already. I had some bug reports. The thing is that “I can not keep up with the constant flow of issues”, and I am unable to file 5 bugs a day with logs. You know it is so much work. I am literally loosing so much time a day trying to get my syncs done manually.

Maybe I am just hitting the edge cases constantly, maybe I do not know what the heck I am doing or maybe I am a looser of some kind such that I come here and rant about an app that I contributed nothing. Regardless of my personal failures and shortcomings, this app fails and failed constantly on all of my devices since day one. I used it on kitkat, lollipop and marshmallow.

I just wished that we have a solid arm build that refuses to crash with basic android integration. I personally gave up on fancies, just a simple app that does not crash will get my donation. Or maybe syncthing-gtk can be ported to Android.

I know it sounds like ranting but we have to start some honest discussion about this part of Syncthing. The syncthing on my Linux boxes are plain awesome, they are like workhorse but I cant say the same thing for the Android version unfortunately.

thanks

1 Like

I can definitely see where you’re coming from, because I encounter many of these problems myself.

Unfortunately, Android makes it very hard to run something like Syncthing, through things like battery saving and task killers. Also, Go isn’t really supported on Android (we have to patch the Go source to make DNS work FFS).

That said, all these issues could probably be solved with enough effort. I started a fulltime job a few months ago, so I don’t have much time to work on the app, and there haven’t been many outside contributions either. So if there are any developers reading this, please consider contributing! And if you’re unsure where to start, just get in touch via Github, IRC, Forum or Email.

2 Likes

I hear a lot about crashes on Android. So far I’ve never seen a single crash log or backtrace that I can recall.

In general I suspect the alternative approach of speaking the sync protocol directly in Java and using the native APIs for file access has a larger chance of success, long term, although the app that does that is very new and perhaps not fully featured yet. The current Syncthing “core” used by the standard Android app (and everything else) is very much not mobile-optimized and will cause resource issues despite best efforts of @Nutomic, @Zillode and the other Android-app contributors.

2 Likes

Hey guys

Thanks for the replies.

I totally understand how hard to be a developer who work on opensource free stuff where the return is low level appreciation. I do not want to sound like a full blown ranter here. I just feel like this app needs a bit further thinking because as of now the devs might be puttingall their efforts for no real out come. For instance, this app has been in development for couple years. Do not you think that the stability should have improved as time goes by? The stability of this app never improved at all( like I said I have been using it from the start), however the feature set increased. The devs improved the app a lot that is for sure but all the improvement happened on the feature side not the stability side.

I also realize that some of the issues are part of this Go thing, and we are at the mercy of Go binaries. However the arm binaries that I have tested over the years had up and down stabilities. At one point the arm binary was good but I cant tell which version that was. So the binary’s performance and stability is very very sketchy, the Android integration is painful from the user perspective.

Now I do not know what to recommend because I am not a dev but as a user if you provide builds that offers reasonable debug logs, crash logs etc I am willing to test them out. Doing this through adb etc is very very hard because most of those issues are not repeatable with one click. I might sit down for an hour wait the issue to come up, by the time the issue happens I might not have a log of any kind. I hope that the app comes up with better debugging features of some kind so that as users we provide better data.

As I mentioned before, as a user I am perfectly fine with a barebones app that does not crash, this is how I use Syncthing on my desktop anyways. We already have the web interface. The only fancy I would ask for is the imrport export config since non root users will never be able to get those files.

High cpu, high memory usage etc can be dealt to certain degree but crashes and failing deleted files consolidations are very dangerous from a user perspective. These two should be the priority in my view.

Since the last release, you can also access the logs as a file (FAQ Link). Besides, like calmh says, I havent seen any considerable number of crashes in the past year or so.

1 Like

The android app isn’t all bad. If you want to sync data stored on an internal memory card, it usually works consistently (although the interface is clunky). The problem is, that’s not my use-case.

Like many people, I consider the ideal place to store my media and documents is on my sdcard. And since I’m technically inclined, I’ve made it work by different means in the past. Here are some workarounds I’ve used:

  • Originally wanting to soft-link directories between storage devices, I ended up mounting particular folders from the sdcard onto the internal storage. I may have made these changes permanent by changing the system fstab, don’t fully remember.
  • Adoptable storage which works really well. Until you upgrade your rom.
  • Root access mode. Which is very flakey.
  • Given up and used internal storage. Then ran out of storage space.

Aside from running as root, I’ve experienced reasonably consistent and responsive behavior from the app BUT… the amount of time and effort required to achieve this end is getting too much.

Looking through the issue tracker, it seems that many issues are related to Go. In particular, Go doesn’t support android’s external storage framework. I’m no developer but I wonder, what would it take to re-implement the original specifications in Java for Android? Would you expect more community developers to gain interest in a Java-based implementation (given the popularity of Java against Go)?

Thanks for developing Syncthing-Android in your spare time. I’ll echo that I played with it for a day or two (on a Samsung Galaxy Note Pro, shared with several linux, mac, and windows computers) to see if it could replace dropsync, and the experience was pretty painful – crashed every time I added a folder, displayed the wrong status, crashed often, drained the battery – so I had to switch back.

One thing that occurred to me during this is that a lot of trouble could potentially be saved by following the synctrayzor model of not writing a separate GUI, and just including a minibrowser that enhances the experience a bit. This would remove a lot of the maintenance on the coding end as the UI evolves.

There’s a button to use the web UI and it’s a pretty painful experience on Android.

1 Like

I’ll add my voice to say that Syncthing actually works pretty well on my phone. I use it to sync my KeePass database (r/w) with my desktop, and sync my photos to my desktop (which then backs them up properly).

It’s definitely clunky, and it can sometimes take a long time before it actually bothers to sync, but I’ve never had it crash, and it has no appreciable effect on battery life.

In short, it work well enough for me,and while it’s certainly far from ideal, I’m glad it exists.

6 Likes

I am sure that if I sync couple files it is ok. The main issue I believe comes up when one wants to use it for real worl d syncing which is synching hundreds and thousands of files. ANd I tend to think that the increased memory consumption and the lack of optimized Go binaries are the biggest causes of the Syncthin’s own binary crashes.

Now we also have the Ui crashes and sometimes these are tied together soemtimes they are independent crashes. It is really really hard to tell. Like I said I used this app maybe over 15 ANdroid devices, and all I had was dismal experiences.

On the other hand many apps offer crash logs, not just app logs. I think it would be very beneficial to bring up a window that asks the user if he/she wants to email the crash log and I would like this to happen both for the Ui ap and the Syncthing binary, otherwise it is very hard and tedious to get these actual crash logs because most of the time the crash happens and the user wont notice it.

I want to raise my voice for a bare bones app again. I am dying to see an Android integration that does

  • It imports/exports configs
  • It has a system tray that says either syncing or sync has finished. SO that I can just close the app when done.
  • It has a close button on system tray or whatever it is called on android.

Like Jack Sankey said, it would be much better to give up on some advanced Ui app and scale back the efforts on the Syncthing binary/protocol integration

My first two times of trying syncthing-android, the app simply stuck at generating keys, I left it on charge for like a whole day. that’s about a week ago.

The third time I finally got it started, add my backup server, share the camera directory, it stuck at 12% and no progress after that.

On the other hand running the command line arm binary in Termux works pretty nice, I’ll wait to see about battery usage though.

I went back to using syncthing with termux as well, and i am able to sync my files, at least that goes ok. It crashes here and there but it restarts itself.

The reason I like the termux path over the app path is that I can see what is going on in the terminal unlike the app.

However the Termux arm version still eats up crap loads of cpu and battery but I am ok with it for now given that I can sync my files without wondering what the hell is going on with my syncs.

For those who want to try the Termux path, there is a nice addon which lets you define shortscuts as widgets, that way I can add start syncthing widget (in my case I have inotify and synchting together) on my desktop and I also have one widget for shutting down syncthing via the api(using curl). This seems to be more streamlined approach than the app for me.

If the binary crashes, can’t one of you guys log the actual crash output so we can ever figure out what happens and possibly fix it? I feel like a broken record here.

2 Likes

I think this is because most users are novices (the underlying structure of Android is particularly opaque to me).

I can see if I can reproduce this, but the semester is starting so there will likely be a delay. What is the nature of the ‘crash output’ you’re looking for? Presumably this lives in a file somewhere in Android? Is there a way to securely upload it so I don’t accidentally share a bunch of personal info with the interwebs?

I don’t actually know where/how the Android app stashes the info… :confused: It’s printed to stderr by syncthing itself, and when running with its monitor process (i.e., on non-Android) it gets saved to a file called panic-$datetime.log in the config dir. It looks something like this:

[SYNO4] 13:45:31 INFO: syncthing v0.14.14+39-gf5a310a-dirty "Dysprosium Dragonfly" (go1.8beta2 darwin-amd64) jb@unu.kastelo.net 2016-12-23 10:10:58 UTC
[SYNO4] 13:45:31 INFO: My ID: SYNO4VL-TKVFF25-QKC2T3V-TTK4BGU-D2ZA5OT-PDKSI3R-3P4JQVS-BL4VXAC
[SYNO4] 13:45:32 INFO: Single thread hash performance is 362 MB/s using minio/sha256-simd (353 MB/s using crypto/sha256).
[SYNO4] 13:45:32 INFO: Reinitializing delta index IDs
[SYNO4] 13:45:32 INFO: Starting deadlock detector with 20m0s timeout
panic: proto: wrong wireType = 2 for field ModifiedBy

goroutine 1 [running]:
github.com/syncthing/syncthing/lib/db.getFile(0x1bcab20, 0xc4206f1400, 0xc4206f13f0, 0xc, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        /Users/jb/src/github.com/syncthing/syncthing/lib/db/leveldb.go:78 +0x210
github.com/syncthing/syncthing/lib/db.readOnlyTransaction.getFile(0xc420390a50, 0xc420018a50, 0xc4203b4b60, 0x9, 0x10, 0xc4206d7fc0, 0x20, 0x20, 0xc4204a4905, 0x3, ...)
        /Users/jb/src/github.com/syncthing/syncthing/lib/db/leveldb_transactions.go:39 +0x175
github.com/syncthing/syncthing/lib/db.(*Instance).checkGlobals(0xc420018a50, 0xc4203b4b60, 0x9, 0x10, 0xc4203b6058)
...
etc lots of data, need all of it.

Thanks Felix!

I ended up caving in and put my files in the app’s SD storage rather than near the root of the SD card. Noticed crashes upon adding new devices but was too concerned with making it work to dig up the log. It’s working well enough for the time being. Might look into submitting logs after I recover from the ordeal.

Does that folder also include the crash logs beside the regular logs?

It contains the entire logs from Syncthing itself. No logs from the app however.

1 Like