Use kotshi instead of moshi-kotlin-codegen

This commit is contained in:
topjohnwu 2019-06-01 13:18:11 -07:00
parent 4122ebe18f
commit 80d834fb55
8 changed files with 26 additions and 61 deletions

View File

@ -26,7 +26,7 @@ android {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
'proguard-rules.pro', 'proguard-moshi.pro', 'proguard-kotlin.pro'
'proguard-rules.pro', 'proguard-kotlin.pro'
}
}
@ -86,7 +86,10 @@ dependencies {
def vMoshi = "1.8.0"
implementation "com.squareup.moshi:moshi:${vMoshi}"
kapt "com.squareup.moshi:moshi-kotlin-codegen:${vMoshi}"
def vKotshi = "2.0.1"
implementation "se.ansman.kotshi:api:${vKotshi}"
kapt "se.ansman.kotshi:compiler:${vKotshi}"
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.browser:browser:1.0.0'

View File

@ -1,49 +0,0 @@
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**
-keepclasseswithmembers class * {
@com.squareup.moshi.* <methods>;
}
-keep @com.squareup.moshi.JsonQualifier interface *
# Enum field names are used by the integrated EnumJsonAdapter.
# Annotate enums with @JsonClass(generateAdapter = false) to use them with Moshi.
-keepclassmembers @com.squareup.moshi.JsonClass class * extends java.lang.Enum {
<fields>;
}
# The name of @JsonClass types is used to look up the generated adapter.
-keepnames @com.squareup.moshi.JsonClass class *
# Retain generated JsonAdapters if annotated type is retained.
-if @com.squareup.moshi.JsonClass class *
-keep class <1>JsonAdapter {
<init>(...);
<fields>;
}
-if @com.squareup.moshi.JsonClass class **$*
-keep class <1>_<2>JsonAdapter {
<init>(...);
<fields>;
}
-if @com.squareup.moshi.JsonClass class **$*$*
-keep class <1>_<2>_<3>JsonAdapter {
<init>(...);
<fields>;
}
-if @com.squareup.moshi.JsonClass class **$*$*$*
-keep class <1>_<2>_<3>_<4>JsonAdapter {
<init>(...);
<fields>;
}
-if @com.squareup.moshi.JsonClass class **$*$*$*$*
-keep class <1>_<2>_<3>_<4>_<5>JsonAdapter {
<init>(...);
<fields>;
}
-if @com.squareup.moshi.JsonClass class **$*$*$*$*$*
-keep class <1>_<2>_<3>_<4>_<5>_<6>JsonAdapter {
<init>(...);
<fields>;
}

View File

@ -17,7 +17,7 @@
#}
# Retrofit classes
-keep,allowobfuscation class com.topjohnwu.magisk.data.network.**
-keep,allowobfuscation class com.topjohnwu.magisk.data.network.*
# Snet
-keepclassmembers class com.topjohnwu.magisk.utils.ISafetyNetHelper { *; }

View File

@ -1,5 +1,6 @@
package com.topjohnwu.magisk.di
import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.Moshi
import com.topjohnwu.magisk.Constants
import com.topjohnwu.magisk.data.network.GithubRawApiServices
@ -11,6 +12,7 @@ import retrofit2.Converter
import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import retrofit2.converter.moshi.MoshiConverterFactory
import se.ansman.kotshi.KotshiJsonAdapterFactory
val networkingModule = module {
single { createOkHttpClient() }
@ -31,7 +33,9 @@ fun createOkHttpClient(): OkHttpClient {
}
fun createConverterFactory(): Converter.Factory {
val moshi = Moshi.Builder().build()
val moshi = Moshi.Builder()
.add(JsonAdapterFactory.INSTANCE)
.build()
return MoshiConverterFactory.create(moshi)
}
@ -50,6 +54,13 @@ fun createRetrofit(
.client(okHttpClient)
}
@KotshiJsonAdapterFactory
abstract class JsonAdapterFactory : JsonAdapter.Factory {
companion object {
val INSTANCE: JsonAdapterFactory = KotshiJsonAdapterFactory
}
}
inline fun <reified T> createApiService(retrofitBuilder: Retrofit.Builder, baseUrl: String): T {
return retrofitBuilder
.baseUrl(baseUrl)

View File

@ -1,8 +1,8 @@
package com.topjohnwu.magisk.model.entity
import com.squareup.moshi.JsonClass
import se.ansman.kotshi.JsonSerializable
@JsonClass(generateAdapter = true)
@JsonSerializable
data class MagiskApp(
val version: String,
val versionCode: String,

View File

@ -1,8 +1,8 @@
package com.topjohnwu.magisk.model.entity
import com.squareup.moshi.JsonClass
import se.ansman.kotshi.JsonSerializable
@JsonClass(generateAdapter = true)
@JsonSerializable
data class MagiskConfig(
val app: MagiskApp,
val uninstaller: MagiskLink,

View File

@ -1,9 +1,9 @@
package com.topjohnwu.magisk.model.entity
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import se.ansman.kotshi.JsonSerializable
@JsonClass(generateAdapter = true)
@JsonSerializable
data class MagiskFlashable(
val version: String,
val versionCode: String,

View File

@ -1,8 +1,8 @@
package com.topjohnwu.magisk.model.entity
import com.squareup.moshi.JsonClass
import se.ansman.kotshi.JsonSerializable
@JsonClass(generateAdapter = true)
@JsonSerializable
data class MagiskLink(
val link: String
)