Jetpack DataStore の Proto DataStore(androidx.datastore:datastore
)を使ったアプリで、難読化を有効にした場合にクラッシュが発生したので、proguard設定をメモがてら記載したいと思います。
※ エラーの内容は下記で、いかにも難読化の設定が不十分っぽい感じがしました。
java.lang.RuntimeException: Field showCompleted_ for e1.a not found. Known fields are [public boolean e1.a.i, public int e1.a.j, public static final e1.a e1.a.k, public static volatile k2.a1 e1.a.l]
proguard設定
下記の内容を、proguardに記述すればOKでした。
-keepclassmembers class * extends com.google.protobuf.GeneratedMessageLite {
<fields>;
}
※ protobuf-javaの内容を参考にしました。
https://github.com/protocolbuffers/protobuf/blob/8a3c4948a49d3b38effea499fd9dee66f28cb0c4/java/lite/proguard.pgcfg
(解説)
Proto DataStoreの場合、Protocol buffersを利用して保存用クラス( GeneratedMessageLite
を継承したクラス)が生成されます。
難読化を有効にすると、保存用クラスも難読化され読み込みに失敗するようなので、前述したproguardの記述を行うことで、保存用クラスが難読化されるのを防ぐ形となっています。