Skip to content

feat: Apply patches from multiple patch bundles, add GUI patch source selector #145

Merged
LisoUseInAIKyrios merged 17 commits into
MorpheApp:devfrom
prateek-who:differnet-patche-source-unification
May 20, 2026
Merged

feat: Apply patches from multiple patch bundles, add GUI patch source selector #145
LisoUseInAIKyrios merged 17 commits into
MorpheApp:devfrom
prateek-who:differnet-patche-source-unification

Conversation

@prateek-who
Copy link
Copy Markdown
Contributor

  • Multiple patch sources are now visible together.
  • Patch sources moves out of settings and into it's own separate place
  • Other minor UI improvements in settings dialog

@prateek-who
Copy link
Copy Markdown
Contributor Author

Liso, see how this feels. Although I like the source pill at the top of the home screen because it is minimal and clean, it looks a bit empty I feel. But what do you think? Please drop any suggestions that you feel could make this look better?

@LisoUseInAIKyrios
Copy link
Copy Markdown
Contributor

I think the pill at the top looks good. It seems the patch source is not selectable when expert mode is off.

I think the "drop apk here" could be a smaller area so more of the app list is visible.

This is a significant change (for the better) because multiple patch sources now works. Does it also work with CLI console? If not then we could add support there too. The CLI patch arguments must be positional relative to the --patches declaration, because different patch bundles can have the same patch names/options so --enable and other parameters always apply to the last --patches argument up to that point.

@LisoUseInAIKyrios LisoUseInAIKyrios changed the title feat: multi patch source unification feat: Apply patches from multiple patch bundles May 10, 2026
@LisoUseInAIKyrios LisoUseInAIKyrios changed the title feat: Apply patches from multiple patch bundles feat: Apply patches from multiple patch bundles, add GUI patch source selector May 10, 2026
@prateek-who
Copy link
Copy Markdown
Contributor Author

  1. Do we allow the non-expert mode to select different patch sources? I thought we could restrict that mode to only allow the default patch source, but if you feel it's better we allow multiple, then I'll make it the same as expert mode.
  2. Sure thing, I'll reduce the size of that apk drop zone. One other thing we could do is have the drop apk zone on the left side of the screen and show the supported apps on the right side (dropping apk anywhere on the screen works, it's just to show that zone). What do you think of this idea?
  3. Nope, CLI doesn't have it yet. Will add it now and follow the positional approach.

@LisoUseInAIKyrios
Copy link
Copy Markdown
Contributor

I think a drop zone on the right would be ok, since picking the app is usually the first step then dropping the apk is second step.

Non expert mode could allow patching from a single source (any source), while expert mode allows combining patches from multiple patch sources. This is same behavior as Manager.

@prateek-who
Copy link
Copy Markdown
Contributor Author

  • Overhaul the expert mode home screen
  • Added new theme (Deepspace)
  • Non-expert mode now allows to select a single patch source, following the manager's style.

See how this runs and feels. CLI still needs work. Will start that once you feel the GUI feels right.

…e-unification

# Conflicts:
#	src/main/kotlin/app/morphe/gui/ui/components/SettingsDialog.kt
@LisoUseInAIKyrios
Copy link
Copy Markdown
Contributor

The GUI looks great.

Can the drop zone be moved to the right of the app selection? I think it may feel more natural since a wizard style flow usually navigated left to right.

Otherwise I think is ready.

@prateek-who
Copy link
Copy Markdown
Contributor Author

Now see how this feels. Please tell me if something feels off.

@prateek-who
Copy link
Copy Markdown
Contributor Author

I made a small mistake here. In the headspace of wanting to push this out on the gui, I forgot that the gui and the cli just need to act like wrappers pretty much and the main logic should be centralized. Will fix this now.

@LisoUseInAIKyrios
Copy link
Copy Markdown
Contributor

The UI looks fantastic. I have no suggestions to improve it.

CLI logging now matches the GUI logging style.
CLI can now do multiple patch file patching. (Logic is unified in PatchEngine)
CLI can now also download patches from GitLab. (Logic is unified in PatchEngine)
@prateek-who
Copy link
Copy Markdown
Contributor Author

See how both the cli and gui feel now. I've made some minor changes to the gui's PatchSelectionScreen where the patches are grouped by their authors. See if it looks good. I've done minor testing on the cli and it seemed to work fine but a through testing would be good before the merge.

@LisoUseInAIKyrios
Copy link
Copy Markdown
Contributor

CLI works great.

