From 43e878aabe1f21895585f7ca8b3b785269b9c2ae Mon Sep 17 00:00:00 2001 From: LoveSy Date: Sun, 21 Feb 2021 20:19:11 +0800 Subject: [PATCH] [core] Fix detection of newly installed manager --- .../lsposed/lspd/service/ConfigManager.java | 6 ++++-- .../lsposed/lspd/service/LSPosedService.java | 3 +++ .../lsposed/lspd/service/PackageService.java | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/io/github/lsposed/lspd/service/ConfigManager.java b/core/src/main/java/io/github/lsposed/lspd/service/ConfigManager.java index aefde9fa..7192ee83 100644 --- a/core/src/main/java/io/github/lsposed/lspd/service/ConfigManager.java +++ b/core/src/main/java/io/github/lsposed/lspd/service/ConfigManager.java @@ -216,6 +216,8 @@ public class ConfigManager { if (info != null) { managerUid = info.applicationInfo.uid; manager = info.packageName; + } else { + Log.w(TAG, "manager is not installed"); } } catch (RemoteException ignored) { } @@ -558,8 +560,8 @@ public class ConfigManager { } } - public boolean isManager(String module_pkg_name) { - return module_pkg_name.equals(manager); + public boolean isManager(String packageName) { + return packageName.equals(manager) || packageName.equals(DEFAULT_MANAGER_PACKAGE_NAME); } public boolean isManager(int uid) { diff --git a/core/src/main/java/io/github/lsposed/lspd/service/LSPosedService.java b/core/src/main/java/io/github/lsposed/lspd/service/LSPosedService.java index 15e2fd76..7961e61f 100644 --- a/core/src/main/java/io/github/lsposed/lspd/service/LSPosedService.java +++ b/core/src/main/java/io/github/lsposed/lspd/service/LSPosedService.java @@ -68,6 +68,7 @@ public class LSPosedService extends ILSPosedService.Stub { Log.e(TAG, "Package name is null"); return; } + Log.d(TAG, "New installed: " + packageName); int uid = intent.getIntExtra(Intent.EXTRA_UID, -1); int userId = intent.getIntExtra(Intent.EXTRA_USER, -1); boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false); @@ -103,7 +104,9 @@ public class LSPosedService extends ILSPosedService.Stub { } } if (!intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED) && uid > 0 && ConfigManager.getInstance().isManager(packageName)) { + Log.d(TAG, "Manager updated"); try { + ConfigManager.getInstance().updateManager(); ConfigManager.grantManagerPermission(); } catch (Throwable e) { Log.e(TAG, Log.getStackTraceString(e)); diff --git a/core/src/main/java/io/github/lsposed/lspd/service/PackageService.java b/core/src/main/java/io/github/lsposed/lspd/service/PackageService.java index 9e92066b..e97693bb 100644 --- a/core/src/main/java/io/github/lsposed/lspd/service/PackageService.java +++ b/core/src/main/java/io/github/lsposed/lspd/service/PackageService.java @@ -27,6 +27,7 @@ import android.content.pm.ServiceInfo; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; +import android.util.Log; import android.util.Pair; import java.util.ArrayList; @@ -38,6 +39,7 @@ import io.github.lsposed.lspd.Application; import io.github.lsposed.lspd.utils.ParceledListSlice; import static android.content.pm.ServiceInfo.FLAG_ISOLATED_PROCESS; +import static io.github.lsposed.lspd.service.ServiceManager.TAG; public class PackageService { private static IPackageManager pm = null; @@ -46,6 +48,20 @@ public class PackageService { public static IPackageManager getPackageManager() { if (binder == null && pm == null) { binder = ServiceManager.getService("package"); + if (binder == null) return null; + try { + binder.linkToDeath(new IBinder.DeathRecipient() { + @Override + public void binderDied() { + Log.w(TAG, "pm is dead"); + binder.unlinkToDeath(this, 0); + binder = null; + pm = null; + } + }, 0); + } catch (RemoteException e) { + Log.e(TAG, Log.getStackTraceString(e)); + } pm = IPackageManager.Stub.asInterface(binder); } return pm;