Compare commits

6 Commits

Author SHA1 Message Date
988eeb2dd9 UPDATE: 4.0.5X
All checks were successful
Build / build (push) Successful in 10m25s
2026-03-16 16:51:31 +07:00
f64f690a0a UPDATE: 3.7.52
All checks were successful
Build / build (push) Successful in 13m0s
2025-11-11 21:04:25 +07:00
b0c4a7e05a UPDATE: Support TCP, Apply Singleton pattern, Replace reflection with Type Factory + sync.Pool for optimization, Optimize file release process
All checks were successful
Build / build (push) Successful in 8m47s
2025-10-19 13:20:56 +07:00
0a44f56c2f Re-optima apk
All checks were successful
Build / build (push) Successful in 6m3s
2025-10-18 09:13:43 +07:00
527c8176e4 FIX: Update new resource
All checks were successful
Build / build (push) Successful in 7m18s
2025-10-17 12:31:30 +07:00
a54219b781 FIX: Update new resource
Some checks failed
Build / build (push) Failing after 3m37s
2025-10-17 12:24:53 +07:00
16 changed files with 3315 additions and 330 deletions

View File

@@ -1,7 +1,11 @@
name: Build
run-name: ${{ gitea.actor }} build 🚀
on: [push]
on:
push:
branches:
- master
jobs:
build:
@@ -13,7 +17,7 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '21.0.7'
java-version: '17'
- name: Setup Android SDK
uses: amyu/setup-android@v5

2
.idea/compiler.xml generated
View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="21" />
<bytecodeTargetLevel target="17" />
</component>
</project>

1
.idea/gradle.xml generated
View File

@@ -15,5 +15,6 @@
</option>
</GradleProjectSettings>
</option>
<option name="parallelModelFetch" value="true" />
</component>
</project>

8
.idea/markdown.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MarkdownSettings">
<option name="previewPanelProviderInfo">
<ProviderInfo name="Compose (experimental)" className="com.intellij.markdown.compose.preview.ComposePanelProvider" />
</option>
</component>
</project>

3
.idea/misc.xml generated
View File

@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">

View File

