Skip to content

Commit 62f0777

Browse files
committed
refactor: replaced logger with log_plus
refactor: removed setup service support for x86 32-bit feat: updated README with troubleshooting section feat: made main page reference README and troubleshooting fix: made logger not reading from logcat, thus eliminating bugs on certain devices refactor: moved 'Report a bug' page from navbar to Logs Viewer feat: added error logging for updateRecordsMetadata chore: bumped the version to 1.2.5
1 parent 37e0c27 commit 62f0777

File tree

15 files changed

+122
-265
lines changed

15 files changed

+122
-265
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@ Stalker allows users to inspect and optionally tweak various aspects of their Sh
4646
- **What does the setup service actually do? I'm concerned about running high-privileged compiled binaries.**
4747
- The setup service’s only purpose is to tamper with your user ID inside the game’s process. Once it does that, it automatically closes — or after two minutes of inactivity. The user ID is just a random string unique to each device. It doesn’t contain any personal or device-identifiable information. I won’t share the exact method used to get the ID, or the source code for the service, because this is the only known working method. If it becomes public, the developers could easily patch it.
4848

49+
## 🔧 Troubleshooting
50+
- Tapping 'Reinitialize' after the 'Additional setup' step does nothing.
51+
1. Make sure that you are following the given instructions.
52+
2. For some devices, changing the 'Logger buffer size' in Developer Options from 256K to 8M might help.
53+
3. For Huawei and Honor devices, you need to enable logcat in the device settings. Search online for: 'enable logcat honor/huawei'
54+
4. If this does not help, report a bug [here](https://github.com/onerdna/stalker/issues/new?template=additional-setup-bug-report.md)
55+
56+
4957
### ❤ Special thanks to:
5058
- [**Shizuku**](https://shizuku.rikka.app/)
5159
- **ShadowFight2dojo community**

android/app/src/main/kotlin/com/dojocommunity/stalker/LogcatReader.kt

Lines changed: 0 additions & 42 deletions
This file was deleted.

android/app/src/main/kotlin/com/dojocommunity/stalker/MainActivity.kt

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import java.io.InputStreamReader
1515

1616
class MainActivity : FlutterActivity() {
1717
private val shizukuChannel = "com.dojocommunity.stalker/shizuku"
18-
private var logcatReader: LogcatReader? = null
1918

2019
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
2120
super.configureFlutterEngine(flutterEngine)
@@ -47,21 +46,6 @@ class MainActivity : FlutterActivity() {
4746
}
4847
}
4948
}
50-
51-
EventChannel(flutterEngine.dartExecutor.binaryMessenger, "logcat_channel")
52-
.setStreamHandler(object : EventChannel.StreamHandler {
53-
override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {
54-
events?.let {
55-
logcatReader = LogcatReader(this@MainActivity, it)
56-
logcatReader?.start()
57-
}
58-
}
59-
60-
override fun onCancel(arguments: Any?) {
61-
logcatReader?.stop()
62-
}
63-
})
64-
6549
}
6650

