From 1f5dfbc1b96e852f489aeea8f4aba352f0c1cfa1 Mon Sep 17 00:00:00 2001 From: Nullptr Date: Fri, 31 Dec 2021 01:31:34 +0800 Subject: [PATCH] [daemon] Only package needed resources (#1508) * [skip ci] Fix reRunDaemon task * [daemon] Only package needed resources * Shrink resources --- .github/workflows/crowdin.yml | 1 + app/src/main/res/values/strings.xml | 9 +---- core/build.gradle.kts | 8 ++-- crowdin.yml | 31 +++++++++------ daemon/build.gradle.kts | 38 +------------------ daemon/src/main/AndroidManifest.xml | 10 +---- .../lspd/service/ConfigFileManager.java | 3 +- .../lspd/service/LSPManagerService.java | 15 ++++---- daemon/src/main/res/values-night/colors.xml | 22 +++++++++++ daemon/src/main/res/values/colors.xml | 24 ++++++++++++ daemon/src/main/res/values/strings.xml | 10 ++++- gradle.properties | 6 +-- 12 files changed, 93 insertions(+), 84 deletions(-) create mode 100644 daemon/src/main/res/values-night/colors.xml create mode 100644 daemon/src/main/res/values/colors.xml 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