Skip to content

android sucks

Jörg Hohwiller edited this page Apr 15, 2020 · 22 revisions

Why android sucks

Appologies in advance: Here comes my personal shit-storm. In practice I have various android devices and am quite a fan of it from a user-perspective. However, from a developers point of view I hate android.

When a giant IT company like google creates a development platform like for Anrdoid one would expect them to design it well and make it a pleasure for developers to build great apps. However, google has completely messed it:

  • In Java artifacts for dependencies are typically available in maven-central. This makes it easy to include the required libraries into your code. However, google was ignorant enough to build their own google maven repository.

  • In Java libraries are provided as JAR files. This is an absolute defacto-standard supported by all build tools out of the box. Even libraries with native code included use this standard. Again google was ignorant enough to create their own aar-format for packaging. This is limiting support and causing various issues and pitfalls.

  • Google does not support major IDEs like Eclipse build was ignorant enough to ship their own IDE called android studio. It is a kind of fork of IntelliJ. It is really not bad but it takes you away the freedom to choose your IDE and if you prefer a different IDE you are more or less forced to use it.

  • All libraries provided by google for android are provided without any JavaDoc and with fully uglified code:

    public class View
      implements android.graphics.drawable.Drawable.Callback, android.view.KeyEvent.Callback, android.view.accessibility.AccessibilityEventSource
    {
    public static interface OnLayoutChangeListener
    {
    public abstract  void onLayoutChange(android.view.View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom);
    }
    public static class DragShadowBuilder
    {
    public  DragShadowBuilder(android.view.View view) { throw new RuntimeException("Stub!"); }
    public  DragShadowBuilder() { throw new RuntimeException("Stub!"); }
    @java.lang.SuppressWarnings(value={"JavadocReference"})
    public final  android.view.View getView() { throw new RuntimeException("Stub!"); }
    public  void onProvideShadowMetrics(android.graphics.Point shadowSize, android.graphics.Point shadowTouchPoint) { throw new RuntimeException("Stub!"); }
    public  void onDrawShadow(android.graphics.Canvas canvas) { throw new RuntimeException("Stub!"); }
    }
    public static class MeasureSpec
    ...
  • The programming APIs are poorly designed, historically grown and simply ugly. As an experienced Java developer you immediately see that the makers for the APIs for anroid did not have much Java experience and where designing the APIs from a native C developer point of view driven by pointless exposure of performance optimizations using integer masked attribute combinations instead of using Enums, flags and structured meaningful typings.

    • Wigets has tons of methods taking int as argument such as setOrientation(int), setText(int), setInputType(int), etc. You both need to know where to find the proper constants for providing valid arguments and sometimes even need to mask them with logical or such as InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD.

    • To "improve" the API methods like Display.getWidth() and Display.getHeight() have been deprecated. Instead you need to do:

      Point size = new Point();
      display.getSize(size);
      int width = size.x;
      int height = size.y;
    • Many general aspects such as ActionBar are really messed up and full of quirks. Getting something right with anroid never works intuitive.

    • I am not a big fan of CSS but the styling of Android apps is much worse and CSS at least gives you a good flexibility.

  • Entire libraries and functions of anrdoid get deprecated like anrdoid support library. So you end up in documentations like TabLayout without any hint where to find the proper replacement. Anroid does it’s best to let you feel lost in space as developer.

Conclusion

In general it could be so much fun to build (mobile) apps but anroid makes the exeprience for developers so bad that it is alost as shitty as building web applications with HTML5 and JavaScript. Sorry, for being so harsh but I wanted to make my point very clear after all frustration.

Clone this wiki locally