From 70ca2496d5169fe05457a92ef11f1172b20e5af1 Mon Sep 17 00:00:00 2001
From: rushii <33725716+rushiiMachine@users.noreply.github.com>
Date: Mon, 30 Jan 2023 15:25:11 -0800
Subject: [PATCH] feat: option to replace libc++
---
.../domain/manager/PreferencesManager.kt | 3 +--
.../manager/ui/screen/SettingsScreen.kt | 15 +++++++++++----
.../manager/ui/viewmodel/InstallViewModel.kt | 17 ++++++++++-------
app/src/main/res/values/strings.xml | 4 +++-
4 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/app/src/main/kotlin/com/aliucord/manager/domain/manager/PreferencesManager.kt b/app/src/main/kotlin/com/aliucord/manager/domain/manager/PreferencesManager.kt
index da8345d..e9c0ed5 100644
--- a/app/src/main/kotlin/com/aliucord/manager/domain/manager/PreferencesManager.kt
+++ b/app/src/main/kotlin/com/aliucord/manager/domain/manager/PreferencesManager.kt
@@ -11,9 +11,8 @@ class PreferencesManager(preferences: SharedPreferences) : BasePreferenceManager
var replaceIcon by booleanPreference("replace_icon", true)
var devMode by booleanPreference("dev_mode", false)
var debuggable by booleanPreference("debuggable", false)
- var useDexFromStorage by booleanPreference("use_dex_from_storage", false)
- var dexLocation by stringPreference("dex_location", "$aliucordDir/Injector.dex")
var appName by stringPreference("app_name", "Aliucord")
var packageName by stringPreference("package_name", "com.aliucord")
var version by stringPreference("version", "146108")
+ var hermesReplaceLibCpp by booleanPreference("hermes_replace_libcpp", false)
}
diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screen/SettingsScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screen/SettingsScreen.kt
index cdcb7fe..4753e06 100644
--- a/app/src/main/kotlin/com/aliucord/manager/ui/screen/SettingsScreen.kt
+++ b/app/src/main/kotlin/com/aliucord/manager/ui/screen/SettingsScreen.kt
@@ -114,10 +114,17 @@ fun SettingsScreen(
label = stringResource(R.string.setting_debuggable),
secondaryLabel = stringResource(R.string.setting_debuggable_desc),
pref = preferences.debuggable,
- icon = { Icon(Icons.Default.BugReport, null) }
- ) {
- preferences.debuggable = it
- }
+ icon = { Icon(Icons.Default.BugReport, null) },
+ onPrefChange = { preferences.debuggable = it },
+ )
+
+ SettingsSwitch(
+ label = stringResource(R.string.setting_hermes_replace_libcpp),
+ secondaryLabel = stringResource(R.string.setting_hermes_replace_libcpp_desc),
+ icon = { Icon(Icons.Default.FileCopy, null) },
+ pref = preferences.hermesReplaceLibCpp,
+ onPrefChange = { preferences.hermesReplaceLibCpp = it },
+ )
}
}
diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/viewmodel/InstallViewModel.kt b/app/src/main/kotlin/com/aliucord/manager/ui/viewmodel/InstallViewModel.kt
index 5f70d47..9b4828b 100644
--- a/app/src/main/kotlin/com/aliucord/manager/ui/viewmodel/InstallViewModel.kt
+++ b/app/src/main/kotlin/com/aliucord/manager/ui/viewmodel/InstallViewModel.kt
@@ -263,13 +263,15 @@ class InstallViewModel(
}
// Download the hermes-cppruntime-release.aar file to replace in the apk
- val cppRuntime = cacheDir.resolve("hermes-cppruntime-release-${latestHermesRelease.tagName}.aar").also { file ->
- if (file.exists()) return@also
- cached = false
+ val cppRuntime = if (!preferences.hermesReplaceLibCpp) null else {
+ cacheDir.resolve("hermes-cppruntime-release-${latestHermesRelease.tagName}.aar").also { file ->
+ if (file.exists()) return@also
+ cached = false
- latestHermesRelease.assets
- .find { it.name == "hermes-cppruntime-release.aar" }!!.browserDownloadUrl
- .also { downloadManager.download(it, file) }
+ latestHermesRelease.assets
+ .find { it.name == "hermes-cppruntime-release.aar" }!!.browserDownloadUrl
+ .also { downloadManager.download(it, file) }
+ }
}
hermes to cppRuntime
@@ -386,6 +388,8 @@ class InstallViewModel(
ZipWriter(libsApkFile, true).use { libsApk ->
// Process the hermes and cpp runtime library
for (libFile in arrayOf(hermesLibrary, cppRuntimeLibrary)) {
+ libFile ?: continue
+
// Map .aar to the embedded .so inside
val binaryName = with(libFile.name) {
when {
@@ -494,7 +498,6 @@ class InstallViewModel(
}
}
-
// Download the injector dex
val injectorFile = step(InstallStep.DL_INJECTOR) {
cacheDir.resolve("injector-${dataJson.aliucordHash}.dex").also { file ->
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e3edbd0..0e91dcf 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -50,8 +50,10 @@
Manager appearance
App Name
Package Name
- Download Version
+ Download Version (RN only)
Dynamic color
+ Replace libc++ (RN only)
+ Downloads and uses libc++ from patched hermes
Invalid package name, reset to com.aliucord
System