diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java index 22a17b32..2dfe36ab 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java @@ -550,9 +550,11 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi if (item.minVersion == 0) { warningText = getString(R.string.no_min_version_specified); } else if (installXposedVersion > 0 && item.minVersion > installXposedVersion) { - warningText = String.format(getString(R.string.warning_xposed_min_version), item.minVersion); + warningText = getString(R.string.warning_xposed_min_version, item.minVersion); + } else if (item.targetVersion > installXposedVersion) { + warningText = getString(R.string.warning_target_version_higher, item.targetVersion); } else if (item.minVersion < ModuleUtil.MIN_MODULE_VERSION) { - warningText = String.format(getString(R.string.warning_min_version_too_low), item.minVersion, ModuleUtil.MIN_MODULE_VERSION); + warningText = getString(R.string.warning_min_version_too_low, item.minVersion, ModuleUtil.MIN_MODULE_VERSION); } else if (item.isInstalledOnExternalStorage()) { warningText = getString(R.string.warning_installed_on_external_storage); } diff --git a/app/src/main/java/org/lsposed/manager/util/ModuleUtil.java b/app/src/main/java/org/lsposed/manager/util/ModuleUtil.java index d4781b23..6ec65b34 100644 --- a/app/src/main/java/org/lsposed/manager/util/ModuleUtil.java +++ b/app/src/main/java/org/lsposed/manager/util/ModuleUtil.java @@ -215,6 +215,7 @@ public final class ModuleUtil { public final String versionName; public final long versionCode; public final int minVersion; + public final int targetVersion; public final long installTime; public final long updateTime; public ApplicationInfo app; @@ -245,6 +246,14 @@ public final class ModuleUtil { } else { this.minVersion = 0; } + Object targetVersionRaw = app.metaData.get("xposedtargetversion"); + if (targetVersionRaw instanceof Integer) { + this.targetVersion = (Integer) targetVersionRaw; + } else if (targetVersionRaw instanceof String) { + this.targetVersion = extractIntPart((String) targetVersionRaw); + } else { + this.targetVersion = this.minVersion; + } } public boolean isInstalledOnExternalStorage() { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 95404860..31462444 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -107,6 +107,7 @@ (no description provided) This module requires a newer Xposed version (%d) and thus cannot be activated + This module is designed for a newer Xposed version (%d) and thus some functionalities may not work This module does not specify the Xposed version it needs. This module was created for Xposed version %1$d, but due to incompatible changes in version %2$d, it has been disabled This module cannot be loaded because it\'s installed on the SD card, please move it to internal storage diff --git a/daemon/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java b/daemon/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java index 3b8ea9a4..75e0aadf 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java @@ -369,15 +369,14 @@ public class ConfigFileManager { var moduleLibraryNames = new ArrayList(1); try (var apkFile = new ZipFile(toGlobalNamespace(path))) { readDexes(apkFile, preLoadedDexes, obfuscate); - // TODO: we can store more info like api version, module description, etc. in META-INF - readName(apkFile, "META-INF/xposed/xposed_init", moduleClassNames); + readName(apkFile, "META-INF/xposed/java_init.list", moduleClassNames); if (moduleClassNames.isEmpty()) { file.legacy = true; readName(apkFile, "assets/xposed_init", moduleClassNames); readName(apkFile, "assets/native_init", moduleLibraryNames); } else { file.legacy = false; - readName(apkFile, "META-INF/xposed/native_init", moduleLibraryNames); + readName(apkFile, "META-INF/xposed/native_init.list", moduleLibraryNames); } } catch (IOException e) { Log.e(TAG, "Can not open " + path, e); diff --git a/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java b/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java index 7268f5c7..a369fac2 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java @@ -769,7 +769,7 @@ public class ConfigManager { return false; } try (var zip = new ZipFile(toGlobalNamespace(apk))) { - return zip.getEntry("META-INF/xposed/xposed_init") != null || zip.getEntry("assets/xposed_init") != null; + return zip.getEntry("META-INF/xposed/java_init.list") != null || zip.getEntry("assets/xposed_init") != null; } catch (IOException e) { return false; }