Is there a practical and easy way to type ĉ, ĝ and so on on an Android phone?
If you want to type fast and in a lot of languages, and because of that you don't have a good relationship with autocomplete, I can also recommend MessagEase. This is not a Qwerty-based layout, but a completely new one with only 9 keys which enables you to get to common speeds of around 30 WPM with the fastest of the world typing around 85 WPM on their phones, which is faster than most people type on a physical keyboard.
It is good for Esperanto and other languages because instead of long-pressing for accents, you can compose accents.
I use the app “AnySoftKeyboard” (free, from the Google Play Store) with the US layout. When you hold down some of the keys, you get a popup with the possible accented characters related to that letter. So holding down c will show you a popup, where you can find ĉ, holding down s you can get to ŝ and so on.
I think there is also a way to add a separate Esperanto layout without installing any apps but my phone does not seem to have it (Android 6.0). It, however, might replace some of the English letters, plus it is a separate layout, so a bit inconvinient for me (I also have Bulgarian, so that would make it a third layout). I guess someone else could post an answer describing that method better.
You can use Google Keyboard now it supports Esperanto with autocompletion
SwiftKey is superior solution on Android(100-500mn users). https://support.swiftkey.com/hc/en-us/articles/201598431-What-languages-are-currently-supported-for-SwiftKey-on-Android-
It supports most languages, has smart auto predict/correct between English and Esperanto. As I use Cyrillic, I only have to slide the spacebar for the 2 keyboards. The special Esperanto letters are behind the Latin equivalents (long press), but autosuggest will detect correct EO words (eg. aceti aĉeti aĉetis). You can swipe much faster with AI prediction. It also learns/improves prediction from your texts.
I wish Microsoft had such smart implementation on Windows. They are behind in EO implementation.
Edit: Just discovered that speaking to it is much faster, however, EO support is not there. It will try other languages instead. English is extra fast.