From fd32c3107ab7ba43ce6ab9ac899859cb76dc1257 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Tue, 18 May 2021 14:25:06 +0800 Subject: [PATCH] Detect system framework injection status (#619) --- app/src/main/java/org/lsposed/manager/ConfigManager.java | 8 ++++++++ .../manager/receivers/LSPManagerServiceClient.java | 6 ++++++ .../org/lsposed/manager/ui/activity/MainActivity.java | 5 +++++ .../org/lsposed/manager/ui/dialog/InfoDialogBuilder.java | 7 +++++-- app/src/main/res/layout/dialog_info.xml | 4 ++-- app/src/main/res/values-zh-rCN/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 4 +++- .../java/org/lsposed/lspd/service/LSPManagerService.java | 5 +++++ .../org/lsposed/lspd/service/LSPSystemServerService.java | 7 +++++++ .../java/org/lsposed/lspd/service/ServiceManager.java | 3 +++ .../main/aidl/org/lsposed/lspd/ILSPManagerService.aidl | 2 ++ 11 files changed, 48 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/lsposed/manager/ConfigManager.java b/app/src/main/java/org/lsposed/manager/ConfigManager.java index 5def8309..94b7fcc6 100644 --- a/app/src/main/java/org/lsposed/manager/ConfigManager.java +++ b/app/src/main/java/org/lsposed/manager/ConfigManager.java @@ -254,4 +254,12 @@ public class ConfigManager { return Arrays.stream(System.getenv("PATH").split(File.pathSeparator)) .anyMatch(str -> new File(str, "magisk").exists()); } + + public static boolean systemServerRequested() { + try { + return LSPManagerServiceClient.systemServerRequested(); + } catch (Throwable e) { + return false; + } + } } diff --git a/app/src/main/java/org/lsposed/manager/receivers/LSPManagerServiceClient.java b/app/src/main/java/org/lsposed/manager/receivers/LSPManagerServiceClient.java index 3cb30c02..0e49a89d 100644 --- a/app/src/main/java/org/lsposed/manager/receivers/LSPManagerServiceClient.java +++ b/app/src/main/java/org/lsposed/manager/receivers/LSPManagerServiceClient.java @@ -158,8 +158,14 @@ public class LSPManagerServiceClient { ensureService(); return service.getUsers(); } + public static int installExistingPackageAsUser(String packageName, int userId) throws RemoteException, NullPointerException { ensureService(); return service.installExistingPackageAsUser(packageName, userId); } + + public static boolean systemServerRequested() throws RemoteException, NullPointerException { + ensureService(); + return service.systemServerRequested(); + } } diff --git a/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java b/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java index 26d18e73..cd091607 100644 --- a/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java +++ b/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java @@ -97,6 +97,11 @@ public class MainActivity extends BaseActivity { cardBackgroundColor = ResourcesKt.resolveColor(getTheme(), R.attr.colorWarning); binding.statusIcon.setImageResource(R.drawable.ic_warning); binding.statusSummary.setText(R.string.selinux_policy_not_loaded_summary); + } else if (!ConfigManager.systemServerRequested()) { + binding.statusTitle.setText(R.string.partial_activated); + cardBackgroundColor = ResourcesKt.resolveColor(getTheme(), R.attr.colorWarning); + binding.statusIcon.setImageResource(R.drawable.ic_warning); + binding.statusSummary.setText(R.string.system_inject_fail_summary); } else { binding.statusTitle.setText(R.string.activated); cardBackgroundColor = ResourcesKt.resolveColor(getTheme(), R.attr.colorNormal); diff --git a/app/src/main/java/org/lsposed/manager/ui/dialog/InfoDialogBuilder.java b/app/src/main/java/org/lsposed/manager/ui/dialog/InfoDialogBuilder.java index 7cb5808b..e57da70e 100644 --- a/app/src/main/java/org/lsposed/manager/ui/dialog/InfoDialogBuilder.java +++ b/app/src/main/java/org/lsposed/manager/ui/dialog/InfoDialogBuilder.java @@ -56,8 +56,11 @@ public class InfoDialogBuilder extends BlurBehindDialogBuilder { binding.systemAbi.setText(Build.SUPPORTED_ABIS[0]); if (!ConfigManager.isSepolicyLoaded()) { - binding.selinux.setVisibility(View.VISIBLE); - binding.selinux.setText(HtmlCompat.fromHtml(context.getString(R.string.selinux_policy_not_loaded), HtmlCompat.FROM_HTML_MODE_LEGACY)); + binding.note.setVisibility(View.VISIBLE); + binding.note.setText(HtmlCompat.fromHtml(context.getString(R.string.selinux_policy_not_loaded), HtmlCompat.FROM_HTML_MODE_LEGACY)); + } else if (!ConfigManager.systemServerRequested()) { + binding.note.setVisibility(View.VISIBLE); + binding.note.setText(HtmlCompat.fromHtml(context.getString(R.string.system_inject_fail), HtmlCompat.FROM_HTML_MODE_LEGACY)); } setView(binding.getRoot()); diff --git a/app/src/main/res/layout/dialog_info.xml b/app/src/main/res/layout/dialog_info.xml index a54eb9a8..5b414a5d 100644 --- a/app/src/main/res/layout/dialog_info.xml +++ b/app/src/main/res/layout/dialog_info.xml @@ -105,11 +105,11 @@ android:layout_height="wrap_content" /> - \ No newline at end of file + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f0b4722a..2b5efccb 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -41,6 +41,8 @@ 部分激活 SEPolicy 未被正确加载 警告:SEPolicy 未被正确加载,作用于系统框架的模块将不起作用。
请将此报告给 Magisk 开发者。]]>
+ 系统框架注入失败 + 警告:系统注入失败。
这是极罕见的情况,可能是由 Magisk 或低质 Magisk 模块导致。
请尝试禁用除 Riru 和 LSPosed 外的 Magisk 模块,或向开发者提供完整日志。]]>
API 版本 框架版本 管理器版本 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bec8b685..5ab722ed 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -40,7 +40,9 @@ Not installed Partially activated SEPolicy is not loaded properly - WARNING: SEPolicy is not loaded properly, modules that hook System Framework will not work.
Please report this to Magisk developer.]]>
+ WARNING: SEPolicy is not loaded properly, modules that hook System Framework will not work.
Please report this to Magisk developer.]]>
+ System Framework injection failed + WARNING: System Framework inject failed.
This is rare and may be caused by Magisk or some low-quality Magisk modules.
Please try to disable Magisk modules other than Riru and LSPosed or submit full log to developers.]]>
API version Framework version Manager version diff --git a/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java b/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java index 4fe6b2c7..6273c1b5 100644 --- a/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java +++ b/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java @@ -180,4 +180,9 @@ public class LSPManagerService extends ILSPManagerService.Stub { return PackageService.INSTALL_FAILED_INTERNAL_ERROR; } } + + @Override + public boolean systemServerRequested() throws RemoteException { + return ServiceManager.systemServerRequested(); + } } diff --git a/core/src/main/java/org/lsposed/lspd/service/LSPSystemServerService.java b/core/src/main/java/org/lsposed/lspd/service/LSPSystemServerService.java index 6e9949b0..c3616582 100644 --- a/core/src/main/java/org/lsposed/lspd/service/LSPSystemServerService.java +++ b/core/src/main/java/org/lsposed/lspd/service/LSPSystemServerService.java @@ -15,6 +15,11 @@ public class LSPSystemServerService extends ILSPSystemServerService.Stub impleme public static final String PROXY_SERVICE_NAME = "serial"; private IBinder originService = null; + private boolean requested = false; + + public boolean systemServerRequested() { + return requested; + } public void putBinderForSystemServer() { android.os.ServiceManager.addService(PROXY_SERVICE_NAME, this); @@ -48,6 +53,7 @@ public class LSPSystemServerService extends ILSPSystemServerService.Stub impleme @Override public ILSPApplicationService requestApplicationService(int uid, int pid, String processName, IBinder heartBeat) throws RemoteException { + requested = true; if (ConfigManager.getInstance().shouldSkipSystemServer() || uid != 1000 || heartBeat == null || !"android".equals(processName)) return null; else @@ -77,5 +83,6 @@ public class LSPSystemServerService extends ILSPSystemServerService.Stub impleme originService.unlinkToDeath(this, 0); originService = null; } + requested = false; } } 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 f023904f..68ed3ff7 100644 --- a/core/src/main/java/org/lsposed/lspd/service/ServiceManager.java +++ b/core/src/main/java/org/lsposed/lspd/service/ServiceManager.java @@ -134,4 +134,7 @@ public class ServiceManager { return managerService; } + public static boolean systemServerRequested() { + return systemServerService.systemServerRequested(); + } } diff --git a/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl b/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl index d7c4682b..fd0651b3 100644 --- a/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl +++ b/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl @@ -50,4 +50,6 @@ interface ILSPManagerService { int[] getUsers() = 27; int installExistingPackageAsUser(String packageName, int userId) = 28; + + boolean systemServerRequested() = 29; }