java -Xms1024m -jar morphe-cli*-all.jar patch --patches patches.mpp -e "Disable Play Store updates" --patches other.mpp app.apk

Gives the third party app with Morphe universal patch.

The mention of how to use multiple patches can be restored now that it works:

You can also use multiple MPP files:
```bash
java -jar morphe-cli.jar patch -p patches.mpp -p another-patches.mpp input.apk
```

@LisoUseInAIKyrios
Copy link
Copy Markdown
Contributor

If an APKM is dragged into the GUI in simple mode then a file dialog window opens. Does not happen in expert mode.

I think there's a data migration glitch, because when I first opened the GUI and tried to patch it kept giving an error. The settings signing keystore had a value I could not clear or reset.

The logs give little clue what went wrong:

[INFO ] Loaded 5 patches for com.myfitnesspal.android
[INFO ] Loaded 3 patches for com.myfitnesspal.android
[INFO ] Loaded 2 bundle(s), 8 total patches for com.myfitnesspal.android
[INFO ] Found 1 device(s)
[INFO ] Found 1 device(s)
[INFO ] Saved patch preferences for Morphe Patches / com.myfitnesspal.android (3 entries)
[INFO ] Saved patch preferences for Hoo-dles / com.myfitnesspal.android (5 entries)
[INFO ] Found 1 device(s)
[INFO ] Found 1 device(s)
[INFO ] Found 1 device(s)
[INFO ] Found 1 device(s)
[INFO ] Found 1 device(s)
[ERROR] Patching failed: []
[INFO ] Found 1 device(s)

I cleared the CLI app data, and now it's working again. Try using the old version of the GUI (dev branch), then change to this branch and maybe the error will reproduce.

@LisoUseInAIKyrios

This comment was marked as resolved.

@prateek-who
Copy link
Copy Markdown
Contributor Author

If an APKM is dragged into the GUI in simple mode then a file dialog window opens. Does not happen in expert mode.

I think there's a data migration glitch, because when I first opened the GUI and tried to patch it kept giving an error. The settings signing keystore had a value I could not clear or reset.

The logs give little clue what went wrong:

[INFO ] Loaded 5 patches for com.myfitnesspal.android
[INFO ] Loaded 3 patches for com.myfitnesspal.android
[INFO ] Loaded 2 bundle(s), 8 total patches for com.myfitnesspal.android
[INFO ] Found 1 device(s)
[INFO ] Found 1 device(s)
[INFO ] Saved patch preferences for Morphe Patches / com.myfitnesspal.android (3 entries)
[INFO ] Saved patch preferences for Hoo-dles / com.myfitnesspal.android (5 entries)
[INFO ] Found 1 device(s)
[INFO ] Found 1 device(s)
[INFO ] Found 1 device(s)
[INFO ] Found 1 device(s)
[INFO ] Found 1 device(s)
[ERROR] Patching failed: []
[INFO ] Found 1 device(s)

I cleared the CLI app data, and now it's working again. Try using the old version of the GUI (dev branch), then change to this branch and maybe the error will reproduce.

will check this out

@prateek-who

This comment was marked as resolved.

@LisoUseInAIKyrios

This comment was marked as resolved.

@prateek-who
Copy link
Copy Markdown
Contributor Author

ahh perfect then. There seems to be one more issue from my previous update. The latest patch file version for all the patch sources seem to be bug out and show "Select" button even thought they are not downloaded and should show "Download". Will check and fix this too.

We no longer use AppData and other OS equivalent for mostly anything.
@prateek-who
Copy link
Copy Markdown
Contributor Author

I've unified the data location too. See how this feels. We should no longer be using AppData for anything. Purge also only clears that session's data. So, CLI won't end up deleting GUI's data and stuff. If you feel we should make changes to any of that, then tell me and I'll make the changes. This should be good otherwise.

Custom snackbar improvements and unification.
Removed apk-parser. Arsclib used for parsing dropped file now.
Added in-app log viewer in the patching screen incase patching fails.
Post-patching errors are now actually shown instead of being ignore.
Keystores have been unified. We would previously fail if a keystore was not found. Now we generate a common keystore for all apps instead of creating new ones again. If a user provides a keystore, only then we fail loudly.
@LisoUseInAIKyrios
Copy link
Copy Markdown
Contributor

Looks great.

Just say when to merge.

Comment thread src/main/kotlin/app/morphe/gui/ui/components/SettingsButton.kt
@prateek-who
Copy link
Copy Markdown
Contributor Author

