閉じる

java.lang.NoSuchMethodError: No interface method a(Landroid/arch/lifecycle/h;Landroid/arch/lifecycle/e$a;)V in class Landroid/arch/lifecycle/GenericLifecycleObserver; or its super classes (declaration of ‘android.arch.lifecycle.GenericLifecycleObserver’ appears in /data/app/com.google.android.apps.mtaas.crawler-1/base.apk)

LifecycleObserverを導入後、Android Studioを 2.3.3から 3.0へ上げた辺りでリリース前レポートで報告されるようになった。
直接的な原因は Proguardによる難読化によって lifecycle周りのメソッドが消えたかリネームされた事のようで、「minifyEnabled false」とすれば回避可能。
ただ、同じバイナリで実機では問題無く動いているのが不思議。
proguard-rules.proに以下のルールを追加して「minifyEnabled true」でも大丈夫なように。

-keep public class android.arch.lifecycle.** {
    public protected *;
}

-keepclassmembers class ** {
    @android.arch.lifecycle.OnLifecycleEvent public *;
}

以前はこんなルールを書かなくても良かったはずなんだけどなぁ???

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)