@@ -1,13 +1,13 @@
@file:Suppress("UnstableApiUsage")
import com.android.build.api.dsl.Packaging
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
}
kotlin {
jvmToolchain(17)
}
android {
namespace = "com.example.firefly_go_android"
@@ -22,30 +22,22 @@ android {
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
fun Packaging.() {
jniLibs {
useLegacyPackaging = true
}
}
buildTypes {
release {
isMinifyEnabled = false
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
ndk {
abiFilters.addAll(listOf("arm64-v8a"))
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
buildFeatures {
@@ -101,5 +93,7 @@ dependencies {
// Local AAR library
implementation(files("libs/firefly-go.aar"))
implementation(libs.slf4j.android)
}

Binary file not shown.

View File

@@ -66,6 +66,7 @@ import androidx.compose.ui.window.DialogProperties
import kotlinx.coroutines.delay
import org.json.JSONObject
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.font.FontFamily
data class AppVersion(
val latestVersion: String,
@@ -421,64 +422,60 @@ fun parseGoLogLine(line: String): String? {
return if (content.isNullOrBlank()) null else content
}
fun parseAnsi(text: String): AnnotatedString {
fun parseAnsi(text: String, defaultColor: Color): AnnotatedString {
val regex = Regex("\u001B\\[(\\d+)(;\\d+)*m")
val builder = buildAnnotatedString {
var lastIndex = 0
var currentColor = Color.Black
var currentColor = defaultColor
for (match in regex.findAll(text)) {
val start = match.range.first
// 1. Thêm phần text TRƯỚC mã ANSI với màu HIỆN TẠI
val before = text.substring(lastIndex, start)
if (before.isNotEmpty()) {
withStyle(SpanStyle(color = currentColor)) {
append(before)
}
}
// 2. Lấy mã code (ví dụ 31, 36, hoặc 0)
val code = try {
match.groupValues[1].toInt()
} catch (e: NumberFormatException) {
0
}
val code = match.groupValues[1].toInt()
currentColor = when (code) {
30 -> {
Color.Black
}
31 -> {
Color.Red
}
32 -> {
Color(0xFF00C853)
}
33 -> {
Color(0xFFFFD600)
}
34 -> {
Color(0xFF2962FF)
}
35 -> {
Color(0xFFD500F9)
}
36 -> {
Color(0xFF00B8D4)
}
37 -> {
Color.White
}
else -> {
Color.Black
}
0 -> defaultColor
30 -> Color.Black
31 -> Color.Red
32 -> Color(0xFF00C853) // Green
33 -> Color(0xFFFFD600) // Yellow
34 -> Color(0xFF2962FF) // Blue
35 -> Color(0xFFD500F9) // Magenta
36 -> Color(0xFF00B8D4) // Cyan
37 -> Color.White
else -> currentColor
}
lastIndex = match.range.last + 1
}
if (lastIndex < text.length) {
val remain = text.substring(lastIndex)
if (remain.isNotEmpty()) {
withStyle(SpanStyle(color = currentColor)) {
append(remain)
}
}
}
}
return builder
}
@Composable
fun LogPopup(
onDismiss: () -> Unit
@@ -512,6 +509,8 @@ fun LogPopup(
}
}
val defaultTextColor = LocalContentColor.current
Dialog(onDismissRequest = { onDismiss() }) {
Surface(
shape = RoundedCornerShape(12.dp),
@@ -531,8 +530,15 @@ fun LogPopup(
LazyColumn(state = listState, modifier = Modifier.weight(1f)) {
items(logs.size) { index ->
Text(
text = parseAnsi(logs[index]),
text = parseAnsi(logs[index], defaultTextColor),
fontSize = 12.sp,
// 2. DÙNG FONT MONOSPACE
fontFamily = FontFamily.Monospace,
// 3. (Tuỳ chọn) Giảm chiều cao dòng để logo liền mạch
lineHeight = 14.sp,
modifier = Modifier.padding(vertical = 2.dp)
)
}

View File

@@ -1,5 +1,5 @@
{
"latest_version": "3.6.4-01",
"changelog": "UPDATE: Update to 3.6.54",
"apk_url": "https://git.kain.io.vn/Firefly-Shelter/FireflyGo_Android/releases/download/3.6.4-01/firefly_go_android.apk"
"latest_version": "4.0.4-01",
"changelog": "UPDATE: 4.0.54",
"apk_url": "https://git.kain.io.vn/Firefly-Shelter/FireflyGo_Android/releases/download/4.0.4-01/firefly_go_android.apk"
}

View File

@@ -1,24 +1,24 @@
{
"leader": 0,
"leader": 2,
"lineups": {
"0": 1413,
"1": 1415,
"2": 1409,
"3": 1407
"0": 1217,
"1": 1307,
"2": 1005,
"3": 1410
},
"position": {
"x": 218004,
"z": 259263,
"y": 53915,
"rot_y": 79863
"x": -30,
"z": -22750,
"y": -15000,
"rot_y": 234288
},
"scene": {
"plane_id": 20423,
"floor_id": 20423001,
"entry_id": 2042301
"plane_id": 10000,
"floor_id": 10000003,
"entry_id": 100000352
},
"player_outfit": [
1001
1003
],
"char_path": {
"main": 8008,
@@ -28,22 +28,24 @@
"1005": 1,
"1006": 1,
"1205": 1,
"1212": 1
"1212": 1,
"1306": 1,
"1307": 1
},
"challenge": {
"challenge_id": 0,
"skip_half": 0,
"blessings": [],
"is_in_challenge": false,
"current_stage_id": 30118121,
"current_stage_id": 30121122,
"path_resonance_id": 0,
"maze_buff": 0,
"first_lineup": [],
"second_lineup": []
},
"challenge_peak": {
"current_mode": "Knight",
"group_id": 2,
"current_mode": "Boss",
"group_id": 5,
"is_in_challenge_peak": false,
"challenge_peak_data": {
"1": {
@@ -140,6 +142,123 @@
}
]
}
},
"3": {
"checkmate_data": {
"challenge_id": 304,
"blessing": 3033032,
"lineup": [
1222,
1225,
1310,
1321
],
"stage_id": 30503021,
"is_hard_mode": false
},
"knight_data": {
"current_challenge_id": 302,
"details_data": [
{
"lineup": [
1003
],
"stage_id": 30503011,
"challenge_id": 301
},
{
"lineup": [
1315
],
"stage_id": 30503012,
"challenge_id": 302
},
{
"lineup": [
8001
],
"stage_id": 30503013,
"challenge_id": 303
}
]
}
},
"4": {
"checkmate_data": {
"challenge_id": 404,
"blessing": 3033045,
"lineup": [
1310
],
"stage_id": 30504021,
"is_hard_mode": false
},
"knight_data": {
"current_challenge_id": 401,
"details_data": [
{
"lineup": [
1302
],
"stage_id": 30504011,
"challenge_id": 401
},
{
"lineup": [
1321
],
"stage_id": 30504012,
"challenge_id": 402
},
{
"lineup": [
1218
],
"stage_id": 30504013,
"challenge_id": 403
}
]
}
},
"5": {
"checkmate_data": {
"challenge_id": 504,
"blessing": 3033050,
"lineup": [
1415,
1413,
1407,
1409
],
"stage_id": 30505021,
"is_hard_mode": false
},
"knight_data": {
"current_challenge_id": 501,
"details_data": [
{
"lineup": [
1310
],
"stage_id": 30505011,
"challenge_id": 501
},
{
"lineup": [
1407
],
"stage_id": 30505012,
"challenge_id": 502
},
{
"lineup": [
1502
],
"stage_id": 30505013,
"challenge_id": 503
}
]
}
}
}
},
@@ -151,20 +270,21 @@
200000
],
"2": [
500000,
10000000,
500000
2000000000,
2000000000,
2000000000
]
},
"cycle_count": 1,
"mode": true
"stage_id": 30118121,
"mode": false
},
"profile_data": {
"cur_chat_bubble_id": 220008,
"cur_chat_bubble_id": 220009,
"cur_phone_theme_id": 221012,
"cur_phone_case_id": 254001,
"cur_pam_skin_id": 252000,
"cur_pet_id": 1003,
"cur_pet_id": 0,
"cur_avatar_player_icon": 202034,
"cur_player_personal_card": 253001,
"cur_signature": "Firefly GO By Kain",
@@ -180,5 +300,11 @@
"skin_data": {
"1001": 1100101,
"1310": 1131001
},
"extra_setting": {
"censorship": false,
"cm": false,
"first_person": false,
"hide_ui": false
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,44 +1,44 @@
{
"CNBETAAndroid3.6.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12066992_f083970b907e_999074cab6dce6",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12056690_16bfd67c199f_f3c0367d7b051e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12114942_e99cbde25134_e63a6b835f17f9",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12103115_ee78155e9867_3626f0948d93e2",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12118783_55113408814f_c874267d04c04a"
"CNBETAAndroid4.0.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_14239544_f4c7e35c12ab_be7a50ff5d1728",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_14239544_f4c7e35c12ab_be7a50ff5d1728",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_14270934_c5df39ade3cd_9db4958f23406e",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_14239726_aa2162bcb19e_b24f07d946065b",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"CNBETAWin3.6.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12066992_f083970b907e_999074cab6dce6",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12056690_16bfd67c199f_f3c0367d7b051e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12114942_e99cbde25134_e63a6b835f17f9",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12103115_ee78155e9867_3626f0948d93e2",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12118783_55113408814f_c874267d04c04a"
"CNBETAWin4.0.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_14239544_f4c7e35c12ab_be7a50ff5d1728",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_14239544_f4c7e35c12ab_be7a50ff5d1728",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_14270934_c5df39ade3cd_9db4958f23406e",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_14239726_aa2162bcb19e_b24f07d946065b",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"CNBETAiOS3.6.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12066992_f083970b907e_999074cab6dce6",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12056690_16bfd67c199f_f3c0367d7b051e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12114942_e99cbde25134_e63a6b835f17f9",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12103115_ee78155e9867_3626f0948d93e2",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12118783_55113408814f_c874267d04c04a"
"CNBETAiOS4.0.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_14239544_f4c7e35c12ab_be7a50ff5d1728",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_14239544_f4c7e35c12ab_be7a50ff5d1728",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_14270934_c5df39ade3cd_9db4958f23406e",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_14239726_aa2162bcb19e_b24f07d946065b",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"OSBETAAndroid3.6.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12066992_f083970b907e_999074cab6dce6",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12056690_16bfd67c199f_f3c0367d7b051e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12114942_e99cbde25134_e63a6b835f17f9",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12103115_ee78155e9867_3626f0948d93e2",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12118783_55113408814f_c874267d04c04a"
"OSBETAAndroid4.0.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_14239544_f4c7e35c12ab_be7a50ff5d1728",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_14239544_f4c7e35c12ab_be7a50ff5d1728",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_14270934_c5df39ade3cd_9db4958f23406e",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_14239726_aa2162bcb19e_b24f07d946065b",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"OSBETAWin3.6.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12066992_f083970b907e_999074cab6dce6",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12056690_16bfd67c199f_f3c0367d7b051e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12114942_e99cbde25134_e63a6b835f17f9",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12103115_ee78155e9867_3626f0948d93e2",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12118783_55113408814f_c874267d04c04a"
"OSBETAWin4.0.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_14239544_f4c7e35c12ab_be7a50ff5d1728",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_14239544_f4c7e35c12ab_be7a50ff5d1728",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_14270934_c5df39ade3cd_9db4958f23406e",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_14239726_aa2162bcb19e_b24f07d946065b",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"OSBETAiOS3.6.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12066992_f083970b907e_999074cab6dce6",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12056690_16bfd67c199f_f3c0367d7b051e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12114942_e99cbde25134_e63a6b835f17f9",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12103115_ee78155e9867_3626f0948d93e2",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12118783_55113408814f_c874267d04c04a"
"OSBETAiOS4.0.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_14239544_f4c7e35c12ab_be7a50ff5d1728",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_14239544_f4c7e35c12ab_be7a50ff5d1728",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_14270934_c5df39ade3cd_9db4958f23406e",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_14239726_aa2162bcb19e_b24f07d946065b",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
}
}

View File

@@ -23,3 +23,4 @@ kotlin.code.style=official
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
#org.gradle.configuration-cache=false
android.r8.optimizedResourceShrinking=true

View File

@@ -2,23 +2,24 @@
activityComposeVersion = "1.11.0"
agp = "8.13.0"
androidxJunit = "1.3.0"
animationCore = "1.9.2"
animationCore = "1.9.3"
autoupdater = "1.0.1"
espressoCoreVersion = "3.7.0"
foundation = "1.9.2"
foundation = "1.9.3"
kotlin = "2.2.20"
coreKtx = "1.17.0"
junit = "4.13.2"
lifecycleRuntimeKtxVersion = "2.9.4"
material = "1.9.2"
material = "1.9.3"
material3WindowSizeClass = "1.4.0"
materialIconsExtended = "1.7.8"
ui = "1.9.2"
uiGraphics = "1.9.2"
uiTestJunit4 = "1.9.2"
uiTestManifest = "1.9.2"
uiTooling = "1.9.2"
uiToolingPreview = "1.9.2"
slf4jAndroidVersion = "1.7.36"
ui = "1.9.3"
uiGraphics = "1.9.3"
uiTestJunit4 = "1.9.3"
uiTestManifest = "1.9.3"
uiTooling = "1.9.3"
uiToolingPreview = "1.9.3"
[libraries]
androidx-activity-compose-v1101 = { module = "androidx.activity:activity-compose", version.ref = "activityComposeVersion" }
@@ -35,6 +36,7 @@ androidx-material3-window-size-class1 = { module = "androidx.compose.material3:m
autoupdater = { module = "com.github.CSAbhiOnline:AutoUpdater", version.ref = "autoupdater" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
material3 = { module = "androidx.compose.material3:material3", version.ref = "material3WindowSizeClass" }
slf4j-android = { module = "org.slf4j:slf4j-android", version.ref = "slf4jAndroidVersion" }
ui = { module = "androidx.compose.ui:ui", version.ref = "ui" }
ui-graphics = { module = "androidx.compose.ui:ui-graphics", version.ref = "uiGraphics" }
ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "uiTestJunit4" }

View File

@@ -1,2 +1,3 @@
# Changelog
## - UPDATE: Update to 3.6.54
## - UPDATE: Support 4.0.5X

View File

@@ -1,5 +1,4 @@
{
"tag": "3.6.4-01",
"title": "PreBuild Version 3.6.54 - 01"
"tag": "4.0.4-01",
"title": "PreBuild Version 4.0.54 - 01"
}