Remove migration setting (#504)
* Add self check
* clean
* Update description
* Remove migration setting
since c5bac3415c, it has been invalid
This commit is contained in:
parent
12c2876384
commit
86304f11ce
|
|
@ -30,14 +30,6 @@ plugins {
|
||||||
kotlin("android")
|
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 moduleName = "LSPosed"
|
||||||
val isWindows = OperatingSystem.current().isWindows
|
val isWindows = OperatingSystem.current().isWindows
|
||||||
val moduleId = "riru_lsposed"
|
val moduleId = "riru_lsposed"
|
||||||
|
|
@ -88,6 +80,8 @@ android {
|
||||||
applicationId("org.lsposed.lspd")
|
applicationId("org.lsposed.lspd")
|
||||||
minSdkVersion(androidMinSdkVersion)
|
minSdkVersion(androidMinSdkVersion)
|
||||||
targetSdkVersion(androidTargetSdkVersion)
|
targetSdkVersion(androidTargetSdkVersion)
|
||||||
|
versionCode(verCode)
|
||||||
|
versionName(verName)
|
||||||
multiDexEnabled = false
|
multiDexEnabled = false
|
||||||
|
|
||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
|
|
@ -120,8 +114,6 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
buildConfigField("int", "API_CODE", "$apiCode")
|
buildConfigField("int", "API_CODE", "$apiCode")
|
||||||
buildConfigField("String", "VERSION_NAME", "\"$verName\"")
|
|
||||||
buildConfigField("Integer", "VERSION_CODE", verCode.toString())
|
|
||||||
buildConfigField("String", "DEFAULT_MANAGER_PACKAGE_NAME", "\"$defaultManagerPackageName\"")
|
buildConfigField("String", "DEFAULT_MANAGER_PACKAGE_NAME", "\"$defaultManagerPackageName\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -288,11 +280,13 @@ android.applicationVariants.all {
|
||||||
rename("classes.dex", "lspd.dex")
|
rename("classes.dex", "lspd.dex")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fileTree(magiskDir).matching {
|
fileTree(magiskDir).visit {
|
||||||
exclude("README.md", "META-INF")
|
|
||||||
}.visit {
|
|
||||||
if (isDirectory) return@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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,17 +21,8 @@
|
||||||
# shellcheck disable=SC2034
|
# shellcheck disable=SC2034
|
||||||
SKIPUNZIP=1
|
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=$(grep_prop version "${TMPDIR}/module.prop")
|
||||||
VERSION_CODE=$(grep_prop versionCode "${TMPDIR}/module.prop")
|
VERSION_CODE=$(grep_prop versionCode "${TMPDIR}/module.prop")
|
||||||
|
|
||||||
ui_print "- LSPosed version ${VERSION} (${VERSION_CODE})"
|
ui_print "- LSPosed version ${VERSION} (${VERSION_CODE})"
|
||||||
|
|
||||||
# Extract verify.sh
|
# Extract verify.sh
|
||||||
|
|
@ -41,19 +32,19 @@ if [ ! -f "$TMPDIR/verify.sh" ]; then
|
||||||
ui_print "*********************************************************"
|
ui_print "*********************************************************"
|
||||||
ui_print "! Unable to extract verify.sh!"
|
ui_print "! Unable to extract verify.sh!"
|
||||||
ui_print "! This zip may be corrupted, please try downloading again"
|
ui_print "! This zip may be corrupted, please try downloading again"
|
||||||
abortC "*********************************************************"
|
abort "*********************************************************"
|
||||||
fi
|
fi
|
||||||
. "$TMPDIR/verify.sh"
|
. "$TMPDIR/verify.sh"
|
||||||
|
|
||||||
|
# Base check
|
||||||
extract "$ZIPFILE" 'customize.sh' "$TMPDIR"
|
extract "$ZIPFILE" 'customize.sh' "$TMPDIR"
|
||||||
|
extract "$ZIPFILE" 'verify.sh' "$TMPDIR"
|
||||||
extract "$ZIPFILE" 'util_functions.sh' "$TMPDIR"
|
extract "$ZIPFILE" 'util_functions.sh' "$TMPDIR"
|
||||||
. "$TMPDIR/util_functions.sh"
|
. "$TMPDIR/util_functions.sh"
|
||||||
|
|
||||||
check_android_version
|
check_android_version
|
||||||
check_magisk_version
|
check_magisk_version
|
||||||
|
|
||||||
# Extract riru.sh
|
# Extract riru.sh
|
||||||
|
|
||||||
extract "$ZIPFILE" 'riru.sh' "$TMPDIR"
|
extract "$ZIPFILE" 'riru.sh' "$TMPDIR"
|
||||||
. "$TMPDIR/riru.sh"
|
. "$TMPDIR/riru.sh"
|
||||||
|
|
||||||
|
|
@ -77,6 +68,7 @@ extract "$ZIPFILE" 'sepolicy.rule' "$MODPATH"
|
||||||
extract "$ZIPFILE" 'post-fs-data.sh' "$MODPATH"
|
extract "$ZIPFILE" 'post-fs-data.sh' "$MODPATH"
|
||||||
extract "$ZIPFILE" 'uninstall.sh' "$MODPATH"
|
extract "$ZIPFILE" 'uninstall.sh' "$MODPATH"
|
||||||
extract "$ZIPFILE" 'framework/lspd.dex' "$MODPATH"
|
extract "$ZIPFILE" 'framework/lspd.dex' "$MODPATH"
|
||||||
|
extract "$ZIPFILE" 'manager.apk' '/data/adb/lspd/'
|
||||||
|
|
||||||
mkdir "$MODPATH/riru"
|
mkdir "$MODPATH/riru"
|
||||||
mkdir "$MODPATH/riru/lib"
|
mkdir "$MODPATH/riru/lib"
|
||||||
|
|
@ -112,6 +104,7 @@ fi
|
||||||
|
|
||||||
set_perm_recursive "$MODPATH" 0 0 0755 0644
|
set_perm_recursive "$MODPATH" 0 0 0755 0644
|
||||||
|
|
||||||
|
# Lsposed config
|
||||||
ui_print "- Creating configuration directories"
|
ui_print "- Creating configuration directories"
|
||||||
if [ -f /data/adb/lspd/misc_path ]; then
|
if [ -f /data/adb/lspd/misc_path ]; then
|
||||||
# read current MISC_PATH
|
# read current MISC_PATH
|
||||||
|
|
@ -126,26 +119,15 @@ else
|
||||||
MISC_RAND=$(tr -cd 'A-Za-z0-9' </dev/urandom | head -c16)
|
MISC_RAND=$(tr -cd 'A-Za-z0-9' </dev/urandom | head -c16)
|
||||||
MISC_PATH="lspd_${MISC_RAND}"
|
MISC_PATH="lspd_${MISC_RAND}"
|
||||||
ui_print " - Use new path ${MISC_RAND}"
|
ui_print " - Use new path ${MISC_RAND}"
|
||||||
mkdir -p /data/adb/lspd || abortC "! Can't create configuration path"
|
mkdir -p /data/adb/lspd || abort "! Can't create configuration path"
|
||||||
echo "$MISC_PATH" >/data/adb/lspd/misc_path || abortC "! Can't store configuration path"
|
echo "$MISC_PATH" >/data/adb/lspd/misc_path || abort "! Can't store configuration path"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
extract "${ZIPFILE}" 'manager.apk' "/data/adb/lspd/"
|
|
||||||
mkdir -p "/data/misc/$MISC_PATH"
|
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
|
[ -d /data/adb/lspd/config ] || mkdir -p /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 "- 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
|
|
||||||
|
|
||||||
ui_print "- Welcome to LSPosed!"
|
ui_print "- Welcome to LSPosed!"
|
||||||
|
|
|
||||||
|
|
@ -3,4 +3,4 @@ name=Riru - LSPosed
|
||||||
version=${versionName}
|
version=${versionName}
|
||||||
versionCode=${versionCode}
|
versionCode=${versionCode}
|
||||||
author=${authorList}
|
author=${authorList}
|
||||||
description=Another enhanced implementation of Xposed Framework. Supports Android 8.1 ~ 12 DP2. Requires Riru ${minRiruVersionName} or above installed.
|
description=Another enhanced implementation of Xposed Framework. Supports Android 8.1 ~ 12 DP3. Requires Riru ${minRiruVersionName} or above installed.
|
||||||
|
|
|
||||||
|
|
@ -21,3 +21,4 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
MODDIR=${0%/*}
|
MODDIR=${0%/*}
|
||||||
|
rm -rf /data/adb/lspd
|
||||||
|
|
|
||||||
|
|
@ -57,3 +57,15 @@ extract() {
|
||||||
(echo "$(cat "$hash_path") $file_path" | sha256sum -c -s -) || abort_verify "Failed to verify $file"
|
(echo "$(cat "$hash_path") $file_path" | sha256sum -c -s -) || abort_verify "Failed to verify $file"
|
||||||
ui_print "- Verified $file" >&1
|
ui_print "- Verified $file" >&1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
|
|
||||||
|
|
@ -41,9 +41,6 @@
|
||||||
public static boolean execTransact(int, long, long, int);
|
public static boolean execTransact(int, long, long, int);
|
||||||
public static android.os.IBinder getApplicationServiceForSystemServer(android.os.IBinder, android.os.IBinder);
|
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 {
|
-assumenosideeffects class android.util.Log {
|
||||||
public static *** v(...);
|
public static *** v(...);
|
||||||
public static *** d(...);
|
public static *** d(...);
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@
|
||||||
|
|
||||||
package org.lsposed.lspd.service;
|
package org.lsposed.lspd.service;
|
||||||
|
|
||||||
|
import static org.lsposed.lspd.service.ServiceManager.TAG;
|
||||||
|
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
|
|
@ -39,31 +41,24 @@ import android.util.Pair;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
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.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.nio.channels.FileChannel;
|
import java.nio.channels.FileChannel;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.StandardOpenOption;
|
import java.nio.file.StandardOpenOption;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
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.
|
// This config manager assume uid won't change when our service is off.
|
||||||
// Otherwise, user should maintain it manually.
|
// Otherwise, user should maintain it manually.
|
||||||
public class ConfigManager {
|
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<String, List<Application>> 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<Application> 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<String, List<Application>> 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() {
|
public String getManagerPackageName() {
|
||||||
return manager;
|
return manager;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue