From 86304f11ce07a97dfb1db41b705e8c0ac9b4a40b Mon Sep 17 00:00:00 2001 From: vvb2060 Date: Sat, 24 Apr 2021 12:43:23 +0800 Subject: [PATCH] Remove migration setting (#504) * Add self check * clean * Update description * Remove migration setting since c5bac3415cd32e482435e4559970d77aee92d7eb, it has been invalid --- core/build.gradle.kts | 22 ++---- core/magisk_module/customize.sh | 40 +++------- core/magisk_module/module.prop | 2 +- core/magisk_module/uninstall.sh | 1 + core/magisk_module/verify.sh | 14 +++- core/proguard-rules.pro | 3 - .../lsposed/lspd/service/ConfigManager.java | 78 ++----------------- 7 files changed, 39 insertions(+), 121 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 40e10cbc..4880e503 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -30,14 +30,6 @@ plugins { kotlin("android") } -fun calcSha256(file: File): String { - val md = MessageDigest.getInstance("SHA-256") - file.forEachBlock(4096) { bytes, size -> - md.update(bytes, 0, size) - } - return md.digest().toHexString() -} - val moduleName = "LSPosed" val isWindows = OperatingSystem.current().isWindows val moduleId = "riru_lsposed" @@ -88,6 +80,8 @@ android { applicationId("org.lsposed.lspd") minSdkVersion(androidMinSdkVersion) targetSdkVersion(androidTargetSdkVersion) + versionCode(verCode) + versionName(verName) multiDexEnabled = false externalNativeBuild { @@ -120,8 +114,6 @@ android { } buildConfigField("int", "API_CODE", "$apiCode") - buildConfigField("String", "VERSION_NAME", "\"$verName\"") - buildConfigField("Integer", "VERSION_CODE", verCode.toString()) buildConfigField("String", "DEFAULT_MANAGER_PACKAGE_NAME", "\"$defaultManagerPackageName\"") } @@ -288,11 +280,13 @@ android.applicationVariants.all { rename("classes.dex", "lspd.dex") } } - fileTree(magiskDir).matching { - exclude("README.md", "META-INF") - }.visit { + fileTree(magiskDir).visit { if (isDirectory) return@visit - file(file.path + ".sha256").writeText(calcSha256(file)) + val md = MessageDigest.getInstance("SHA-256") + file.forEachBlock(4096) { bytes, size -> + md.update(bytes, 0, size) + } + file(file.path + ".sha256").writeText(md.digest().toHexString()) } } } diff --git a/core/magisk_module/customize.sh b/core/magisk_module/customize.sh index c3003b29..c13265fe 100644 --- a/core/magisk_module/customize.sh +++ b/core/magisk_module/customize.sh @@ -21,17 +21,8 @@ # shellcheck disable=SC2034 SKIPUNZIP=1 -abortC() { - rm -rf "$MODPATH" - if [ ! -f /data/adb/lspd/misc_path ]; then - [ -d "$MISC_PATH" ] && rm -rf "$MISC_PATH" - fi - abort "$1" -} - VERSION=$(grep_prop version "${TMPDIR}/module.prop") VERSION_CODE=$(grep_prop versionCode "${TMPDIR}/module.prop") - ui_print "- LSPosed version ${VERSION} (${VERSION_CODE})" # Extract verify.sh @@ -41,19 +32,19 @@ if [ ! -f "$TMPDIR/verify.sh" ]; then ui_print "*********************************************************" ui_print "! Unable to extract verify.sh!" ui_print "! This zip may be corrupted, please try downloading again" - abortC "*********************************************************" + abort "*********************************************************" fi . "$TMPDIR/verify.sh" +# Base check extract "$ZIPFILE" 'customize.sh' "$TMPDIR" +extract "$ZIPFILE" 'verify.sh' "$TMPDIR" extract "$ZIPFILE" 'util_functions.sh' "$TMPDIR" . "$TMPDIR/util_functions.sh" - check_android_version check_magisk_version # Extract riru.sh - extract "$ZIPFILE" 'riru.sh' "$TMPDIR" . "$TMPDIR/riru.sh" @@ -77,6 +68,7 @@ extract "$ZIPFILE" 'sepolicy.rule' "$MODPATH" extract "$ZIPFILE" 'post-fs-data.sh' "$MODPATH" extract "$ZIPFILE" 'uninstall.sh' "$MODPATH" extract "$ZIPFILE" 'framework/lspd.dex' "$MODPATH" +extract "$ZIPFILE" 'manager.apk' '/data/adb/lspd/' mkdir "$MODPATH/riru" mkdir "$MODPATH/riru/lib" @@ -112,6 +104,7 @@ fi set_perm_recursive "$MODPATH" 0 0 0755 0644 +# Lsposed config ui_print "- Creating configuration directories" if [ -f /data/adb/lspd/misc_path ]; then # read current MISC_PATH @@ -126,26 +119,15 @@ else MISC_RAND=$(tr -cd 'A-Za-z0-9' /data/adb/lspd/misc_path || abortC "! Can't store configuration path" + mkdir -p /data/adb/lspd || abort "! Can't create configuration path" + echo "$MISC_PATH" >/data/adb/lspd/misc_path || abort "! Can't store configuration path" fi -extract "${ZIPFILE}" 'manager.apk' "/data/adb/lspd/" mkdir -p "/data/misc/$MISC_PATH" -set_perm "/data/misc/$MISC_PATH" 0 0 0771 "u:object_r:magisk_file:s0" || abortC "! Can't set permission" +set_perm "/data/misc/$MISC_PATH" 0 0 0771 "u:object_r:magisk_file:s0" || abort "! Can't set permission" +echo "rm -rf /data/misc/$MISC_PATH" >>"${MODPATH}/uninstall.sh" || abort "! Can't write uninstall script" -if [ ! -d /data/adb/lspd/config ]; then - mkdir -p /data/adb/lspd/config - ui_print "- Migrating configuration" - cp -r "/data/misc/$MISC_PATH/0/prefs" "/data/misc/$MISC_PATH/prefs" - /system/bin/app_process -Djava.class.path=/data/adb/lspd/framework/lspd.dex /system/bin --nice-name=lspd_config org.lsposed.lspd.service.ConfigManager -fi - -echo "rm -rf /data/misc/$MISC_PATH" >>"${MODPATH}/uninstall.sh" || abortC "! Can't write uninstall script" -echo "rm -rf /data/adb/lspd" >>"${MODPATH}/uninstall.sh" || abortC "! Can't write uninstall script" - -if [ ! -e /data/adb/lspd/config/verbose_log ]; then - echo "0" >/data/adb/lspd/config/verbose_log -fi +[ -d /data/adb/lspd/config ] || mkdir -p /data/adb/lspd/config +[ -f /data/adb/lspd/config/verbose_log ] || echo "0" >/data/adb/lspd/config/verbose_log ui_print "- Welcome to LSPosed!" diff --git a/core/magisk_module/module.prop b/core/magisk_module/module.prop index 26a2f9af..167a0db3 100644 --- a/core/magisk_module/module.prop +++ b/core/magisk_module/module.prop @@ -3,4 +3,4 @@ name=Riru - LSPosed version=${versionName} versionCode=${versionCode} author=${authorList} -description=Another enhanced implementation of Xposed Framework. Supports Android 8.1 ~ 12 DP2. Requires Riru ${minRiruVersionName} or above installed. \ No newline at end of file +description=Another enhanced implementation of Xposed Framework. Supports Android 8.1 ~ 12 DP3. Requires Riru ${minRiruVersionName} or above installed. diff --git a/core/magisk_module/uninstall.sh b/core/magisk_module/uninstall.sh index cf7adbbd..40a49adf 100644 --- a/core/magisk_module/uninstall.sh +++ b/core/magisk_module/uninstall.sh @@ -21,3 +21,4 @@ # MODDIR=${0%/*} +rm -rf /data/adb/lspd diff --git a/core/magisk_module/verify.sh b/core/magisk_module/verify.sh index f638818c..2e1f4efb 100644 --- a/core/magisk_module/verify.sh +++ b/core/magisk_module/verify.sh @@ -56,4 +56,16 @@ extract() { (echo "$(cat "$hash_path") $file_path" | sha256sum -c -s -) || abort_verify "Failed to verify $file" ui_print "- Verified $file" >&1 -} \ No newline at end of file +} + +file="META-INF/com/google/android/update-binary" +file_path="$TMPDIR_FOR_VERIFY/$file" +hash_path="$file_path.sha256" +unzip -o "$ZIPFILE" "META-INF/com/google/android/*" -d "$TMPDIR_FOR_VERIFY" >&2 +[ -f "$file_path" ] || abort_verify "$file not exists" +if [ -f "$hash_path" ]; then + (echo "$(cat "$hash_path") $file_path" | sha256sum -c -s -) || abort_verify "Failed to verify $file" + ui_print "- Verified $file" >&1 +else + ui_print "- Download from Magisk app" +fi diff --git a/core/proguard-rules.pro b/core/proguard-rules.pro index 32477e90..4499844d 100644 --- a/core/proguard-rules.pro +++ b/core/proguard-rules.pro @@ -41,9 +41,6 @@ public static boolean execTransact(int, long, long, int); public static android.os.IBinder getApplicationServiceForSystemServer(android.os.IBinder, android.os.IBinder); } --keepclasseswithmembers class org.lsposed.lspd.service.ConfigManager { - public static void main(java.lang.String[]); -} -assumenosideeffects class android.util.Log { public static *** v(...); public static *** d(...); diff --git a/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java b/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java index 02fd490f..f72b856f 100644 --- a/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java +++ b/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java @@ -19,6 +19,8 @@ package org.lsposed.lspd.service; +import static org.lsposed.lspd.service.ServiceManager.TAG; + import android.content.ContentValues; import android.content.pm.PackageInfo; import android.database.Cursor; @@ -39,31 +41,24 @@ import android.util.Pair; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import java.io.BufferedReader; +import org.lsposed.lspd.Application; +import org.lsposed.lspd.BuildConfig; + import java.io.File; -import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.io.OutputStream; import java.nio.channels.FileChannel; import java.nio.file.Files; import java.nio.file.StandardOpenOption; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import org.lsposed.lspd.Application; -import org.lsposed.lspd.BuildConfig; - -import static org.lsposed.lspd.service.ServiceManager.TAG; - // This config manager assume uid won't change when our service is off. // Otherwise, user should maintain it manually. public class ConfigManager { @@ -667,69 +662,6 @@ public class ConfigManager { } } - // migrate setting - public static void main(String[] args) { - if (!miscFile.exists()) { - System.exit(1); - } - File miscPath = new File("/data/misc/" + readText(miscFile, "lspd")); - if (!miscPath.exists()) { - System.exit(2); - } - try { - HashMap> modulesScope = new HashMap<>(); - for (File dir : miscPath.listFiles(File::isDirectory)) { - try { - int userId = Integer.parseInt(dir.getName()); - System.out.println("Processing user: " + userId); - File conf = new File(dir, "conf"); - if (!conf.exists()) continue; - File enabledModules = new File(conf, "enabled_modules.list"); - if (!enabledModules.exists()) continue; - - System.out.println("updating modules..."); - - try (InputStream inputStream = new FileInputStream(enabledModules); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { - String packageName; - while ((packageName = reader.readLine()) != null) { - System.out.println("\t" + packageName); - PackageInfo pkgInfo = PackageService.getPackageInfo(packageName, 0, 0); - if (pkgInfo == null || pkgInfo.applicationInfo == null) continue; - getInstance().enableModule(packageName, pkgInfo.applicationInfo.sourceDir); - } - } - System.out.println("updating scope..."); - - for (File scopeConf : conf.listFiles(name -> name.getName().endsWith(".conf"))) { - String packageName = scopeConf.getName().replaceAll(".conf$", ""); - System.out.println("\t" + packageName); - List scope = modulesScope.computeIfAbsent(packageName, ignored -> new ArrayList<>()); - try (InputStream inputStream = new FileInputStream(scopeConf); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { - String line; - while ((line = reader.readLine()) != null) { - Application app = new Application(); - app.packageName = line; - app.userId = userId; - System.out.println("\t\t" + app.packageName); - scope.add(app); - } - } - } - } catch (NumberFormatException ignored) { - } - } - - System.out.println("Applying scope"); - for (HashMap.Entry> entry : modulesScope.entrySet()) { - getInstance().setModuleScope(entry.getKey(), entry.getValue()); - } - } catch (Throwable e) { - System.out.println(Log.getStackTraceString(e)); - System.exit(3); - } - System.exit(0); - } - public String getManagerPackageName() { return manager; }