Multiple users / profiles on Android?

I have two users on Android, one for work and one for personal. I installed Syncthing via F-Droid on one user and it’s available on the other. The problem comes when actually running Syncthing. The first user is able to open Syncthing, add devices and folders and share the folders. The problem comes when opening Syncthing on the 2nd user. Syncthing will open showing the circular arrow indicating it’s loading, but it never loads. The Android logs show the SSL error below. If I were to reinstall, it would work on the 2nd user and fail on the first user. I’m guessing this is due to the certificate’s private key stored in the user’s keychain where the other user doesn’t have access.

This post states multiple user profiles are not supported. Will it be on the roadmap to be supported at some point? Or is it a flat out “not supported” and won’t be supported in the future?

My use case is to simplify the movement of photos (and maybe files) off the phone without going through Google Photos.

Thanks for the awesome software!

09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617): Caused by: javax.net.ssl.SSLHandshakeException: error:1a000064:ECDSA routines:OPENSSL_internal:BAD_SIGNATURE
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.SSLUtils.toSSLHandshakeException(SSLUtils.java:363)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.ConscryptEngine.convertException(ConscryptEngine.java:1134)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.ConscryptEngine.readPlaintextData(ConscryptEngine.java:1089)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.ConscryptEngine.unwrap(ConscryptEngine.java:876)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.ConscryptEngine.unwrap(ConscryptEngine.java:747)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.ConscryptEngine.unwrap(ConscryptEngine.java:712)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.processDataFromSocket(ConscryptEngineSocket.java:858)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.-$$Nest$mprocessDataFromSocket(Unknown Source:0)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.ConscryptEngineSocket.doHandshake(ConscryptEngineSocket.java:241)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.ConscryptEngineSocket.startHandshake(ConscryptEngineSocket.java:220)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:196)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:153)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:542)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:106)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:30)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:91)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:104)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     ... 3 more
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617): Caused by: java.security.cert.CertificateException: error:1a000064:ECDSA routines:OPENSSL_internal:BAD_SIGNATURE
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.NativeCrypto.X509_verify(Native Method)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.OpenSSLX509Certificate.verifyOpenSSL(OpenSSLX509Certificate.java:384)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.OpenSSLX509Certificate.verify(OpenSSLX509Certificate.java:414)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.nutomic.syncthingandroid.http.SyncthingTrustManager.checkServerTrusted(SyncthingTrustManager.java:54)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:259)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.ConscryptEngine.verifyCertificateChain(ConscryptEngine.java:1638)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.NativeCrypto.ENGINE_SSL_read_direct(Native Method)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.NativeSsl.readDirectByteBuffer(NativeSsl.java:569)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.ConscryptEngine.readPlaintextDataDirect(ConscryptEngine.java:1095)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     at com.android.org.conscrypt.ConscryptEngine.readPlaintextData(ConscryptEngine.java:1079)
09-09 20:40:12.281 W/PollWebGuiAvailableTask(21617):     ... 25 more

It’s “nobody cares about this to care to implement it” type of unsupported. The android app is also in maintenance mode, so I wouldn’t hold your breath.

I actually use two instances this way — one in the main profile, and one in the work profile. You just need to set the default GUI port in the app settings for the work instance to something else than 8384, e.g. 8385, and Syncthing should load just fine. Once loaded, you should also open the Web GUI, go to the Advanced Configuration → Options and change the port in Local Announce MC Addr and Local Announce Port there the same way, e.g. from the default 21027 to 21028.

I was able to eventually get it to work. I had an old install on one profile and it wouldn’t start. The BAD_SIGNATURE was throwing me for a loop. Clearing the data and using separate IPs (VPN) worked and I was able to configure Syncthing in both profiles.