最近我学习了Kotlin并尝试用它做一个项目来提高熟练度。在这个过程中,我使用了AndroidX,并在打包时对代码进行了混淆。然而,运行后出现了一个错误:java.lang.NoSuchFieldException: No field mGoButton in class Landroidx/appcompat/widget/SearchView;
首先,我注意到SearchView可能被混淆导致找不到相应的字段。于是,我添加了一条混淆规则:-keep class androidx.appcompat.widget.SearchView { ImageView mGoButton;}。然后再次运行,但仍然出现错误,这让我感到困惑。我回想起以前使用过的支持库(AndroidX之前的内容),于是我查看了混淆规则:
```java
-keep class android.support.** { *; }
-keep interface android.support.** { *; }
-dontwarn android.support.**
```
这些规则是针对支持库的,没有涉及到AndroidX。因此,我需要添加针对AndroidX的混淆规则:
```java
-keep class com.google.android.material.** {*;}
-keep class androidx.** {*;}
-keep public class * extends androidx.**
-keep interface androidx.** {*;}
-dontwarn com.google.android.material.**
-dontnote com.google.android.material.**
-dontwarn androidx.**
```
最后,我应用了这些新规则并重新运行。这次一切正常,没有出现错误。