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;
}