8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Android】Jetpack DataStoreのproguard設定(Proto DataStore編)

Posted at

Jetpack DataStoreProto DataStoreandroidx.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の記述を行うことで、保存用クラスが難読化されるのを防ぐ形となっています。

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?