Android 8.0.0でEditTextをタップした時にクラッシュしていた。
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.getBoundsOnScreen(android.graphics.Rect)' on a null object reference at android.app.assist.AssistStructure$WindowNode.<init>(AssistStructure.java:484) at android.app.assist.AssistStructure.<init>(AssistStructure.java:1908) at android.app.ActivityThread.handleRequestAssistContextExtras(ActivityThread.java:3038) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1810) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6565) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
これはOS8.0.0で起こるバグで、OS8.0.1にアップデートすれば治るとのこと。原因はAutofillまわりで、qiitaには以下のようにAutofill自体をしないようにしてクラッシュさせない方法があがっていた。
(qiitaから引用しました)
<style name="MyTheme" parent="@style/Nanika"> ... <item name="editTextStyle">@style/EditTextStyle</item> ... </style> <style name="EditTextStyle" parent="@style/Widget.AppCompat.EditText"> <item name="android:importantForAutofill" tools:ignore="NewApi">noExcludeDescendants</item> </style>
ただ、これだとAutofill自体が効かなくなってしまう。なので、issuetrackerにあがっていたもう一つの方法を試してみたらクラッシュしなくなった。
というのも、このクラッシュは以下のようにTextInputLayout
の子要素にEditText
があり、その中でhintを使っている時に起こるようだった。そのhintを親のTextInputLayout
に移せばクラッシュは起きなくなった。
<android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.design.widget.TextInputEditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/hint" /> </android.support.design.widget.TextInputLayout>
原因が結局モヤっとしているのだけど、OS8.0.0の全端末でこの事象が起きる訳ではなく一部の端末で起きていて、しかもOSのアップデートで治るのなら根深いんだろうな、と思ってそれ以上は深く掘って調べてない。
Android 8 (Oreo) の EditText をタップするとクラッシュする - Qiita Android O Preview 3 AssistStructure View.getBoundsOnScreen NPE [62834931] - Visible to Public - Issue Tracker