Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ed411fc284 | |||
| b7b0457685 | |||
| bdd458a64f | |||
| 93d86df411 | |||
| a0cef76ae6 | |||
| b40252d958 | |||
| 01b311fb24 | |||
| d21a84ee47 | |||
| ad357dc8dd | |||
| 6b5634de48 |
1
.idea/.name
generated
Normal file
1
.idea/.name
generated
Normal file
@@ -0,0 +1 @@
|
|||||||
|
FireflyPsAndorid
|
||||||
1
.idea/misc.xml
generated
1
.idea/misc.xml
generated
@@ -1,4 +1,3 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
<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_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
|
||||||
|
|||||||
BIN
KeyStore.jks
BIN
KeyStore.jks
Binary file not shown.
@@ -3,13 +3,9 @@
|
|||||||
xmlns:tools="http://schemas.android.com/tools">
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
|
||||||
|
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
||||||
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
|
|
||||||
tools:ignore="ScopedStorage" />
|
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
@@ -25,18 +21,17 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:label="@string/app_name"
|
|
||||||
android:theme="@style/Theme.FireflyPsAndorid">
|
android:theme="@style/Theme.FireflyPsAndorid">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<service
|
<service
|
||||||
android:name=".GolangServerService"
|
android:name=".GolangServerService"
|
||||||
android:foregroundServiceType="dataSync" />
|
android:foregroundServiceType="dataSync"
|
||||||
|
android:exported="false" />
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
@@ -8,73 +8,119 @@ import android.content.Context
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
|
import android.os.PowerManager
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import libandroid.Libandroid
|
import libandroid.Libandroid
|
||||||
|
|
||||||
class GolangServerService : Service() {
|
class GolangServerService : Service() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val CHANNEL_ID = "GolangServerChannel"
|
const val CHANNEL_ID = "GolangServerChannel"
|
||||||
const val NOTIFICATION_ID = 1
|
const val NOTIFICATION_ID = 1
|
||||||
private const val TAG = "GolangServerService"
|
private const val TAG = "GolangServerService"
|
||||||
|
var isRunning by mutableStateOf(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var wakeLock: PowerManager.WakeLock? = null
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
createNotificationChannel()
|
createNotificationChannel()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
||||||
|
if (isRunning) {
|
||||||
|
Log.d(TAG, "❗ Server is already running")
|
||||||
|
return START_STICKY
|
||||||
|
}
|
||||||
|
isRunning = true
|
||||||
|
Log.d(TAG, "onStartCommand called")
|
||||||
|
|
||||||
val notificationIntent = Intent(this, MainActivity::class.java)
|
val notificationIntent = Intent(this, MainActivity::class.java)
|
||||||
val pendingIntent = PendingIntent.getActivity(
|
val pendingIntent = PendingIntent.getActivity(
|
||||||
this, 0, notificationIntent,
|
this,
|
||||||
PendingIntent.FLAG_IMMUTABLE
|
0,
|
||||||
|
notificationIntent,
|
||||||
|
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
|
||||||
)
|
)
|
||||||
|
|
||||||
val notification = NotificationCompat.Builder(this, CHANNEL_ID)
|
val notification = NotificationCompat.Builder(this, CHANNEL_ID)
|
||||||
.setContentTitle("Golang Server")
|
.setContentTitle("FireflyGO Server")
|
||||||
.setContentText("Server đang chạy")
|
.setContentText("FireflyGO is running...")
|
||||||
.setSmallIcon(R.drawable.ic_launcher_foreground)
|
.setSmallIcon(R.drawable.ic_launcher_foreground)
|
||||||
.setContentIntent(pendingIntent)
|
.setContentIntent(pendingIntent)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
startForeground(NOTIFICATION_ID, notification)
|
startForeground(NOTIFICATION_ID, notification)
|
||||||
|
|
||||||
// Chạy server trong thread riêng để tránh ANR
|
try {
|
||||||
|
val powerManager = getSystemService(POWER_SERVICE) as PowerManager
|
||||||
|
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "GolangServer::WakeLock")
|
||||||
|
wakeLock?.acquire()
|
||||||
|
Log.d(TAG, "✅ WakeLock acquired")
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "❌ WakeLock failed", e)
|
||||||
|
}
|
||||||
|
|
||||||
Thread {
|
Thread {
|
||||||
try {
|
try {
|
||||||
val appDataPath = intent?.getStringExtra("appDataPath")
|
val appDataPath = intent?.getStringExtra("appDataPath")
|
||||||
|
|
||||||
if (appDataPath != null) {
|
if (appDataPath != null) {
|
||||||
Libandroid.setPathDataLocal(appDataPath)
|
Libandroid.setPathDataLocal(appDataPath)
|
||||||
Log.d(TAG, "✅ Set path data: $appDataPath")
|
Log.d(TAG, "✅ Set path data: $appDataPath")
|
||||||
} else {
|
} else {
|
||||||
|
isRunning = false
|
||||||
Log.e(TAG, "❌ appDataPath not received in intent")
|
Log.e(TAG, "❌ appDataPath not received in intent")
|
||||||
|
stopSelf()
|
||||||
|
return@Thread
|
||||||
}
|
}
|
||||||
|
|
||||||
Libandroid.setServerRunning(true)
|
Libandroid.setServerRunning(true)
|
||||||
|
isRunning = true
|
||||||
Log.d(TAG, "✅ Server started")
|
Log.d(TAG, "✅ Server started")
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.e(TAG, "❌ Error when start server:", e)
|
isRunning = false
|
||||||
|
Log.e(TAG, "❌ Error starting server", e)
|
||||||
|
stopSelf()
|
||||||
}
|
}
|
||||||
}.start()
|
}.start()
|
||||||
|
|
||||||
|
|
||||||
return START_STICKY
|
return START_STICKY
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
|
Log.d(TAG, "onDestroy called")
|
||||||
|
|
||||||
|
// 1. Tắt server
|
||||||
try {
|
try {
|
||||||
val result = Libandroid.setServerRunning(false)
|
val result = Libandroid.setServerRunning(false)
|
||||||
|
isRunning = false
|
||||||
Log.d(TAG, "Server shutdown result: $result")
|
Log.d(TAG, "Server shutdown result: $result")
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.e(TAG, "Error shutting down server", e)
|
Log.e(TAG, "Error shutting down server", e)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2. Giải phóng WakeLock nếu còn giữ
|
||||||
|
try {
|
||||||
|
wakeLock?.let {
|
||||||
|
if (it.isHeld) {
|
||||||
|
it.release()
|
||||||
|
Log.d(TAG, "✅ WakeLock released")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "❌ Failed to release WakeLock", e)
|
||||||
|
}
|
||||||
|
isRunning = false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBind(intent: Intent?): IBinder? {
|
override fun onBind(intent: Intent?): IBinder? = null
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun createNotificationChannel() {
|
private fun createNotificationChannel() {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
@@ -83,11 +129,12 @@ class GolangServerService : Service() {
|
|||||||
"Golang Server Channel",
|
"Golang Server Channel",
|
||||||
NotificationManager.IMPORTANCE_LOW
|
NotificationManager.IMPORTANCE_LOW
|
||||||
).apply {
|
).apply {
|
||||||
description = "Notify Golang backend runing"
|
description = "Channel for running Golang backend in foreground"
|
||||||
}
|
}
|
||||||
|
|
||||||
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||||
notificationManager.createNotificationChannel(channel)
|
manager.createNotificationChannel(channel)
|
||||||
|
Log.d(TAG, "✅ Notification channel created")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.example.fireflypsandorid
|
package com.example.fireflypsandorid
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
@@ -8,13 +9,11 @@ import androidx.activity.ComponentActivity
|
|||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.background
|
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material3.*
|
import androidx.compose.material3.*
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.ui.*
|
import androidx.compose.ui.*
|
||||||
import androidx.compose.ui.graphics.Brush
|
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.layout.ContentScale
|
import androidx.compose.ui.layout.ContentScale
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
@@ -26,28 +25,18 @@ import com.example.fireflypsandorid.ui.theme.FireflyPsAndoridTheme
|
|||||||
import java.io.*
|
import java.io.*
|
||||||
|
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
private val TAG = "AppInit"
|
private val tag = "AppInit"
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
val appDataPath = filesDir.absolutePath
|
val appDataPath = filesDir.absolutePath
|
||||||
val resourceDir = File("$appDataPath/resources")
|
|
||||||
val dataDir = File("$appDataPath/data")
|
val dataDir = File("$appDataPath/data")
|
||||||
val rootDir = File(appDataPath)
|
|
||||||
resourceDir.mkdirs()
|
|
||||||
dataDir.mkdirs()
|
dataDir.mkdirs()
|
||||||
|
|
||||||
checkAndCreateFile(rootDir, ".env", R.raw.env)
|
|
||||||
|
|
||||||
checkAndCreateFile(resourceDir, "res.json", R.raw.res_json)
|
|
||||||
checkAndCreateFile(resourceDir, "avatar.json", R.raw.avatar_json)
|
|
||||||
checkAndCreateFile(resourceDir, "game_config.json", R.raw.game_config_json)
|
|
||||||
|
|
||||||
checkAndCreateFile(dataDir, "data-in-game.json", R.raw.data_in_game_json)
|
checkAndCreateFile(dataDir, "data-in-game.json", R.raw.data_in_game_json)
|
||||||
checkAndCreateFile(dataDir, "freesr-data.json", R.raw.freesr_data_json)
|
checkAndCreateFile(dataDir, "freesr-data.json", R.raw.freesr_data_json)
|
||||||
checkAndCreateFile(dataDir, "version.json", R.raw.version_json)
|
checkAndCreateFile(dataDir, "version.json", R.raw.version_json)
|
||||||
checkAndCreateFile(dataDir, "challenge.json", R.raw.challenge_json)
|
|
||||||
|
|
||||||
enableEdgeToEdge()
|
enableEdgeToEdge()
|
||||||
setContent {
|
setContent {
|
||||||
@@ -68,23 +57,23 @@ class MainActivity : ComponentActivity() {
|
|||||||
input.copyTo(output)
|
input.copyTo(output)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Log.i(TAG, "✅ Copied $fileName to ${outFile.absolutePath}")
|
Log.i(tag, "✅ Copied $fileName to ${outFile.absolutePath}")
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.e(TAG, "❌ Failed to copy $fileName: ${e.message}")
|
Log.e(tag, "❌ Failed to copy $fileName: ${e.message}")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Log.i(TAG, "ℹ️ $fileName already exists at ${outFile.absolutePath}")
|
Log.i(tag, "ℹ️ $fileName already exists at ${outFile.absolutePath}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressLint("ImplicitSamInstance")
|
||||||
@Composable
|
@Composable
|
||||||
fun ServerControlScreen(appDataPath: String, modifier: Modifier = Modifier) {
|
fun ServerControlScreen(appDataPath: String, modifier: Modifier = Modifier) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
var isServerRunning by remember { mutableStateOf(false) }
|
val isRunning = GolangServerService.isRunning
|
||||||
|
val serverImage = if (isRunning)
|
||||||
val serverImage = if (isServerRunning)
|
|
||||||
painterResource(id = R.drawable.server_running)
|
painterResource(id = R.drawable.server_running)
|
||||||
else
|
else
|
||||||
painterResource(id = R.drawable.server_stopped)
|
painterResource(id = R.drawable.server_stopped)
|
||||||
@@ -125,8 +114,7 @@ fun ServerControlScreen(appDataPath: String, modifier: Modifier = Modifier) {
|
|||||||
Button(
|
Button(
|
||||||
onClick = {
|
onClick = {
|
||||||
try {
|
try {
|
||||||
isServerRunning = !isServerRunning
|
if (!isRunning) {
|
||||||
if (isServerRunning) {
|
|
||||||
val intent = Intent(context, GolangServerService::class.java)
|
val intent = Intent(context, GolangServerService::class.java)
|
||||||
intent.putExtra("appDataPath", appDataPath)
|
intent.putExtra("appDataPath", appDataPath)
|
||||||
context.startService(intent)
|
context.startService(intent)
|
||||||
@@ -138,7 +126,7 @@ fun ServerControlScreen(appDataPath: String, modifier: Modifier = Modifier) {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
colors = ButtonDefaults.buttonColors(
|
colors = ButtonDefaults.buttonColors(
|
||||||
containerColor = if (isServerRunning) Color(0xFFB71C1C) else Color(0xFFFF5722),
|
containerColor = if (isRunning) Color(0xFFB71C1C) else Color(0xFF2196F3),
|
||||||
contentColor = Color.White
|
contentColor = Color.White
|
||||||
),
|
),
|
||||||
shape = RoundedCornerShape(12.dp),
|
shape = RoundedCornerShape(12.dp),
|
||||||
@@ -147,7 +135,7 @@ fun ServerControlScreen(appDataPath: String, modifier: Modifier = Modifier) {
|
|||||||
.height(50.dp)
|
.height(50.dp)
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = if (isServerRunning) "Stop Server" else "Start Server",
|
text = if (isRunning) "Stop Server" else "Start Server",
|
||||||
fontSize = 20.sp
|
fontSize = 20.sp
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -156,9 +144,9 @@ fun ServerControlScreen(appDataPath: String, modifier: Modifier = Modifier) {
|
|||||||
|
|
||||||
// Server status text
|
// Server status text
|
||||||
Text(
|
Text(
|
||||||
text = if (isServerRunning) "Server is running" else "Server is stopped",
|
text = if (isRunning) "Server is running" else "Server is stopped",
|
||||||
fontSize = 24.sp,
|
fontSize = 24.sp,
|
||||||
color = if (isServerRunning) Color(0xFF4CAF50) else Color.Gray
|
color = if (isRunning) Color(0xFF4CAF50) else Color.Gray
|
||||||
)
|
)
|
||||||
|
|
||||||
Spacer(modifier = Modifier.height(24.dp))
|
Spacer(modifier = Modifier.height(24.dp))
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,20 +1,21 @@
|
|||||||
{
|
{
|
||||||
|
"leader": 1,
|
||||||
"lineups": {
|
"lineups": {
|
||||||
"0": 1408,
|
"0": 1310,
|
||||||
"1": 1101,
|
"1": 1410,
|
||||||
"2": 1313,
|
"2": 1409,
|
||||||
"3": 1309
|
"3": 1407
|
||||||
},
|
},
|
||||||
"position": {
|
"position": {
|
||||||
"x": -37317,
|
"x": -4030,
|
||||||
"z": 11924,
|
"z": -13006,
|
||||||
"y": -12212,
|
"y": 0,
|
||||||
"rot_y": 81000
|
"rot_y": 270000
|
||||||
},
|
},
|
||||||
"scene": {
|
"scene": {
|
||||||
"plane_id": 10441,
|
"plane_id": 10000,
|
||||||
"floor_id": 10441001,
|
"floor_id": 10000000,
|
||||||
"entry_id": 1044101
|
"entry_id": 100000104
|
||||||
},
|
},
|
||||||
"char_path": {
|
"char_path": {
|
||||||
"main": 8008,
|
"main": 8008,
|
||||||
@@ -51,6 +52,21 @@
|
|||||||
"cur_phone_theme_id": 221011,
|
"cur_phone_theme_id": 221011,
|
||||||
"cur_phone_case_id": 254001,
|
"cur_phone_case_id": 254001,
|
||||||
"cur_pam_skin_id": 252000,
|
"cur_pam_skin_id": 252000,
|
||||||
"cur_pet_id": 1002
|
"cur_pet_id": 1002,
|
||||||
|
"cur_avatar_player_icon": 202034,
|
||||||
|
"cur_player_personal_card": 253001,
|
||||||
|
"cur_signature": "Firefly GO By Kain",
|
||||||
|
"cur_display_avatar": [
|
||||||
|
1310,
|
||||||
|
1309,
|
||||||
|
1407,
|
||||||
|
1412,
|
||||||
|
1001
|
||||||
|
],
|
||||||
|
"cur_is_display_avatar": true
|
||||||
|
},
|
||||||
|
"skin_data": {
|
||||||
|
"1001": 1100101,
|
||||||
|
"1310": 1131001
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
STARRAIL_HTTP_PORT=21000
|
|
||||||
STARRAIL_GAME_PORT=23301
|
|
||||||
STARRAIL_CONV_KCP=344
|
|
||||||
STARRAIL_TOKEN_KCP=443
|
|
||||||
STARRAIL_GAME_IP=127.0.0.1
|
|
||||||
ENV_SERVER=22
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1,74 +1,38 @@
|
|||||||
{
|
{
|
||||||
"CNBETAAndroid3.3.51": {
|
"CNBETAAndroid3.4.55": {
|
||||||
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_10451237_a3aa836fce75_f560b891c0d21e",
|
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11217430_23c5cfd2cafc_071126dd600bae",
|
||||||
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_10459782_ced8509d61c9_cdbde1049f2207",
|
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11218061_68ee992558e3_fe33df3598d887",
|
||||||
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_10434495_6bff50432edd_1641e3e19f1244",
|
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11218130_15360461a27a_91a0fd1d2b4db3",
|
||||||
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_10429797_be4a832b1c47_f58faff155c2c4"
|
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
|
||||||
},
|
},
|
||||||
"CNBETAAndroid3.3.52": {
|
"CNBETAWin3.4.55": {
|
||||||
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_10478982_243ce40577bf_000895ae562404",
|
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11217430_23c5cfd2cafc_071126dd600bae",
|
||||||
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_10494861_2ed49bac2846_b7f8d02fced269",
|
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11218061_68ee992558e3_fe33df3598d887",
|
||||||
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_10479565_234d9d8dfe49_b0890465b5ae4f",
|
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11218130_15360461a27a_91a0fd1d2b4db3",
|
||||||
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_10489293_ba258955cec6_d8347bc2994eab"
|
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
|
||||||
},
|
},
|
||||||
"CNBETAWin3.3.51": {
|
"CNBETAiOS3.4.55": {
|
||||||
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_10451237_a3aa836fce75_f560b891c0d21e",
|
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11217430_23c5cfd2cafc_071126dd600bae",
|
||||||
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_10459782_ced8509d61c9_cdbde1049f2207",
|
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11218061_68ee992558e3_fe33df3598d887",
|
||||||
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_10434495_6bff50432edd_1641e3e19f1244",
|
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11218130_15360461a27a_91a0fd1d2b4db3",
|
||||||
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_10429797_be4a832b1c47_f58faff155c2c4"
|
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
|
||||||
},
|
},
|
||||||
"CNBETAWin3.3.52": {
|
"OSBETAAndroid3.4.55": {
|
||||||
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_10478982_243ce40577bf_000895ae562404",
|
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11217430_23c5cfd2cafc_071126dd600bae",
|
||||||
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_10494861_2ed49bac2846_b7f8d02fced269",
|
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11218061_68ee992558e3_fe33df3598d887",
|
||||||
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_10479565_234d9d8dfe49_b0890465b5ae4f",
|
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11218130_15360461a27a_91a0fd1d2b4db3",
|
||||||
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_10489293_ba258955cec6_d8347bc2994eab"
|
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
|
||||||
},
|
},
|
||||||
"CNBETAiOS3.3.51": {
|
"OSBETAWin3.4.55": {
|
||||||
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_10451237_a3aa836fce75_f560b891c0d21e",
|
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11217430_23c5cfd2cafc_071126dd600bae",
|
||||||
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_10459782_ced8509d61c9_cdbde1049f2207",
|
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11218061_68ee992558e3_fe33df3598d887",
|
||||||
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_10434495_6bff50432edd_1641e3e19f1244",
|
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11218130_15360461a27a_91a0fd1d2b4db3",
|
||||||
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_10429797_be4a832b1c47_f58faff155c2c4"
|
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
|
||||||
},
|
},
|
||||||
"CNBETAiOS3.3.52": {
|
"OSBETAiOS3.4.55": {
|
||||||
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_10478982_243ce40577bf_000895ae562404",
|
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11217430_23c5cfd2cafc_071126dd600bae",
|
||||||
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_10494861_2ed49bac2846_b7f8d02fced269",
|
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11218061_68ee992558e3_fe33df3598d887",
|
||||||
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_10479565_234d9d8dfe49_b0890465b5ae4f",
|
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11218130_15360461a27a_91a0fd1d2b4db3",
|
||||||
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_10489293_ba258955cec6_d8347bc2994eab"
|
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
|
||||||
},
|
|
||||||
"OSBETAAndroid3.3.51": {
|
|
||||||
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_10451237_a3aa836fce75_f560b891c0d21e",
|
|
||||||
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_10459782_ced8509d61c9_cdbde1049f2207",
|
|
||||||
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_10434495_6bff50432edd_1641e3e19f1244",
|
|
||||||
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_10429797_be4a832b1c47_f58faff155c2c4"
|
|
||||||
},
|
|
||||||
"OSBETAAndroid3.3.52": {
|
|
||||||
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_10478982_243ce40577bf_000895ae562404",
|
|
||||||
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_10494861_2ed49bac2846_b7f8d02fced269",
|
|
||||||
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_10479565_234d9d8dfe49_b0890465b5ae4f",
|
|
||||||
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_10489293_ba258955cec6_d8347bc2994eab"
|
|
||||||
},
|
|
||||||
"OSBETAWin3.3.51": {
|
|
||||||
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_10451237_a3aa836fce75_f560b891c0d21e",
|
|
||||||
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_10459782_ced8509d61c9_cdbde1049f2207",
|
|
||||||
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_10434495_6bff50432edd_1641e3e19f1244",
|
|
||||||
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_10429797_be4a832b1c47_f58faff155c2c4"
|
|
||||||
},
|
|
||||||
"OSBETAWin3.3.52": {
|
|
||||||
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_10478982_243ce40577bf_000895ae562404",
|
|
||||||
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_10494861_2ed49bac2846_b7f8d02fced269",
|
|
||||||
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_10479565_234d9d8dfe49_b0890465b5ae4f",
|
|
||||||
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_10489293_ba258955cec6_d8347bc2994eab"
|
|
||||||
},
|
|
||||||
"OSBETAiOS3.3.51": {
|
|
||||||
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_10451237_a3aa836fce75_f560b891c0d21e",
|
|
||||||
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_10459782_ced8509d61c9_cdbde1049f2207",
|
|
||||||
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_10434495_6bff50432edd_1641e3e19f1244",
|
|
||||||
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_10429797_be4a832b1c47_f58faff155c2c4"
|
|
||||||
},
|
|
||||||
"OSBETAiOS3.3.52": {
|
|
||||||
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_10478982_243ce40577bf_000895ae562404",
|
|
||||||
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_10494861_2ed49bac2846_b7f8d02fced269",
|
|
||||||
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_10479565_234d9d8dfe49_b0890465b5ae4f",
|
|
||||||
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_10489293_ba258955cec6_d8347bc2994eab"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">FireflyPsAndroid-3.2.5X</string>
|
<string name="app_name">FireflyGo-3.5.5X</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:c1ffa7a8a9ba97737f3896e0b770c808dabf7aa43fd49499c482f118d151b85d
|
oid sha256:26eaf2a6981aed15c5c7f6edc465505406f05567739054e71f2d3af60f111ef2
|
||||||
size 64721048
|
size 73415308
|
||||||
|
|||||||
Reference in New Issue
Block a user