Skip to content

Commit

Permalink
chore: Switch gson to kotlinx
Browse files Browse the repository at this point in the history
  • Loading branch information
YuKongA committed Feb 8, 2025
1 parent d3ee210 commit 99c2699
Show file tree
Hide file tree
Showing 16 changed files with 164 additions and 147 deletions.
16 changes: 6 additions & 10 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import org.jetbrains.kotlin.konan.properties.Properties
plugins {
alias(libs.plugins.androidApplication)
alias(libs.plugins.kotlinAndroid)
alias(libs.plugins.kotlinSerialization)
alias(libs.plugins.refine)
kotlin("plugin.parcelize")
}
Expand Down Expand Up @@ -49,12 +50,7 @@ android {
isMinifyEnabled = true
isShrinkResources = true
vcsInfo.include = false
setProguardFiles(
listOf(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
)
setProguardFiles(listOf(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"))
}
}
packaging {
Expand All @@ -79,17 +75,18 @@ android {


dependencies {
implementation(libs.ezXHelper)
implementation(libs.dexkit)
compileOnly(libs.xposed)
compileOnly(libs.dev.rikka.hidden.stub)

implementation(libs.ezXHelper)
implementation(libs.dexkit)
implementation(libs.dev.rikka.hidden.compat)

implementation(libs.core.ktx)
implementation(libs.material)
implementation(libs.navigation.fragment.ktx)
implementation(libs.navigation.ui.ktx)
implementation(libs.gson)
implementation(libs.kotlinx.serialization.json)
implementation(libs.lyricGetter.api)
implementation(libs.lifecycle.viewmodel.ktx)
implementation(libs.xkt)
Expand All @@ -98,5 +95,4 @@ dependencies {
implementation(libs.modernandroidpreferences)
implementation(libs.swiperefreshlayout)


}
5 changes: 1 addition & 4 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
-keep class cn.lyric.getter.hook.MainHook
-keep class cn.lyric.getter.api.data.* { *; }
-keep class cn.lyric.getter.tool.MeiZuNotification{ *; }
-keep class cn.lyric.getter.data.** { *; }
-keep class com.google.gson.reflect.TypeToken { *; }
-keep class * extends com.google.gson.reflect.TypeToken
-keep class cn.lyric.getter.tool.MeiZuNotification { *; }
5 changes: 4 additions & 1 deletion app/src/main/kotlin/cn/lyric/getter/data/AppInfos.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package cn.lyric.getter.data

import android.graphics.drawable.Drawable
import kotlinx.serialization.Contextual
import kotlinx.serialization.Serializable

@Serializable
data class AppInfos(
val appName: String,
val appIcon: Drawable,
@Contextual val appIcon: Drawable,
val packageName: String,
val versionCode: Int,
val appRule: AppRule,
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/kotlin/cn/lyric/getter/data/AppRules.kt
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
package cn.lyric.getter.data

import kotlinx.serialization.Serializable

@Serializable
data class AppRules(
val appRules: List<AppRule>,
val appRulesVersion: Int,
val version: Int
)

@Serializable
data class AppRule(
val packageName: String,
val name: String,
val rules: List<Rule>
)

@Serializable
data class Rule(
val useApi: Boolean,
val apiVersion: Int,
Expand Down
11 changes: 7 additions & 4 deletions app/src/main/kotlin/cn/lyric/getter/data/GithubRelease.kt
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package cn.lyric.getter.data

import com.google.gson.annotations.SerializedName
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class GithubReleaseApi(
val assets: List<Asset>,
val body: String,
val name: String,
@SerializedName("tag_name") val tagName: String
@SerialName("tag_name") val tagName: String
)

@Serializable
data class Asset(
@SerializedName("browser_download_url") val browserDownloadUrl: String,
@SerializedName("content_type") val contentType: String,
@SerialName("browser_download_url") val browserDownloadUrl: String,
@SerialName("content_type") val contentType: String,
val name: String
)
6 changes: 4 additions & 2 deletions app/src/main/kotlin/cn/lyric/getter/data/NoticeData.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package cn.lyric.getter.data

import com.google.gson.annotations.SerializedName
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class NoticeData(
val title: String,
val subhead: String,
val content: String,
val url: String = "",
@SerializedName("api_version") val apiVersion: Int = 0,
@SerialName("api_version") val apiVersion: Int = 0,
)
17 changes: 9 additions & 8 deletions app/src/main/kotlin/cn/lyric/getter/tool/JsonTools.kt
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
package cn.lyric.getter.tool

import com.google.gson.Gson
import com.google.gson.GsonBuilder
import kotlinx.serialization.json.Json
import java.io.InputStreamReader

object JsonTools {
val gson = Gson()
val json = Json {
prettyPrint = true
ignoreUnknownKeys = true
}

inline fun <reified T> String.parseJSON(): T {
return gson.fromJson(this, T::class.java)
return json.decodeFromString(this)
}

inline fun <reified T> InputStreamReader.parseJSON(): T {
return gson.fromJson(this, T::class.java)
return json.decodeFromString(this.readText())
}

fun Any.toJSON(print: Boolean = false): String {
return if (print) {
val gson = GsonBuilder().setPrettyPrinting().create()
gson.toJson(this, Any::class.java)
json.encodeToString(this)
} else {
gson.toJson(this, Any::class.java)
Json.encodeToString(this)
}
}
}
2 changes: 0 additions & 2 deletions app/src/main/kotlin/cn/lyric/getter/ui/App.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package cn.lyric.getter.ui


import android.app.Application
import cn.lyric.getter.BuildConfig
import cn.lyric.getter.tool.ActivityTools
Expand All @@ -12,7 +11,6 @@ import cn.xiaowine.xkt.AcTool
import cn.xiaowine.xkt.LogTool
import com.google.android.material.color.DynamicColors


class App : Application() {
override fun onCreate() {
super.onCreate()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@ import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import cn.lyric.getter.BuildConfig
import cn.lyric.getter.data.NoticeData
import cn.lyric.getter.tool.JsonTools
import cn.xiaowine.xkt.SimpleHttpTool.get
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import kotlin.collections.set
import kotlin.text.get

class HomeViewModel(private val state: SavedStateHandle) : ViewModel() {
var noticeList: MutableLiveData<ArrayList<NoticeData>> = MutableLiveData()
Expand All @@ -19,9 +20,9 @@ class HomeViewModel(private val state: SavedStateHandle) : ViewModel() {
}

var expanded: Boolean
get() = state["expanded"] ?: true
get() = state.get<Boolean>("expanded") != false
set(value) {
state["expanded"] = value
state.set("expanded", value)
}
var appRulesVersionValue: String?
get() = state["appRulesVersionValue"]
Expand All @@ -37,9 +38,10 @@ class HomeViewModel(private val state: SavedStateHandle) : ViewModel() {
fun getNotice() {
Thread {
"https://xiaowine.github.io/Lyric-Getter/notice_list.json".get(onSuccess = {
val type = object : TypeToken<ArrayList<NoticeData>>() {}.type
val list: ArrayList<NoticeData> = Gson().fromJson(it, type)
val b = list.filter { notice -> notice.apiVersion == BuildConfig.API_VERSION }.sortedByDescending { notice -> notice.apiVersion }.isNotEmpty()
val list: ArrayList<NoticeData> = JsonTools.json.decodeFromString(it)
val b = list.filter { notice -> notice.apiVersion == BuildConfig.API_VERSION }
.sortedByDescending { notice -> notice.apiVersion }
.isNotEmpty()
if (b) {
noticeList.postValue(list)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import androidx.lifecycle.ViewModel

class ShareViewModel(private val state: SavedStateHandle) : ViewModel() {
var activated: Boolean
get() = state["activated"] ?: false
get() = state.get<Boolean>("activated") != false
set(value) {
state["activated"] = value
state.set("activated", value)
}

}
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
plugins {
alias(libs.plugins.androidApplication) apply false
alias(libs.plugins.kotlinAndroid) apply false
alias(libs.plugins.kotlinSerialization) apply false
}
30 changes: 20 additions & 10 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
[versions]
agp = "8.7.2"
kotlin = "2.1.0"
agp = "8.8.0"
androix-core-ktx = "1.15.0"
androix-navigation-ui-ktx = "2.8.6"
androix-navigation-fragment-ktx = "2.8.6"
androix-lifecycle-viewmodel-ktx = "2.8.7"

kotlin = "2.1.10"
kotlinx-serialization-json = "1.8.0"
hidden-api = "4.3.3"
material = "1.12.0"
swiperefreshlayout = "1.2.0-alpha01"
modernandroidpreferences = "2.3.2"

[libraries]
material = { module = "com.google.android.material:material", version = "1.12.0" }
core-ktx = { module = "androidx.core:core-ktx", version = "1.15.0" }
modernandroidpreferences = { module = "de.maxr1998:modernandroidpreferences", version = "2.3.2" }
navigation-ui-ktx = { module = "androidx.navigation:navigation-ui-ktx", version = "2.8.4" }
navigation-fragment-ktx = { module = "androidx.navigation:navigation-fragment-ktx", version = "2.8.4" }
lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version = "2.8.7" }
swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version = "1.2.0-alpha01" }
material = { module = "com.google.android.material:material", version.ref = "material" }
core-ktx = { module = "androidx.core:core-ktx", version.ref = "androix-core-ktx" }
modernandroidpreferences = { module = "de.maxr1998:modernandroidpreferences", version.ref = "modernandroidpreferences" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization-json" }
navigation-ui-ktx = { module = "androidx.navigation:navigation-ui-ktx", version.ref = "androix-navigation-ui-ktx" }
navigation-fragment-ktx = { module = "androidx.navigation:navigation-fragment-ktx", version.ref = "androix-navigation-fragment-ktx" }
lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "androix-lifecycle-viewmodel-ktx" }
swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "swiperefreshlayout" }

xposed = { module = "de.robv.android.xposed:api", version = "82" }
ezXHelper = { module = "com.github.kyuubiran:EzXHelper", version = "2.2.0" }
Expand All @@ -20,10 +30,10 @@ dexkit = { module = "org.luckypray:dexkit", version = "2.0.3" }
lyricGetter-api = { module = "com.github.xiaowine:Lyric-Getter-Api", version = "6.0.0" }
xkt = { module = "com.github.xiaowine:XKT", version = "1.0.12" }
dsp = { module = "com.github.xiaowine:dsp", version = "1.1.3" }
gson = { module = "com.google.code.gson:gson", version = "2.11.0" }
cardSlider = { module = "com.github.IslamKhSh:CardSlider", version = "1.0.1" }

[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }
kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
refine = { id = "dev.rikka.tools.refine", version = "4.4.0" }
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
3 changes: 1 addition & 2 deletions gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,7 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
Expand Down
Loading

0 comments on commit 99c2699

Please sign in to comment.