From b03f6241916d4921d75aaceb95ea0536130cd22c Mon Sep 17 00:00:00 2001 From: lynxnb Date: Fri, 29 Jul 2022 17:29:11 +0200 Subject: [PATCH] Add `kotlinx.serialization-json` dependencies --- app/build.gradle | 6 ++++-- app/proguard-rules.pro | 28 ++++++++++++++++++++++++++++ build.gradle | 1 + 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 448b7dad..0771db72 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,6 +4,7 @@ plugins { id 'kotlin-kapt' id 'dagger.hilt.android.plugin' id 'idea' + id 'org.jetbrains.kotlin.plugin.serialization' version "$kotlin_version" } idea.module { @@ -108,7 +109,7 @@ android { dependencies { /* Google */ - implementation "androidx.core:core-ktx:1.7.0" + implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' implementation 'androidx.preference:preference-ktx:1.2.0' @@ -123,7 +124,8 @@ dependencies { implementation 'com.google.android.flexbox:flexbox:3.0.0' /* Kotlin */ - implementation("org.jetbrains.kotlin:kotlin-reflect:1.6.20") + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:$serialization_version" /* JetBrains */ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 04ff4a94..d367cfb4 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -6,3 +6,31 @@ -keep class emu.skyline.** { *; } # Keep kotlin classes so that kotlin reflection works -keep class kotlin.** {*;} + +# https://github.com/Kotlin/kotlinx.serialization#android +# Keep `Companion` object fields of serializable classes. +# This avoids serializer lookup through `getDeclaredClasses` as done for named companion objects. +-if @kotlinx.serialization.Serializable class ** +-keepclassmembers class <1> { + static <1>$Companion Companion; +} + +# Keep `serializer()` on companion objects (both default and named) of serializable classes. +-if @kotlinx.serialization.Serializable class ** { + static **$* *; +} +-keepclassmembers class <2>$<3> { + kotlinx.serialization.KSerializer serializer(...); +} + +# Keep `INSTANCE.serializer()` of serializable objects. +-if @kotlinx.serialization.Serializable class ** { + public static ** INSTANCE; +} +-keepclassmembers class <1> { + public static <1> INSTANCE; + kotlinx.serialization.KSerializer serializer(...); +} + +# @Serializable and @Polymorphic are used at runtime for polymorphic serialization. +-keepattributes RuntimeVisibleAnnotations,AnnotationDefault diff --git a/build.gradle b/build.gradle index fad95f32..53a5fa0d 100644 --- a/build.gradle +++ b/build.gradle @@ -3,6 +3,7 @@ buildscript { ext { kotlin_version = '1.6.21' + serialization_version = '1.3.3' lifecycle_version = '2.4.1' hilt_version = '2.41' }