2018年3月14日 星期三

使用 support library 與 proguard 無法實例化 SearchView

在測試 SearchView 功能時發現 debug 版本工作正常,但是 release 版本一直出現 exception 如下

Cannot instantiate class: android.support.v7.widget.SearchView
java.lang.NoSuchMethodException: <init> [class android.content.Context]
    at java.lang.Class.getConstructor(Class.java:531)
    at java.lang.Class.getConstructor(Class.java:495)
    at android.support.v7.view.g$b.a(Unknown Source)
    at android.support.v7.view.g$b.a(Unknown Source)
    at android.support.v7.view.g$b.b(Unknown Source)
    at android.support.v7.view.g.a(Unknown Source)
    at android.support.v7.view.g.inflate(Unknown Source)

照例谷哥一番,發現在 google issue reporter 有人回報此 issue,解法是在 proguard 的 config 中 exclude SearchView 就好了,因為 proguard 不知道你用到這個 class,所以會把它刪掉

該 issue 中也有人回覆說 official document 中 android:actionViewClass 項目有說明了,然後這是 intended behavior,所以不需要修復此 issue

是沒錯啦,你在文件中有說明,但是應該是要在 proguard 的文件中說明或至少提一下吧,把說明藏在 menu resource 那邊,很容易會忽略的阿

沒有留言:

張貼留言