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