update dep (#35)

enable code shrinking
remove gson
This commit is contained in:
ketal
2024-06-28 13:33:38 +08:00
committed by GitHub
parent dbb7c8d8f6
commit e7f3c5850b
20 changed files with 410 additions and 249 deletions

View File

@@ -35,7 +35,6 @@
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/Theme.GakumasLocalify">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

View File

@@ -1,9 +1,6 @@
package io.github.chinosk.gakumas.localify
import android.view.KeyEvent
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import io.github.chinosk.gakumas.localify.databinding.ActivityMainBinding

View File

@@ -16,7 +16,6 @@ import android.view.MotionEvent
import android.widget.Toast
import com.bytedance.shadowhook.ShadowHook
import com.bytedance.shadowhook.ShadowHook.ConfigBuilder
import com.google.gson.Gson
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.IXposedHookZygoteInit
import de.robv.android.xposed.XC_MethodHook
@@ -33,11 +32,9 @@ import kotlinx.coroutines.launch
import java.io.File
import java.util.Locale
import kotlin.system.measureTimeMillis
import android.content.ContentResolver
import io.github.chinosk.gakumas.localify.hookUtils.FileHotUpdater
import io.github.chinosk.gakumas.localify.mainUtils.json
import io.github.chinosk.gakumas.localify.models.ProgramConfig
import java.io.BufferedReader
import java.io.InputStreamReader
val TAG = "GakumasLocalify"
@@ -225,13 +222,17 @@ class GakumasHookMain : IXposedHookLoadPackage, IXposedHookZygoteInit {
if (gkmsData != null) {
gkmsDataInited = true
val initConfig = try {
Gson().fromJson(gkmsData, GakumasConfig::class.java)
json.decodeFromString<GakumasConfig>(gkmsData)
}
catch (e: Exception) {
null
}
val programConfig = try {
Gson().fromJson(programData, ProgramConfig::class.java)
if (programData == null) {
ProgramConfig()
} else {
json.decodeFromString<ProgramConfig>(programData)
}
}
catch (e: Exception) {
null

View File

@@ -15,23 +15,22 @@ import androidx.compose.runtime.collectAsState
import androidx.core.content.FileProvider
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import com.google.gson.ExclusionStrategy
import com.google.gson.FieldAttributes
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.JsonSyntaxException
import io.github.chinosk.gakumas.localify.databinding.ActivityMainBinding
import io.github.chinosk.gakumas.localify.hookUtils.FileHotUpdater
import io.github.chinosk.gakumas.localify.hookUtils.FilesChecker
import io.github.chinosk.gakumas.localify.hookUtils.MainKeyEventDispatcher
import io.github.chinosk.gakumas.localify.mainUtils.json
import io.github.chinosk.gakumas.localify.models.GakumasConfig
import io.github.chinosk.gakumas.localify.models.ProgramConfig
import io.github.chinosk.gakumas.localify.models.ProgramConfigSerializer
import io.github.chinosk.gakumas.localify.models.ProgramConfigViewModel
import io.github.chinosk.gakumas.localify.models.ProgramConfigViewModelFactory
import io.github.chinosk.gakumas.localify.ui.pages.MainUI
import io.github.chinosk.gakumas.localify.ui.theme.GakumasLocalifyTheme
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.serialization.SerializationException
import kotlinx.serialization.encodeToString
import java.io.File
@@ -78,8 +77,8 @@ class MainActivity : ComponentActivity(), ConfigUpdateListener {
}
}
private fun getProgramConfigContent(excludes: List<String>? = null): String {
if (excludes == null) {
private fun getProgramConfigContent(excludes: List<String> = emptyList()): String {
if (excludes.isEmpty()) {
val configFile = File(filesDir, "localify-config.json")
return if (configFile.exists()) {
configFile.readText()
@@ -89,18 +88,7 @@ class MainActivity : ComponentActivity(), ConfigUpdateListener {
}
}
else {
val gson = GsonBuilder()
.setExclusionStrategies(object : ExclusionStrategy {
override fun shouldSkipField(f: FieldAttributes): Boolean {
return excludes.contains(f.name)
}
override fun shouldSkipClass(clazz: Class<*>): Boolean {
return false
}
})
.create()
return gson.toJson(programConfig)
return json.encodeToString(ProgramConfigSerializer(excludes), programConfig)
}
}
@@ -113,7 +101,7 @@ class MainActivity : ComponentActivity(), ConfigUpdateListener {
Log.d(TAG, e.toString())
}
val configFile = File(filesDir, "gkms-config.json")
configFile.writeText(Gson().toJson(binding.config!!))
configFile.writeText(json.encodeToString(binding.config!!))
}
override fun saveProgramConfig() {
@@ -125,7 +113,7 @@ class MainActivity : ComponentActivity(), ConfigUpdateListener {
Log.d(TAG, e.toString())
}
val configFile = File(filesDir, "localify-config.json")
configFile.writeText(Gson().toJson(programConfig))
configFile.writeText(json.encodeToString(programConfig))
}
fun getVersion(): List<String> {
@@ -155,20 +143,20 @@ class MainActivity : ComponentActivity(), ConfigUpdateListener {
private fun loadConfig() {
val configStr = getConfigContent()
binding.config = try {
Gson().fromJson(configStr, GakumasConfig::class.java)
json.decodeFromString<GakumasConfig>(configStr)
}
catch (e: JsonSyntaxException) {
catch (e: SerializationException) {
showToast("配置文件异常,已重置: $e")
Gson().fromJson("{}", GakumasConfig::class.java)
GakumasConfig()
}
saveConfig()
val programConfigStr = getProgramConfigContent()
programConfig = try {
Gson().fromJson(programConfigStr, ProgramConfig::class.java)
json.decodeFromString<ProgramConfig>(programConfigStr)
}
catch (e: JsonSyntaxException) {
Gson().fromJson("{}", ProgramConfig::class.java)
catch (e: SerializationException) {
ProgramConfig()
}
}

View File

@@ -1,11 +1,10 @@
package io.github.chinosk.gakumas.localify.hookUtils
import android.util.Log
import android.view.KeyEvent
object MainKeyEventDispatcher {
private val targetDbgKeyList: IntArray = intArrayOf(19, 19, 20, 20, 21, 22, 21, 22, 30, 29)
private var currentIndex = 0;
private var currentIndex = 0
fun checkDbgKey(code: Int, action: Int): Boolean {
if (action == KeyEvent.ACTION_UP) return false

View File

@@ -0,0 +1,7 @@
package io.github.chinosk.gakumas.localify.mainUtils
import kotlinx.serialization.json.Json
val json = Json {
encodeDefaults = true
}

View File

@@ -1,24 +1,31 @@
package io.github.chinosk.gakumas.localify.models
data class AboutPageConfig (
var plugin_repo: String = "https://github.com/chinosk6/gakuen-imas-localify",
var main_contributors: List<MainContributors> = listOf(),
var contrib_img: ContribImg = ContribImg(
import kotlinx.serialization.Serializable
@Serializable
data class AboutPageConfig(
val plugin_repo: String = "https://github.com/chinosk6/gakuen-imas-localify",
val main_contributors: List<MainContributors> = listOf(),
val contrib_img: ContribImg = ContribImg(
"https://contrib.rocks/image?repo=chinosk6/gakuen-imas-localify",
"https://contrib.rocks/image?repo=chinosk6/GakumasTranslationData")
"https://contrib.rocks/image?repo=chinosk6/GakumasTranslationData"
)
)
data class MainContributors (
var name: String,
var links: List<Links>
@Serializable
data class MainContributors(
val name: String,
val links: List<Links>
)
data class ContribImg (
var plugin: String,
var translation: String
@Serializable
data class ContribImg(
val plugin: String,
val translation: String
)
data class Links (
var name: String,
var link: String
)
@Serializable
data class Links(
val name: String,
val link: String
)

View File

@@ -1,6 +1,8 @@
package io.github.chinosk.gakumas.localify.models
import kotlinx.serialization.Serializable
@Serializable
data class GakumasConfig (
var dbgMode: Boolean = false,
var enabled: Boolean = true,

View File

@@ -1,12 +1,41 @@
package io.github.chinosk.gakumas.localify.models
import io.github.chinosk.gakumas.localify.mainUtils.json
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.encoding.encodeStructure
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.encodeToJsonElement
import kotlinx.serialization.json.jsonObject
data class ProgramConfig (
@Serializable
data class ProgramConfig(
var checkBuiltInAssets: Boolean = true,
var transRemoteZipUrl: String = "",
var useRemoteAssets: Boolean = false,
var delRemoteAfterUpdate: Boolean = true,
var cleanLocalAssets: Boolean = false,
var p: Boolean = false
)
class ProgramConfigSerializer(
private val excludes: List<String> = emptyList(),
) : KSerializer<ProgramConfig> {
override val descriptor: SerialDescriptor = ProgramConfig.serializer().descriptor
override fun serialize(encoder: Encoder, value: ProgramConfig) {
val jsonObject = json.encodeToJsonElement(value).jsonObject
encoder.encodeStructure(descriptor) {
jsonObject.keys.forEachIndexed { index, k ->
if (k in excludes) return@forEachIndexed
encodeSerializableElement(descriptor, index, JsonElement.serializer(), jsonObject[k]!!)
}
}
}
override fun deserialize(decoder: Decoder): ProgramConfig {
return ProgramConfig.serializer().deserialize(decoder)
}
}

View File

@@ -28,10 +28,10 @@ import coil.compose.rememberAsyncImagePainter
import coil.decode.SvgDecoder
import coil.request.ImageRequest
import coil.size.Size
import com.google.gson.Gson
import io.github.chinosk.gakumas.localify.MainActivity
import io.github.chinosk.gakumas.localify.R
import io.github.chinosk.gakumas.localify.hookUtils.FilesChecker.convertToString
import io.github.chinosk.gakumas.localify.mainUtils.json
import io.github.chinosk.gakumas.localify.models.AboutPageConfig
import io.github.chinosk.gakumas.localify.models.GakumasConfig
import io.github.chinosk.gakumas.localify.ui.components.GakuButton
@@ -48,7 +48,7 @@ fun AboutPage(modifier: Modifier = Modifier,
val dataJsonString = context?.getString(R.string.about_contributors_asset_file)?.let {
convertToString(context.assets?.open(it))
}
Gson().fromJson(dataJsonString, AboutPageConfig::class.java)
dataJsonString?.let { json.decodeFromString<AboutPageConfig>(it) }
?: AboutPageConfig()
}
@@ -137,7 +137,7 @@ fun AboutPage(modifier: Modifier = Modifier,
url = contributorInfo.contrib_img.plugin,
contentDescription = "plugin-contrib"
)
Spacer(modifier = Modifier.height(4.dp))
Text(stringResource(R.string.translation_repository), fontSize = 16.sp)
NetworkSvgImage(