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