diff --git a/app/src/main/java/org/lsposed/manager/ConfigManager.java b/app/src/main/java/org/lsposed/manager/ConfigManager.java
index 43de1285..94aab49f 100644
--- a/app/src/main/java/org/lsposed/manager/ConfigManager.java
+++ b/app/src/main/java/org/lsposed/manager/ConfigManager.java
@@ -266,6 +266,14 @@ public class ConfigManager {
}
}
+ public static boolean dex2oatFlagsLoaded() {
+ try {
+ return LSPManagerServiceClient.dex2oatFlagsLoaded();
+ } catch (Throwable e) {
+ return false;
+ }
+ }
+
public static int startActivityAsUserWithFeature(Intent intent, int userId) {
try {
return LSPManagerServiceClient.startActivityAsUserWithFeature(intent, userId);
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 be4a580f..6775184d 100644
--- a/app/src/main/java/org/lsposed/manager/receivers/LSPManagerServiceClient.java
+++ b/app/src/main/java/org/lsposed/manager/receivers/LSPManagerServiceClient.java
@@ -181,4 +181,9 @@ public class LSPManagerServiceClient {
ensureService();
return service.queryIntentActivitiesAsUser(intent, flags, userId);
}
+
+ public static boolean dex2oatFlagsLoaded() throws RemoteException, NullPointerException {
+ ensureService();
+ return service.dex2oatFlagsLoaded();
+ }
}
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 e57da70e..c6d759ca 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
@@ -61,6 +61,9 @@ public class InfoDialogBuilder extends BlurBehindDialogBuilder {
} 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));
+ } else if (!ConfigManager.dex2oatFlagsLoaded()) {
+ binding.note.setVisibility(View.VISIBLE);
+ binding.note.setText(HtmlCompat.fromHtml(context.getString(R.string.system_prop_incorrect), HtmlCompat.FROM_HTML_MODE_LEGACY));
}
setView(binding.getRoot());
diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java
index d5347e00..7e344b53 100644
--- a/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java
+++ b/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java
@@ -113,6 +113,11 @@ public class HomeFragment extends BaseFragment {
cardBackgroundColor = ResourcesKt.resolveColor(activity.getTheme(), R.attr.colorWarning);
binding.statusIcon.setImageResource(R.drawable.ic_warning);
binding.statusSummary.setText(R.string.system_inject_fail_summary);
+ } else if (!ConfigManager.dex2oatFlagsLoaded()) {
+ binding.statusTitle.setText(R.string.partial_activated);
+ cardBackgroundColor = ResourcesKt.resolveColor(activity.getTheme(), R.attr.colorWarning);
+ binding.statusIcon.setImageResource(R.drawable.ic_warning);
+ binding.statusSummary.setText(R.string.system_prop_incorrect_summary);
} else {
binding.statusTitle.setText(R.string.activated);
cardBackgroundColor = ResourcesKt.resolveColor(activity.getTheme(), R.attr.colorNormal);
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index b25da9bb..09c492e9 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -43,6 +43,8 @@
警告: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 0b48e168..09510aa5 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -43,6 +43,8 @@
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.]]>
+ System prop incorrect
+ WARNING: System prop incorrect.
Some necessary system properties deleted or modified.
Modules may invalidate occasionally.]]>
API version
Framework version
Manager version
diff --git a/build.gradle.kts b/build.gradle.kts
index e17c6a8e..1ecb615a 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -38,7 +38,7 @@ val commitCount = Git(repo).log().add(refId).call().count()
val defaultManagerPackageName by extra("org.lsposed.manager")
val verCode by extra(commitCount + 4200)
-val verName by extra("v1.4.4")
+val verName by extra("v1.4.5")
val androidTargetSdkVersion by extra(30)
val androidMinSdkVersion by extra(27)
val androidBuildToolsVersion by extra("30.0.3")
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 6dba20d4..4d8880db 100644
--- a/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java
+++ b/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java
@@ -32,6 +32,7 @@ import android.content.pm.VersionedPackage;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
+import android.os.SystemProperties;
import android.util.Log;
import org.lsposed.lspd.BuildConfig;
@@ -50,6 +51,9 @@ public class LSPManagerService extends ILSPManagerService.Stub {
public Object guard = null;
+ private static final String PROP_NAME = "dalvik.vm.dex2oat-flags";
+ private static final String PROP_VALUE = "--inline-max-code-units=0";
+
public class ManagerGuard implements IBinder.DeathRecipient {
private final IBinder binder;
private final IServiceConnection connection = new IServiceConnection.Stub() {
@@ -203,7 +207,7 @@ public class LSPManagerService extends ILSPManagerService.Stub {
}
@Override
- public boolean isSepolicyLoaded() throws RemoteException {
+ public boolean isSepolicyLoaded() {
return ConfigManager.getInstance().isSepolicyLoaded();
}
@@ -253,4 +257,12 @@ public class LSPManagerService extends ILSPManagerService.Stub {
public ParceledListSlice queryIntentActivitiesAsUser(Intent intent, int flags, int userId) throws RemoteException {
return PackageService.queryIntentActivities(intent, intent.getType(), flags, userId);
}
+
+ @Override
+ public boolean dex2oatFlagsLoaded() {
+// var splitFlags = new ArrayList<>(Arrays.asList(flags.split(" ")));
+// splitFlags.add(PROP_VALUE);
+// SystemProperties.set(PROP_NAME, String.join(" ", splitFlags));
+ return SystemProperties.get(PROP_NAME).contains(PROP_VALUE);
+ }
}
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 01684e27..e0681bc4 100644
--- a/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl
+++ b/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl
@@ -57,4 +57,6 @@ interface ILSPManagerService {
int startActivityAsUserWithFeature(in Intent intent, int userId) = 30;
ParceledListSlice queryIntentActivitiesAsUser(in Intent intent, int flags, int userId) = 31;
+
+ boolean dex2oatFlagsLoaded() = 32;
}