6751
private fun runCommand(command: String): String {

assets/binaries/setup_service_x86

-587 KB
Binary file not shown.

assets/images/bug.png

-30.5 KB
Binary file not shown.

lib/app.dart

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,15 @@ import 'package:path_provider/path_provider.dart';
3131
import 'package:pub_semver/pub_semver.dart';
3232
import 'package:shared_preferences/shared_preferences.dart';
3333
import 'package:signals/signals_flutter.dart';
34+
import 'package:stalker/github.dart';
35+
import 'package:stalker/pages/debug.dart';
3436
import 'package:stalker/ui/app_bar.dart';
3537
import 'package:stalker/logic/enchantment.dart';
3638
import 'package:stalker/main.dart';
3739
import 'package:stalker/pages/edit_xml/edit_xml.dart';
3840
import 'package:stalker/pages/equipment.dart';
3941
import 'package:stalker/pages/general.dart';
4042
import 'package:stalker/pages/records/records.dart';
41-
import 'package:stalker/pages/report.dart';
4243
import 'package:stalker/logic/record.dart';
4344
import 'package:stalker/logic/records_manager.dart';
4445
import 'package:signals/signals.dart' as signals_core;
@@ -105,8 +106,7 @@ class _AppState extends State<App> {
105106
const RecordsPage(),
106107
const EditXmlPage(),
107108
const GeneralPage(),
108-
const EquipmentPage(),
109-
const ReportPage()
109+
const EquipmentPage()
110110
];
111111

112112
Future<bool> _tryToConnectToShizuku(BuildContext context) async {
@@ -275,8 +275,6 @@ class _AppState extends State<App> {
275275
return;
276276
}
277277

278-
String link = "https://github.com/onerdna/stalker";
279-
280278
await showDialog(
281279
context: context,
282280
builder: (context) => AlertDialog(
@@ -287,7 +285,8 @@ class _AppState extends State<App> {
287285
const Text(
288286
"This app is completely free and always will be. If you paid for it, you were scammed. Download only from the official source:"),
289287
TextButton(
290-
onPressed: () => launchUrlString(link), child: Text(link))
288+
onPressed: () => launchUrlString(GitHub.repoUrl),
289+
child: const Text(GitHub.repoUrl))
291290
],
292291
),
293292
actions: [
@@ -302,7 +301,7 @@ class _AppState extends State<App> {
302301

303302
Future<bool> _isUpdateAvailable() async {
304303
final url = Uri.parse(
305-
'https://api.github.com/repos/onerdna/stalker/releases/latest');
304+
'https://api.github.com/repos/${GitHub.repoUser}/${GitHub.repoName}/releases/latest');
306305
final client = HttpClient();
307306

308307
try {
@@ -327,15 +326,14 @@ class _AppState extends State<App> {
327326
}
328327

329328
Future<void> _showUpdateDialog() async {
330-
const link = "https://github.com/onerdna/stalker/releases/latest";
331329
showFatalErrorDialog(
332330
context,
333331
"New version available",
334332
"In order for the app to function correctlty, please update it to the latest version.",
335333
[
336334
TextButton(
337335
onPressed: () {
338-
launchUrlString(link);
336+
launchUrlString(GitHub.latestRelease);
339337
},
340338
child: const Text("Update"))
341339
]);
@@ -380,11 +378,7 @@ class _AppState extends State<App> {
380378
NavigationDestination(
381379
icon: Image.asset('assets/images/sword.png',
382380
width: 24, height: 24),
383-
label: "Equipment"),
384-
NavigationDestination(
385-
icon: Image.asset('assets/images/bug.png',
386-
width: 24, height: 24),
387-
label: "Bug Reports"),
381+
label: "Equipment")
388382
],
389383
selectedIndex: currentPageIndex.value,
390384
onDestinationSelected: (int index) {
@@ -408,6 +402,21 @@ class _AppState extends State<App> {
408402
],
409403
),
410404
const Text("This app requires Shizuku to run"),
405+
TextButton(
406+
child: const Text("Not working? Check README"),
407+
onPressed: () {
408+
launchUrlString(
409+
"${GitHub.repoUrl}/blob/master/README.md#-troubleshooting");
410+
},
411+
),
412+
TextButton(
413+
onPressed: () {
414+
launchUrlString(
415+
"${GitHub.repoUrl}/issues/new?title=${Uri.encodeComponent("Additional setup not working")}&body=${Uri.encodeComponent("--- APP LOGS, DO NOT DELETE! ---\n${logger.getStoredLogs().map((e) => formatLogEntry(e)).join("\n")}\n--- LOGS END ---\nAndroid version: [fill here]\nPhone model (or emulator): [fill here]\nAny additional information: [fill here]\nI acknowledge that I've followed the instruction steps and read the README's troubleshooting section.")}");
416+
},
417+
child: const Text(
418+
textAlign: TextAlign.center,
419+
"If it's still not working, tap here")),
411420
TextButton.icon(
412421
onPressed: () async {
413422
await _tryToInitializeApp(context);

lib/github.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class GitHub {
2+
static const String repoUser = "onerdna";
3+
static const String repoName = "stalker";
4+
static const String repoUrl = "https://github.com/$repoUser/$repoName";
5+
static const String latestRelease = "$repoUrl/releases/latest";
6+
static const String issueFeatureRequest =
7+
"$repoUrl/issues/new?template=feature_request.md";
8+
static const String issueAdditionalSetup =
9+
"$repoUrl/issues/new?template=additional-setup-bug-report.md";
10+
static const String issueGeneral =
11+
"$repoUrl/issues/new?template=general-bug-report.md";
12+
}

lib/logcat.dart

Lines changed: 0 additions & 36 deletions
This file was deleted.

lib/logic/records_manager.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import 'package:crypto/crypto.dart';
2323
import 'package:fluttertoast/fluttertoast.dart';
2424
import 'package:path_provider/path_provider.dart';
2525
import 'package:stalker/logic/record.dart';
26+
import 'package:stalker/main.dart';
2627
import 'package:stalker/shizuku_api.dart';
2728
import 'package:stalker/shizuku_file.dart';
2829
import 'package:toml/toml.dart';
@@ -42,7 +43,11 @@ class RecordsManager {
4243
e.metadata.isActive = false;
4344
}
4445
record?.metadata.isActive = true;
45-
_updateRecordsMetadata();
46+
try {
47+
_updateRecordsMetadata();
48+
} catch (e) {
49+
logger.e("updateRecordsMetadata: $e");
50+
}
4651
}
4752

4853
static Future<void> saveRecord(Record record) async {

lib/main.dart

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,19 @@
1919
import 'package:dynamic_color/dynamic_color.dart';
2020
import 'package:flutter/material.dart';
2121
import 'package:flutter/services.dart';
22-
import 'package:logger/logger.dart';
22+
import 'package:log_plus/log_plus.dart';
2323
import 'package:signals/signals_flutter.dart';
2424
import 'package:stalker/app.dart';
2525
import 'package:stalker/logic/item_database.dart';
26-
import 'package:stalker/logcat.dart';
2726
import 'package:stalker/themes.dart';
2827
import 'package:toml/toml.dart';
2928

30-
class AlwaysLogFilter extends LogFilter {
31-
@override
32-
bool shouldLog(LogEvent event) => true;
33-
}
34-
35-
final logger =
36-
Logger(printer: SimplePrinter(colors: false), filter: AlwaysLogFilter());
29+
final logger = Logs(
30+
storeLogLevel: LogLevel.verbose,
31+
printLogLevelWhenDebug: LogLevel.verbose,
32+
printLogLevelWhenRelease: LogLevel.verbose,
33+
storeLimit: 500,
34+
);
3735

3836
void main() async {
3937
WidgetsFlutterBinding.ensureInitialized();
@@ -52,8 +50,6 @@ class _RootAppState extends State<RootApp> {
5250
@override
5351
void initState() {
5452
super.initState();
55-
Logcat.init();
56-
logger.i("Initialized logcat stream");
5753
rootBundle.loadString("assets/item_database.toml").then((names) {
5854
ItemDatabase.dictionary = TomlDocument.parse(names).toMap();
5955
logger.i("Loaded item databse");
@@ -78,20 +74,17 @@ class _RootAppState extends State<RootApp> {
7874

7975
if (lightDynamic != null && darkDynamic != null && useSystemColors_) {
8076
lightColorScheme = ColorScheme.fromSeed(
81-
seedColor: lightDynamic.primary,
82-
brightness: Brightness.light
83-
);
77+
seedColor: lightDynamic.primary, brightness: Brightness.light);
8478
darkColorScheme = ColorScheme.fromSeed(
85-
seedColor: darkDynamic.primary,
86-
brightness: Brightness.dark
87-
);
79+
seedColor: darkDynamic.primary, brightness: Brightness.dark);
8880
} else {
8981
lightColorScheme = ColorScheme.fromSeed(seedColor: primaryColor_);
9082
darkColorScheme = ColorScheme.fromSeed(
9183
seedColor: primaryColor_, brightness: Brightness.dark);
9284
}
9385

94-
supportsDynamicColors.value = lightDynamic != null && darkDynamic != null;
86+
supportsDynamicColors.value =
87+
lightDynamic != null && darkDynamic != null;
9588

9689
final lightTheme = ThemeData(
9790
colorScheme: lightColorScheme,

0 commit comments

Comments
 (0)