- Per-application
versionNameand optionalversionCodeoverrides. - Standard Android
PackageManagerhooks. - React Native support for apps using
react-native-device-info. - Dynamic LSPosed scope requests and remote preferences.
- Optional launcher-icon hiding with access through the LSPosed module page.
- No modification or resigning of target APKs.
- Signed, versioned APK releases.
- Android 8.1 or newer.
- LSPosed or another implementation compatible with libxposed API 101.
- The target application included in the module scope.
The configuration app does not request root access or network access.
- Download
AppVersionPatcher.apkfrom the latest release. - Install the APK and enable App Version Patcher in LSPosed.
- Add the intended target applications to the module scope.
- Restart the affected processes, or perform the restart required by your LSPosed implementation.
- Open App Version Patcher and select a target application.
- Enter the desired
versionName. - Optionally enter a
versionCodefrom0through2147483647. - Enable PackageManager, RNDeviceInfo, or both.
- Save the configuration.
- Force-stop and reopen the target application.
Configured applications stay at the top of the list. Existing settings are preserved when the module is updated.
Open the module from LSPosed's Modules page to hide or restore its launcher icon. When hidden, the main configuration remains available through that LSPosed entry.
This setting disables only the launcher's activity alias. It does not uninstall the app, hide the package from package queries, conceal LSPosed injection, or replace a root-concealment setup.
- Software development and QA.
- Compatibility and regression testing.
- Testing version-dependent migrations or feature gates.
- Validating Android and React Native version-reporting behavior.
- Interoperability research in controlled or authorized environments.
- Reproducing version-specific bugs without rebuilding a target APK.
The PackageManager method covers applications that read their version from Android PackageInfo. The RNDeviceInfo method covers React Native applications that use react-native-device-info.
Applications using unrelated libraries, hardcoded values, or exclusively server-side checks may require different hook points.
App Version Patcher does not execute su, alter mount namespaces, change system properties, modify denylist settings, or disable root-concealment tools. Its own hooks only change version values in memory.
However, the target process must receive LSPosed injection for the module to work. Framework injection can itself be detectable, and allowing injection may conflict with a root-concealment policy:
- With Zygisk Next Enforce DenyList, applications in the denylist do not receive Zygisk or LSPosed modules.
- On KernelSU, Unmount Modules is used as the application denylist switch.
- Disabling unmounting to permit injection can leave module mount changes visible to that process.
- Zygisk Next's Unmount Only mode can allow module injection while restoring mount changes, when supported and correctly configured.
These behaviors are controlled by the root and injection framework, not by App Version Patcher. The module cannot guarantee root concealment. Use the smallest necessary scope and test sensitive applications individually.
App Version Patcher is intended for software development, compatibility testing, interoperability research, and other lawful and authorized uses. Users are responsible for ensuring that their use complies with applicable laws, third-party terms, and authorization requirements.
Do not use this software to bypass payment, licensing, access controls, anti-fraud protections, or security mechanisms. The software is provided as-is, without warranty.
See RESPONSIBLE_USE.md for the full project policy.
Each published version receives its own release and tag in the format:
versionCode-versionName
The latest tag is maintained only as a pointer to the newest release commit. Release notes come from CHANGELOG.md.
The public source code is available under the PolyForm Noncommercial License 1.0.0. Commercial use is not granted by the public license. The license and required notice are also included inside the APK.
Commercial licensing may be granted separately through a written agreement with the copyright holder. See COMMERCIAL_LICENSING.md.
Copies of earlier versions already received under the MIT License retain the permissions granted to those copies at the time of distribution.