diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml
index 81296a62..980b480b 100644
--- a/.github/workflows/crowdin.yml
+++ b/.github/workflows/crowdin.yml
@@ -6,6 +6,7 @@ on:
branches: [ master ]
paths:
- app/src/main/res/values/strings.xml
+ - daemon/src/main/res/values/strings.xml
jobs:
synchronize-with-crowdin:
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 21adcf1e..27fad0f2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -86,14 +86,6 @@
Verbose log enabled
Verbose log disabled
-
- Xposed module is not activated yet
- %s has been installed, but is not activated yet
- Xposed module updated
- %s has been updated, please force stop and restart apps in its scope
- Xposed module updated, system reboot required
- %s has been updated, since the scope contains System Framework, required reboot to apply changes
-
(no description provided)
This module requires a newer Xposed version (%d) and thus cannot be activated
@@ -138,6 +130,7 @@
Recommended
You did not select any app. Select recommended apps?
Select recommended apps?
+ Xposed module is not activated yet
Recommended
Update available: %1$s
Module %s has been disabled since no app selected.
diff --git a/core/build.gradle.kts b/core/build.gradle.kts
index c9a32e45..8829adb9 100644
--- a/core/build.gradle.kts
+++ b/core/build.gradle.kts
@@ -303,12 +303,12 @@ val killLspd = task("killLspd") {
isIgnoreExitValue = true
}
val pushDaemon = task("pushDaemon") {
- dependsOn(":daemon:assembleRiruDebug")
+ dependsOn(":daemon:assembleDebug")
workingDir("${project(":daemon").buildDir}/outputs/apk/debug")
- commandLine(adb, "push", "daemon-Zygisk-debug.apk", "/data/local/tmp/daemon.apk")
+ commandLine(adb, "push", "daemon-debug.apk", "/data/local/tmp/daemon.apk")
}
val pushDaemonNative = task("pushDaemonNative") {
- dependsOn("mergeRiruDebugNativeLibs")
+ dependsOn(":daemon:assembleDebug")
doFirst {
val abi: String = ByteArrayOutputStream().use { outputStream ->
exec {
@@ -323,7 +323,7 @@ val pushDaemonNative = task("pushDaemonNative") {
}
val reRunDaemon = task("reRunDaemon") {
dependsOn(pushDaemon, pushDaemonNative, killLspd)
- commandLine(adb, "shell", "su", "-c", "sh /data/adb/modules/*_lsposed/service.sh&")
+ commandLine(adb, "shell", "su", "-c", "sh `su -c magisk --path`/.magisk/modules/*_lsposed/service.sh&")
isIgnoreExitValue = true
}
val tmpApk = "/data/local/tmp/lsp.apk"
diff --git a/crowdin.yml b/crowdin.yml
index e5884ccd..e06b17fd 100644
--- a/crowdin.yml
+++ b/crowdin.yml
@@ -1,11 +1,11 @@
#
# Your Crowdin credentials
#
-"project_id_env" : "CROWDIN_PROJECT_ID"
-"api_token_env" : "CROWDIN_API_TOKEN"
-"base_path" : "."
-"base_url" : "https://lsposed.crowdin.com/api/v2"
-"pull_request_title" : "[translation] Update translation from Crowdin"
+"project_id_env": "CROWDIN_PROJECT_ID"
+"api_token_env": "CROWDIN_API_TOKEN"
+"base_path": "."
+"base_url": "https://lsposed.crowdin.com/api/v2"
+"pull_request_title": "[translation] Update translation from Crowdin"
#
# Choose file structure in Crowdin
# e.g. true or false
@@ -16,11 +16,18 @@
# Files configuration
#
files: [
- {
- "source" : "/app/src/main/res/values/strings.xml",
- "translation" : "/app/src/main/res/values-%two_letters_code%/%original_file_name%",
- "type": "android",
- "dest": "/app/strings.xml",
- "skip_untranslated_strings": true
- }
+ {
+ "source": "/app/src/main/res/values/strings.xml",
+ "translation": "/app/src/main/res/values-%two_letters_code%/%original_file_name%",
+ "type": "android",
+ "dest": "/app/strings.xml",
+ "skip_untranslated_strings": true
+ },
+ {
+ "source": "/daemon/src/main/res/values/strings.xml",
+ "translation": "/daemon/src/main/res/values-%two_letters_code%/%original_file_name%",
+ "type": "android",
+ "dest": "/daemon/strings.xml",
+ "skip_untranslated_strings": true
+ }
]
diff --git a/daemon/build.gradle.kts b/daemon/build.gradle.kts
index 6a4bb050..7117fe63 100644
--- a/daemon/build.gradle.kts
+++ b/daemon/build.gradle.kts
@@ -20,10 +20,7 @@
import com.android.build.gradle.BaseExtension
import com.android.ide.common.signing.KeystoreHelper
import java.io.PrintStream
-import java.io.FileOutputStream
-import java.util.Locale
-import java.util.jar.JarFile
-import java.util.zip.ZipOutputStream
+import java.util.*
plugins {
id("com.android.application")
@@ -123,34 +120,6 @@ fun afterEval() = android.applicationVariants.forEach { variant ->
tasks["merge${variantCapped}JniLibFolders"].enabled = false
tasks["merge${variantCapped}NativeLibs"].enabled = false
- task("generateApp${variantLowered}RFile") {
- dependsOn(":app:process${variantCapped}Resources")
- doLast {
- val rFile = JarFile(
- File(
- project(":app").buildDir,
- "intermediates/compile_and_runtime_not_namespaced_r_class_jar/${variantLowered}/R.jar"
- )
- )
- ZipOutputStream(
- FileOutputStream(
- File(
- project.buildDir,
- "tmp/${variantLowered}R.jar"
- )
- )
- ).use {
- for (entry in rFile.entries()) {
- if (entry.name.startsWith("org/lsposed/manager")) {
- it.putNextEntry(entry)
- rFile.getInputStream(entry).transferTo(it)
- it.closeEntry()
- }
- }
- }
- }
- }
-
val app = rootProject.project(":app").extensions.getByName("android")
val outSrcDir = file("$buildDir/generated/source/signInfo/${variantLowered}")
val outSrc = file("$outSrcDir/org/lsposed/lspd/util/SignInfo.java")
@@ -195,9 +164,4 @@ dependencies {
implementation(project(":hiddenapi-bridge"))
implementation(project(":daemon-service"))
implementation(project(":manager-service"))
- android.applicationVariants.all {
- "${name}Implementation"(files(File(project.buildDir, "tmp/${name}R.jar")) {
- builtBy("generateApp${name}RFile")
- })
- }
}
diff --git a/daemon/src/main/AndroidManifest.xml b/daemon/src/main/AndroidManifest.xml
index 124ccb9d..4f9a1da9 100644
--- a/daemon/src/main/AndroidManifest.xml
+++ b/daemon/src/main/AndroidManifest.xml
@@ -1,10 +1,2 @@
-
-
-
-
-
\ No newline at end of file
+
diff --git a/daemon/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java b/daemon/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java
index 0f18b3df..df161339 100644
--- a/daemon/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java
+++ b/daemon/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java
@@ -51,6 +51,7 @@ import hidden.HiddenApiBridge;
public class ConfigFileManager {
static final Path basePath = Paths.get("/data/adb/lspd");
+ static final Path daemonApkPath = Paths.get(System.getProperty("java.class.path", null));
static final Path managerApkPath = basePath.resolve("manager.apk");
private static final Path lockPath = basePath.resolve("lock");
private static final Path configDirPath = basePath.resolve("config");
@@ -96,7 +97,7 @@ public class ConfigFileManager {
Method addAssetPath = AssetManager.class.getDeclaredMethod("addAssetPath", String.class);
addAssetPath.setAccessible(true);
//noinspection ConstantConditions
- if ((int) addAssetPath.invoke(am, managerApkPath.toString()) > 0)
+ if ((int) addAssetPath.invoke(am, daemonApkPath.toString()) > 0)
//noinspection deprecation
res = new Resources(am, null, null);
} catch (Throwable e) {
diff --git a/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java b/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java
index 3a25bade..2963eaa4 100644
--- a/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java
+++ b/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java
@@ -61,6 +61,7 @@ import android.view.IWindowManager;
import androidx.annotation.NonNull;
import org.lsposed.daemon.BuildConfig;
+import org.lsposed.daemon.R;
import org.lsposed.lspd.ILSPManagerService;
import org.lsposed.lspd.models.Application;
import org.lsposed.lspd.models.UserInfo;
@@ -220,13 +221,13 @@ public class LSPManagerService extends ILSPManagerService.Stub {
try {
var context = new FakeContext();
String title = context.getString(enabled ? systemModule ?
- org.lsposed.manager.R.string.xposed_module_updated_notification_title_system :
- org.lsposed.manager.R.string.xposed_module_updated_notification_title :
- org.lsposed.manager.R.string.module_is_not_activated_yet);
+ R.string.xposed_module_updated_notification_title_system :
+ R.string.xposed_module_updated_notification_title :
+ R.string.module_is_not_activated_yet);
String content = context.getString(enabled ? systemModule ?
- org.lsposed.manager.R.string.xposed_module_updated_notification_content_system :
- org.lsposed.manager.R.string.xposed_module_updated_notification_content :
- org.lsposed.manager.R.string.module_is_not_activated_yet_detailed, modulePackageName);
+ R.string.xposed_module_updated_notification_content_system :
+ R.string.xposed_module_updated_notification_content :
+ R.string.module_is_not_activated_yet_detailed, modulePackageName);
var style = new Notification.BigTextStyle();
style.bigText(content);
@@ -235,7 +236,7 @@ public class LSPManagerService extends ILSPManagerService.Stub {
.setContentTitle(title)
.setContentText(content)
.setSmallIcon(android.R.drawable.ic_dialog_info)
- .setColor(context.getResources().getColor(org.lsposed.manager.R.color.color_primary))
+ .setColor(context.getResources().getColor(R.color.color_primary))
.setContentIntent(getNotificationIntent(modulePackageName, moduleUserId))
.setAutoCancel(true)
.setStyle(style)
diff --git a/daemon/src/main/res/values-night/colors.xml b/daemon/src/main/res/values-night/colors.xml
new file mode 100644
index 00000000..bea2dc86
--- /dev/null
+++ b/daemon/src/main/res/values-night/colors.xml
@@ -0,0 +1,22 @@
+
+
+
+ @color/color_primary_dark
+
diff --git a/daemon/src/main/res/values/colors.xml b/daemon/src/main/res/values/colors.xml
new file mode 100644
index 00000000..7741d6e0
--- /dev/null
+++ b/daemon/src/main/res/values/colors.xml
@@ -0,0 +1,24 @@
+
+
+
+ #1A73E8
+ #8AB4F8
+ @color/color_primary_light
+
diff --git a/daemon/src/main/res/values/strings.xml b/daemon/src/main/res/values/strings.xml
index df33189d..3c9e7525 100644
--- a/daemon/src/main/res/values/strings.xml
+++ b/daemon/src/main/res/values/strings.xml
@@ -1,3 +1,9 @@
- LSPosed
-
\ No newline at end of file
+
+ Xposed module is not activated yet
+ %s has been installed, but is not activated yet
+ Xposed module updated
+ %s has been updated, please force stop and restart apps in its scope
+ Xposed module updated, system reboot required
+ %s has been updated, since the scope contains System Framework, required reboot to apply changes
+
diff --git a/gradle.properties b/gradle.properties
index 942f3d60..69af2471 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -11,10 +11,8 @@
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
-# disable new resource shinker since it will change the resources id
-# which will be used by the core
-# android.experimental.enableNewResourceShrinker=true
-# android.experimental.enableNewResourceShrinker.preciseShrinking=true
+android.experimental.enableNewResourceShrinker=true
+android.experimental.enableNewResourceShrinker.preciseShrinking=true
android.enableAppCompileTimeRClass=true
android.nonTransitiveRClass=true
android.enableR8.fullMode=true