@FibreTTP Try this now.

@FibreTTP
Copy link
Copy Markdown

@prateek-who

Thanks for all your work! Everything works well.

@prateek-who
Copy link
Copy Markdown
Contributor Author

@LisoUseInAIKyrios Have one final look, everything is good to go!

@LisoUseInAIKyrios LisoUseInAIKyrios merged commit 44ed6c6 into MorpheApp:dev May 20, 2026
3 checks passed
github-actions Bot pushed a commit that referenced this pull request May 20, 2026
# [1.9.0-dev.2](v1.9.0-dev.1...v1.9.0-dev.2) (2026-05-20)

### Features

* Apply patches from multiple patch bundles, add GUI patch source selector  ([#145](#145)) ([44ed6c6](44ed6c6))
@prateek-who prateek-who deleted the differnet-patche-source-unification branch May 20, 2026 08:56
github-actions Bot pushed a commit to ddCeka/morphe-cli that referenced this pull request May 22, 2026
# [1.8.0-dev.1](v1.7.0...v1.8.0-dev.1) (2026-05-22)

### Bug Fixes

* ARSCLib libraries are excluded during minimization ([2714ab5](2714ab5))
* ARSCLib libraries are not included in minimized fat jar ([5dce038](5dce038))
* continue-on-error fix + force windows to `FULL` ([MorpheApp#120](https://github.com/ddCeka/morphe-cli/issues/120)) ([036faba](036faba))
* Include Notice and License files in shadow jar release ([MorpheApp#113](https://github.com/ddCeka/morphe-cli/issues/113)) ([a9a2402](a9a2402))
* Re-enable strip libs feature ([MorpheApp#117](https://github.com/ddCeka/morphe-cli/issues/117)) ([6d2bb94](6d2bb94))
* Update to latest patcher ([a0bea3d](a0bea3d))
* Update to latest patcher ([efd0cf1](efd0cf1))
* Update to patcher 1.5.1 ([d7c5036](d7c5036))

### Features

* Add in-app dependency license viewer ([MorpheApp#114](https://github.com/ddCeka/morphe-cli/issues/114)) ([77a1dde](77a1dde))
* Add search function to license viewer ([MorpheApp#124](https://github.com/ddCeka/morphe-cli/issues/124)) ([d3d9feb](d3d9feb))
* Add setting menu to save patched app crash logs to file ([MorpheApp#143](https://github.com/ddCeka/morphe-cli/issues/143)) ([90836b5](90836b5))
* Apply patches from multiple patch bundles, add GUI patch source selector  ([MorpheApp#145](https://github.com/ddCeka/morphe-cli/issues/145)) ([44ed6c6](44ed6c6))
* Custom output path + better GUI scrollbars ([MorpheApp#127](https://github.com/ddCeka/morphe-cli/issues/127)) ([70e2721](70e2721))
* Faster dex rebuilding + reduced memory requirements  ([MorpheApp#108](https://github.com/ddCeka/morphe-cli/issues/108)) ([ed8918e](ed8918e))
* Support GitHub repo urls with `--patches` argument ([MorpheApp#71](https://github.com/ddCeka/morphe-cli/issues/71)) ([2cc09a9](2cc09a9))
* UI improvements and fixes ([MorpheApp#128](https://github.com/ddCeka/morphe-cli/issues/128)) ([980ebac](980ebac))
github-actions Bot pushed a commit to ddCeka/morphe-cli that referenced this pull request May 22, 2026
# [1.8.0-dev.1](v1.7.0...v1.8.0-dev.1) (2026-05-22)

### Bug Fixes

* ARSCLib libraries are excluded during minimization ([2714ab5](2714ab5))
* ARSCLib libraries are not included in minimized fat jar ([5dce038](5dce038))
* continue-on-error fix + force windows to `FULL` ([MorpheApp#120](https://github.com/ddCeka/morphe-cli/issues/120)) ([036faba](036faba))
* Include Notice and License files in shadow jar release ([MorpheApp#113](https://github.com/ddCeka/morphe-cli/issues/113)) ([a9a2402](a9a2402))
* Re-enable strip libs feature ([MorpheApp#117](https://github.com/ddCeka/morphe-cli/issues/117)) ([6d2bb94](6d2bb94))
* Update to latest patcher ([a0bea3d](a0bea3d))
* Update to latest patcher ([efd0cf1](efd0cf1))
* Update to patcher 1.5.1 ([d7c5036](d7c5036))

### Features

* Add in-app dependency license viewer ([MorpheApp#114](https://github.com/ddCeka/morphe-cli/issues/114)) ([77a1dde](77a1dde))
* Add search function to license viewer ([MorpheApp#124](https://github.com/ddCeka/morphe-cli/issues/124)) ([d3d9feb](d3d9feb))
* Add setting menu to save patched app crash logs to file ([MorpheApp#143](https://github.com/ddCeka/morphe-cli/issues/143)) ([90836b5](90836b5))
* Apply patches from multiple patch bundles, add GUI patch source selector  ([MorpheApp#145](https://github.com/ddCeka/morphe-cli/issues/145)) ([44ed6c6](44ed6c6))
* Custom output path + better GUI scrollbars ([MorpheApp#127](https://github.com/ddCeka/morphe-cli/issues/127)) ([70e2721](70e2721))
* Faster dex rebuilding + reduced memory requirements  ([MorpheApp#108](https://github.com/ddCeka/morphe-cli/issues/108)) ([ed8918e](ed8918e))
* Support GitHub repo urls with `--patches` argument ([MorpheApp#71](https://github.com/ddCeka/morphe-cli/issues/71)) ([2cc09a9](2cc09a9))
* UI improvements and fixes ([MorpheApp#128](https://github.com/ddCeka/morphe-cli/issues/128)) ([980ebac](980ebac))
github-actions Bot pushed a commit to ddCeka/morphe-cli that referenced this pull request May 22, 2026
# [1.8.0-dev.1](v1.7.0...v1.8.0-dev.1) (2026-05-22)

### Bug Fixes

* ARSCLib libraries are excluded during minimization ([2714ab5](2714ab5))
* ARSCLib libraries are not included in minimized fat jar ([5dce038](5dce038))
* continue-on-error fix + force windows to `FULL` ([MorpheApp#120](https://github.com/ddCeka/morphe-cli/issues/120)) ([036faba](036faba))
* Include Notice and License files in shadow jar release ([MorpheApp#113](https://github.com/ddCeka/morphe-cli/issues/113)) ([a9a2402](a9a2402))
* Re-enable strip libs feature ([MorpheApp#117](https://github.com/ddCeka/morphe-cli/issues/117)) ([6d2bb94](6d2bb94))
* Update to latest patcher ([a0bea3d](a0bea3d))
* Update to latest patcher ([efd0cf1](efd0cf1))
* Update to patcher 1.5.1 ([d7c5036](d7c5036))

### Features

* Add in-app dependency license viewer ([MorpheApp#114](https://github.com/ddCeka/morphe-cli/issues/114)) ([77a1dde](77a1dde))
* Add search function to license viewer ([MorpheApp#124](https://github.com/ddCeka/morphe-cli/issues/124)) ([d3d9feb](d3d9feb))
* Add setting menu to save patched app crash logs to file ([MorpheApp#143](https://github.com/ddCeka/morphe-cli/issues/143)) ([90836b5](90836b5))
* Apply patches from multiple patch bundles, add GUI patch source selector  ([MorpheApp#145](https://github.com/ddCeka/morphe-cli/issues/145)) ([44ed6c6](44ed6c6))
* Custom output path + better GUI scrollbars ([MorpheApp#127](https://github.com/ddCeka/morphe-cli/issues/127)) ([70e2721](70e2721))
* Faster dex rebuilding + reduced memory requirements  ([MorpheApp#108](https://github.com/ddCeka/morphe-cli/issues/108)) ([ed8918e](ed8918e))
* Support GitHub repo urls with `--patches` argument ([MorpheApp#71](https://github.com/ddCeka/morphe-cli/issues/71)) ([2cc09a9](2cc09a9))
* UI improvements and fixes ([MorpheApp#128](https://github.com/ddCeka/morphe-cli/issues/128)) ([980ebac](980ebac))
github-actions Bot pushed a commit to ddCeka/morphe-cli that referenced this pull request May 22, 2026
# [1.8.0-dev.1](v1.7.0...v1.8.0-dev.1) (2026-05-22)

### Bug Fixes

* ARSCLib libraries are excluded during minimization ([2714ab5](2714ab5))
* ARSCLib libraries are not included in minimized fat jar ([5dce038](5dce038))
* continue-on-error fix + force windows to `FULL` ([MorpheApp#120](https://github.com/ddCeka/morphe-cli/issues/120)) ([036faba](036faba))
* Include Notice and License files in shadow jar release ([MorpheApp#113](https://github.com/ddCeka/morphe-cli/issues/113)) ([a9a2402](a9a2402))
* Re-enable strip libs feature ([MorpheApp#117](https://github.com/ddCeka/morphe-cli/issues/117)) ([6d2bb94](6d2bb94))
* Update to latest patcher ([a0bea3d](a0bea3d))
* Update to latest patcher ([efd0cf1](efd0cf1))
* Update to patcher 1.5.1 ([d7c5036](d7c5036))

### Features

* Add in-app dependency license viewer ([MorpheApp#114](https://github.com/ddCeka/morphe-cli/issues/114)) ([77a1dde](77a1dde))
* Add search function to license viewer ([MorpheApp#124](https://github.com/ddCeka/morphe-cli/issues/124)) ([d3d9feb](d3d9feb))
* Add setting menu to save patched app crash logs to file ([MorpheApp#143](https://github.com/ddCeka/morphe-cli/issues/143)) ([90836b5](90836b5))
* Apply patches from multiple patch bundles, add GUI patch source selector  ([MorpheApp#145](https://github.com/ddCeka/morphe-cli/issues/145)) ([44ed6c6](44ed6c6))
* Custom output path + better GUI scrollbars ([MorpheApp#127](https://github.com/ddCeka/morphe-cli/issues/127)) ([70e2721](70e2721))
* Faster dex rebuilding + reduced memory requirements  ([MorpheApp#108](https://github.com/ddCeka/morphe-cli/issues/108)) ([ed8918e](ed8918e))
* Support GitHub repo urls with `--patches` argument ([MorpheApp#71](https://github.com/ddCeka/morphe-cli/issues/71)) ([2cc09a9](2cc09a9))
* UI improvements and fixes ([MorpheApp#128](https://github.com/ddCeka/morphe-cli/issues/128)) ([980ebac](980ebac))
github-actions Bot pushed a commit to ddCeka/morphe-cli that referenced this pull request May 22, 2026
# [1.8.0-dev.1](v1.7.0...v1.8.0-dev.1) (2026-05-22)

### Bug Fixes

* ARSCLib libraries are excluded during minimization ([2714ab5](2714ab5))
* ARSCLib libraries are not included in minimized fat jar ([5dce038](5dce038))
* continue-on-error fix + force windows to `FULL` ([MorpheApp#120](https://github.com/ddCeka/morphe-cli/issues/120)) ([036faba](036faba))
* Include Notice and License files in shadow jar release ([MorpheApp#113](https://github.com/ddCeka/morphe-cli/issues/113)) ([a9a2402](a9a2402))
* Re-enable strip libs feature ([MorpheApp#117](https://github.com/ddCeka/morphe-cli/issues/117)) ([6d2bb94](6d2bb94))
* Update to latest patcher ([a0bea3d](a0bea3d))
* Update to latest patcher ([efd0cf1](efd0cf1))
* Update to patcher 1.5.1 ([d7c5036](d7c5036))

### Features

* Add in-app dependency license viewer ([MorpheApp#114](https://github.com/ddCeka/morphe-cli/issues/114)) ([77a1dde](77a1dde))
* Add search function to license viewer ([MorpheApp#124](https://github.com/ddCeka/morphe-cli/issues/124)) ([d3d9feb](d3d9feb))
* Add setting menu to save patched app crash logs to file ([MorpheApp#143](https://github.com/ddCeka/morphe-cli/issues/143)) ([90836b5](90836b5))
* Apply patches from multiple patch bundles, add GUI patch source selector  ([MorpheApp#145](https://github.com/ddCeka/morphe-cli/issues/145)) ([44ed6c6](44ed6c6))
* Custom output path + better GUI scrollbars ([MorpheApp#127](https://github.com/ddCeka/morphe-cli/issues/127)) ([70e2721](70e2721))
* Faster dex rebuilding + reduced memory requirements  ([MorpheApp#108](https://github.com/ddCeka/morphe-cli/issues/108)) ([ed8918e](ed8918e))
* Support GitHub repo urls with `--patches` argument ([MorpheApp#71](https://github.com/ddCeka/morphe-cli/issues/71)) ([2cc09a9](2cc09a9))
* UI improvements and fixes ([MorpheApp#128](https://github.com/ddCeka/morphe-cli/issues/128)) ([980ebac](980ebac))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: Support for Gitlab Patches links bug: Cannot patch APKM (Failed to parse APK manifest) feat: Portable GUI config directory

3 participants