From 409a1974318a009994593dd8c4dae5eef89278c7 Mon Sep 17 00:00:00 2001 From: vvb2060 Date: Tue, 29 Jun 2021 04:20:55 +0800 Subject: [PATCH] [core] Support debugger --- core/magisk_module/customize.sh | 4 +++- core/magisk_module/lspd | 19 +++++++++++++++++++ core/magisk_module/post-fs-data.sh | 2 +- core/magisk_module/service.sh | 3 ++- core/magisk_module/uninstall.sh | 2 -- core/magisk_module/util_functions.sh | 2 +- .../lsposed/lspd/service/ServiceManager.java | 18 +++++++++++++++--- .../main/java/android/app/ActivityThread.java | 4 ++++ 8 files changed, 45 insertions(+), 9 deletions(-) create mode 100644 core/magisk_module/lspd diff --git a/core/magisk_module/customize.sh b/core/magisk_module/customize.sh index a7d22b26..a7d9c153 100644 --- a/core/magisk_module/customize.sh +++ b/core/magisk_module/customize.sh @@ -69,6 +69,7 @@ extract "$ZIPFILE" 'post-fs-data.sh' "$MODPATH" extract "$ZIPFILE" 'service.sh' "$MODPATH" extract "$ZIPFILE" 'uninstall.sh' "$MODPATH" extract "$ZIPFILE" 'framework/lspd.dex' "$MODPATH" +extract "$ZIPFILE" 'lspd' "$MODPATH" extract "$ZIPFILE" 'manager.apk' '/data/adb/lspd' mkdir "$MODPATH/riru" @@ -99,11 +100,12 @@ if [ "$RIRU_MODULE_DEBUG" = true ]; then mv "$MODPATH/riru" "$MODPATH/system" mv "$MODPATH/system/lib/liblspd.so" "$MODPATH/system/lib/libriru_lspd.so" mv "$MODPATH/system/lib64/liblspd.so" "$MODPATH/system/lib64/libriru_lspd.so" - cp -r "$MODPATH/framework" "$MODPATH/system/framework" + mv "$MODPATH/framework" "$MODPATH/system/framework" mkdir -p "/data/adb/riru/modules/lspd" fi set_perm_recursive "$MODPATH" 0 0 0755 0644 +chmod 0744 "$MODPATH/lspd" # Lsposed config ui_print "- Creating configuration directories" diff --git a/core/magisk_module/lspd b/core/magisk_module/lspd new file mode 100644 index 00000000..d60bc440 --- /dev/null +++ b/core/magisk_module/lspd @@ -0,0 +1,19 @@ +#!/system/bin/sh + +dir=${0%/*} +if [ -d "$dir/system" ]; then + java_options="-Djava.class.path=$dir/system/framework/lspd.dex" + os_version=$(getprop ro.build.version.sdk) + if [ "$os_version" -eq "27" ]; then + java_options="$java_options -Xrunjdwp:transport=dt_android_adb,suspend=n,server=y -Xcompiler-option --debuggable" + elif [ "$os_version" -eq "28" ]; then + java_options="$java_options -XjdwpProvider:adbconnection -XjdwpOptions:suspend=n,server=y -Xcompiler-option --debuggable" + else + java_options="$java_options -XjdwpProvider:adbconnection -XjdwpOptions:suspend=n,server=y" + fi +else + java_options="-Djava.class.path=$dir/framework/lspd.dex" +fi + +# shellcheck disable=SC2086 +exec /system/bin/app_process $java_options /system/bin --nice-name=lspd org.lsposed.lspd.core.Main "$@" >/dev/null 2>&1 diff --git a/core/magisk_module/post-fs-data.sh b/core/magisk_module/post-fs-data.sh index 60dc6a42..11d258cf 100644 --- a/core/magisk_module/post-fs-data.sh +++ b/core/magisk_module/post-fs-data.sh @@ -135,4 +135,4 @@ if [ ! -z "${MISC_PATH}" ]; then start_log_catcher all "LSPosed:V XSharedPreferences:V LSPosed-Bridge:V LSPosedManager:V LSPosedService:V *:F" true ${LOG_VERBOSE} fi -/system/bin/app_process -Djava.class.path=$(magisk --path)/.magisk/modules/riru_lsposed/framework/lspd.dex /system/bin --nice-name=lspd org.lsposed.lspd.core.Main >/dev/null 2>&1 +"$MODDIR/lspd" diff --git a/core/magisk_module/service.sh b/core/magisk_module/service.sh index d88e8ef6..48cb19ed 100644 --- a/core/magisk_module/service.sh +++ b/core/magisk_module/service.sh @@ -19,5 +19,6 @@ # Copyright (C) 2021 LSPosed Contributors # +MODDIR=${0%/*} # post-fs-data.sh may be blocked by other modules. retry to start this -/system/bin/app_process -Djava.class.path=$(magisk --path)/.magisk/modules/riru_lsposed/framework/lspd.dex /system/bin --nice-name=lspd org.lsposed.lspd.core.Main --from-service >/dev/null 2>&1 +"$MODDIR/lspd" --from-service diff --git a/core/magisk_module/uninstall.sh b/core/magisk_module/uninstall.sh index 40a49adf..e2ba6b6d 100644 --- a/core/magisk_module/uninstall.sh +++ b/core/magisk_module/uninstall.sh @@ -16,9 +16,7 @@ # You should have received a copy of the GNU General Public License # along with LSPosed. If not, see . # -# Copyright (C) 2020 EdXposed Contributors # Copyright (C) 2021 LSPosed Contributors # -MODDIR=${0%/*} rm -rf /data/adb/lspd diff --git a/core/magisk_module/util_functions.sh b/core/magisk_module/util_functions.sh index 38ddb568..ebfc3633 100644 --- a/core/magisk_module/util_functions.sh +++ b/core/magisk_module/util_functions.sh @@ -20,7 +20,7 @@ check_magisk_version() { ui_print "- Magisk version: $MAGISK_VER_CODE" - if [ "$MAGISK_VER_CODE" -lt 22105 ]; then + if [ "$MAGISK_VER_CODE" -lt 23000 ]; then ui_print "*********************************************************" ui_print "! Please install Magisk v23+" abort "*********************************************************" diff --git a/core/src/main/java/org/lsposed/lspd/service/ServiceManager.java b/core/src/main/java/org/lsposed/lspd/service/ServiceManager.java index b7bbdacc..a6af17e2 100644 --- a/core/src/main/java/org/lsposed/lspd/service/ServiceManager.java +++ b/core/src/main/java/org/lsposed/lspd/service/ServiceManager.java @@ -19,6 +19,7 @@ package org.lsposed.lspd.service; +import android.app.ActivityThread; import android.content.Context; import android.ddm.DdmHandleAppName; import android.os.IBinder; @@ -38,6 +39,7 @@ public class ServiceManager { private static LSPApplicationService applicationService = null; private static LSPManagerService managerService = null; private static LSPSystemServerService systemServerService = null; + private static Context systemContext = null; public static final String TAG = "LSPosedService"; private static void waitSystemService(String name) { @@ -60,9 +62,6 @@ public class ServiceManager { if (!ConfigManager.getInstance().tryLock()) System.exit(0); for (String arg : args) { - if (arg.equals("--debug")) { - DdmHandleAppName.setAppName("lspd", 0); - } if (arg.equals("--from-service")) { Log.w(TAG, "LSPosed daemon is not started properly. Try for a late start..."); } @@ -86,6 +85,8 @@ public class ServiceManager { android.os.Process.killProcess(android.system.Os.getppid()); + createSystemContext(); + waitSystemService("package"); waitSystemService("activity"); waitSystemService(Context.USER_SERVICE); @@ -151,4 +152,15 @@ public class ServiceManager { public static boolean systemServerRequested() { return systemServerService.systemServerRequested(); } + + private static void createSystemContext() { + ActivityThread activityThread = ActivityThread.systemMain(); + systemContext = activityThread.getSystemContext(); + systemContext.setTheme(android.R.style.Theme_DeviceDefault_Light_DarkActionBar); + DdmHandleAppName.setAppName("lspd", 0); + } + + public static Context getSystemContext() { + return systemContext; + } } diff --git a/hiddenapi-stubs/src/main/java/android/app/ActivityThread.java b/hiddenapi-stubs/src/main/java/android/app/ActivityThread.java index 64501c68..e9da3a1f 100644 --- a/hiddenapi-stubs/src/main/java/android/app/ActivityThread.java +++ b/hiddenapi-stubs/src/main/java/android/app/ActivityThread.java @@ -34,6 +34,10 @@ public final class ActivityThread { throw new UnsupportedOperationException("STUB"); } + public static ActivityThread systemMain() { + throw new UnsupportedOperationException("STUB"); + } + private class ApplicationThread extends IApplicationThread.Stub{ @Override public IBinder asBinder() {