This call stack, captured from Google Play for one of my apps, shows what's fundamentally wrong with Android.
The app didn't even finish launching, and this is how deep the complexity runs?
backtrace: #00 pc 00000000000264f4 /system/lib/libharfbuzz_ng.so (hb_ot_layout_has_glyph_classes+28) #01 pc 0000000000049af0 /system/lib/libharfbuzz_ng.so (_hb_ot_shape+192) #02 pc 000000000001e008 /system/lib/libharfbuzz_ng.so (hb_shape_plan_execute+140) #03 pc 000000000001db30 /system/lib/libharfbuzz_ng.so (hb_shape+84) #04 pc 0000000000011b05 /system/lib/libminikin.so (minikin::Layout::doLayoutRun(unsigned short const*, unsigned int, unsigned int, unsigned int, bool, minikin::MinikinPaint const&, minikin::StartHyphenEdit, minikin::EndHyphenEdit)+3780) #05 pc 0000000000013991 /system/lib/libminikin.so (minikin::LayoutCacheKey::doLayout(minikin::Layout*, minikin::MinikinPaint const&) const+148) #06 pc 0000000000010bf5 /system/lib/libminikin.so (void minikin::LayoutCache::getOrCreate(minikin::U16StringPiece const&, minikin::Range const&, minikin::MinikinPaint const&, bool, minikin::StartHyphenEdit, minikin::EndHyphenEdit, minikin::LayoutAppendFunctor&)+468) #07 pc 0000000000010717 /system/lib/libminikin.so (minikin::Layout::doLayoutWord(unsigned short const*, unsigned int, unsigned int, unsigned int, bool, minikin::MinikinPaint const&, unsigned int, minikin::StartHyphenEdit, minikin::EndHyphenEdit, minikin::LayoutPieces const*, minikin::Layout*, float*, minikin::MinikinExtent*, minikin::MinikinRect*, minikin::LayoutPieces*)+234) #08 pc 000000000000fcd5 /system/lib/libminikin.so (minikin::Layout::doLayoutRunCached(minikin::U16StringPiece const&, minikin::Range const&, bool, minikin::MinikinPaint const&, unsigned int, minikin::StartHyphenEdit, minikin::EndHyphenEdit, minikin::LayoutPieces const*, minikin::Layout*, float*, minikin::MinikinExtent*, minikin::MinikinRect*, minikin::LayoutPieces*)+1160) #09 pc 0000000000010609 /system/lib/libminikin.so (minikin::Layout::measureText(minikin::U16StringPiece const&, minikin::Range const&, minikin::Bidi, minikin::MinikinPaint const&, minikin::StartHyphenEdit, minikin::EndHyphenEdit, float*, minikin::MinikinExtent*, minikin::LayoutPieces*)+1292) #10 pc 000000000022ca17 /system/lib/libhwui.so (android::MinikinUtils::measureText(android::Paint const*, minikin::Bidi, android::Typeface const*, unsigned short const*, unsigned int, unsigned int, unsigned int, float*)+82) #11 pc 00000000000e1cd5 /system/lib/libandroid_runtime.so (android::PaintGlue::getRunAdvance___CIIIIZI_F(_JNIEnv*, _jclass*, long long, _jcharArray*, int, int, int, int, unsigned char, int)+204) #12 pc 0000000000a4758b /system/framework/arm/boot-framework.oat (android.graphics.Paint.nGetRunAdvance+178) #13 pc 0000000000a48e0d /system/framework/arm/boot-framework.oat (android.graphics.Paint.getRunAdvance+172) #14 pc 0000000000a48cab /system/framework/arm/boot-framework.oat (android.graphics.Paint.getRunAdvance+250) #15 pc 0000000001482e99 /system/framework/arm/boot-framework.oat (android.text.TextLine.getRunAdvance+128) #16 pc 0000000001483d89 /system/framework/arm/boot-framework.oat (android.text.TextLine.handleText+312) #17 pc 0000000001483367 /system/framework/arm/boot-framework.oat (android.text.TextLine.handleRun+566) #18 pc 0000000001484f49 /system/framework/arm/boot-framework.oat (android.text.TextLine.measure+216) #19 pc 0000000001485bcd /system/framework/arm/boot-framework.oat (android.text.TextLine.metrics+44) #20 pc 00000000017ac2c9 /system/framework/arm/boot-framework.oat (android.text.BoringLayout.isBoring+384) #21 pc 0000000001af2d8f /system/framework/arm/boot-framework.oat (android.widget.TextView.onMeasure+430) #22 pc 000000000180ff23 /system/framework/arm/boot-framework.oat (android.view.View.measure+826) #23 pc 0000000001a7c3bb /system/framework/arm/boot-framework.oat (android.view.ViewGroup.measureChildWithMargins+178) #24 pc 0000000001c900a1 /system/framework/arm/boot-framework.oat (android.widget.LinearLayout.measureChildBeforeLayout+64) #25 pc 0000000001c904ed /system/framework/arm/boot-framework.oat (android.widget.LinearLayout.measureHorizontal+1060) #26 pc 0000000001c91f41 /system/framework/arm/boot-framework.oat (android.widget.LinearLayout.onMeasure+64) #27 pc 0000000001f4f553 /system/framework/arm/boot-framework.oat (com.android.internal.widget.ButtonBarLayout.onMeasure+226) #28 pc 000000000180ff23 /system/framework/arm/boot-framework.oat (android.view.View.measure+826) #29 pc 0000000001d3747d /system/framework/arm/boot-framework.oat (android.widget.ScrollView.measureChildWithMargins+228) #30 pc 0000000001c87141 /system/framework/arm/boot-framework.oat (android.widget.FrameLayout.onMeasure+296) #31 pc 0000000001d384f7 /system/framework/arm/boot-framework.oat (android.widget.ScrollView.onMeasure+46) #32 pc 000000000180ff23 /system/framework/arm/boot-framework.oat (android.view.View.measure+826) #33 pc 0000000001f4eaf3 /system/framework/arm/boot-framework.oat (com.android.internal.widget.AlertDialogLayout.tryOnMeasure+434) #34 pc 0000000001f4f13f /system/framework/arm/boot-framework.oat (com.android.internal.widget.AlertDialogLayout.onMeasure+46) #35 pc 000000000180ff23 /system/framework/arm/boot-framework.oat (android.view.View.measure+826) #36 pc 0000000001a7c3bb /system/framework/arm/boot-framework.oat (android.view.ViewGroup.measureChildWithMargins+178) #37 pc 0000000001c87141 /system/framework/arm/boot-framework.oat (android.widget.FrameLayout.onMeasure+296) #38 pc 000000000180ff23 /system/framework/arm/boot-framework.oat (android.view.View.measure+826) #39 pc 0000000001a7c3bb /system/framework/arm/boot-framework.oat (android.view.ViewGroup.measureChildWithMargins+178) #40 pc 0000000001c87141 /system/framework/arm/boot-framework.oat (android.widget.FrameLayout.onMeasure+296) #41 pc 000000000180ff23 /system/framework/arm/boot-framework.oat (android.view.View.measure+826) #42 pc 0000000001a7c3bb /system/framework/arm/boot-framework.oat (android.view.ViewGroup.measureChildWithMargins+178) #43 pc 0000000001c87141 /system/framework/arm/boot-framework.oat (android.widget.FrameLayout.onMeasure+296) #44 pc 0000000001d65865 /system/framework/arm/boot-framework.oat (com.android.internal.policy.DecorView.onMeasure+1252) #45 pc 000000000180ff23 /system/framework/arm/boot-framework.oat (android.view.View.measure+826) #46 pc 00000000018368f7 /system/framework/arm/boot-framework.oat (android.view.ViewRootImpl.performMeasure+246) #47 pc 00000000018353ed /system/framework/arm/boot-framework.oat (android.view.ViewRootImpl.measureHierarchy+500) #48 pc 000000000183733b /system/framework/arm/boot-framework.oat (android.view.ViewRootImpl.performTraversals+2330) #49 pc 000000000183dbb5 /system/framework/arm/boot-framework.oat (android.view.ViewRootImpl.doTraversal+188) #50 pc 0000000000d5e83d /system/framework/arm/boot-framework.oat (android.content.ContextWrapper.getBasePackageName [DEDUPED]+52) #51 pc 0000000001515df7 /system/framework/arm/boot-framework.oat (android.view.Choreographer.doCallbacks+966) #52 pc 0000000001516675 /system/framework/arm/boot-framework.oat (android.view.Choreographer.doFrame+1396) #53 pc 00000000017d6413 /system/framework/arm/boot-framework.oat (android.view.Choreographer$FrameDisplayEventReceiver.run+66) #54 pc 000000000130e659 /system/framework/arm/boot-framework.oat (android.os.Handler.dispatchMessage+64) #55 pc 0000000001313e8b /system/framework/arm/boot-framework.oat (android.os.Looper.loop+1162) #56 pc 0000000000c905d3 /system/framework/arm/boot-framework.oat (android.app.ActivityThread.main+674) #57 pc 0000000000417575 /system/lib/libart.so (art_quick_invoke_stub_internal+68) #58 pc 00000000003f125f /system/lib/libart.so (art_quick_invoke_static_stub+222) #59 pc 00000000000a1043 /system/lib/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+154) #60 pc 000000000035093d /system/lib/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+52) #61 pc 0000000000351d85 /system/lib/libart.so (art::InvokeMethod(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned int)+960) #62 pc 0000000000302b15 /system/lib/libart.so (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobjectArray*)+40) #63 pc 00000000006ab577 /system/framework/arm/boot-core-oj.oat (java.lang.Class.getDeclaredMethodInternal [DEDUPED]+110) #64 pc 000000000165417b /system/framework/arm/boot-framework.oat (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+114) #65 pc 000000000165da49 /system/framework/arm/boot-framework.oat (com.android.internal.os.ZygoteInit.main+2896) #66 pc 0000000000417575 /system/lib/libart.so (art_quick_invoke_stub_internal+68) #67 pc 00000000003f125f /system/lib/libart.so (art_quick_invoke_static_stub+222) #68 pc 00000000000a1043 /system/lib/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+154) #69 pc 000000000035093d /system/lib/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+52) #70 pc 0000000000350759 /system/lib/libart.so (art::InvokeWithVarArgs(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+304) #71 pc 000000000029493d /system/lib/libart.so (art::JNI::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+476) #72 pc 000000000006d819 /system/lib/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+28) #73 pc 000000000006f9cf /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, android::Vector const&, bool)+466) #74 pc 0000000000001b21 /system/bin/app_process32 (main+880) #75 pc 00000000000a2b3d /system/lib/libc.so (__libc_init+48) #76 pc 000000000000176f /system/bin/app_process32 (_start_main+46) #77 pc 0000000000019da9 /system/bin/linker (__dl__ZN6soinfoD1Ev+16) #78 pc 00000000007fea64 [stack:ff3b8000]