|
| 1 | +## v5.0 |
| 2 | + |
| 3 | +### Breaking Changes |
| 4 | +- Storage relocated from `/data/misc/usbmassstorage/` to `/data/adb/Usbmanagement/` (auto-migrated on first boot) |
| 5 | +- memfd RAM copy architecture removed — images mount directly from disk with zero memory overhead |
| 6 | + |
| 7 | +### New Features |
| 8 | +- Device reboot button in the main toolbar with confirmation dialog |
| 9 | +- Path-based mount protocol for file:// URIs — daemon opens images directly via `/proc/pid/fd/N` |
| 10 | +- Images of any size now mount instantly regardless of available RAM |
| 11 | +- Import external disk images into managed storage from any file picker |
| 12 | +- Batch stat/blkid queries for image metadata (single shell call instead of 2N) |
| 13 | + |
| 14 | +### Performance |
| 15 | +- R8 full mode enabled — release APK shrunk ~70% via aggressive tree-shaking and class merging |
| 16 | +- Log.d/Log.v calls stripped from release builds via ProGuard rules |
| 17 | +- Baseline profile added for Compose runtime AOT compilation on first install |
| 18 | +- Compose stability configuration for deterministic recomposition skipping |
| 19 | +- All infinite animations migrated to `graphicsLayer` — draw-phase only, zero recomposition overhead |
| 20 | +- Shell.cmd() calls removed from main thread: composition body, onClick handlers, and store operations |
| 21 | +- File I/O in DeviceCard moved to background coroutine with LaunchedEffect |
| 22 | +- SharedPreferences reads wrapped in `remember` to prevent redundant disk access during recomposition |
| 23 | +- enrichWithSize and scanImages batch all shell calls into single scripts |
| 24 | +- Regex instances hoisted to top-level compiled vals across 5 files |
| 25 | +- Keyed LazyColumn items for stable item identity during list mutations |
| 26 | +- `@Stable` annotation on UiState for correct recomposition skipping |
| 27 | +- `configChanges` declared on MainActivity to prevent unnecessary Activity recreation |
| 28 | + |
| 29 | +### Bug Fixes |
| 30 | +- Fixed mixed mount protocol where sequential daemon calls cleared previously mounted devices |
| 31 | +- Fixed enrichWithSize running `java.io.File().length()` as unprivileged app context — now uses root shell |
| 32 | +- Fixed automount config corruption from unchained shell writes (newline vs `&&` join) |
| 33 | +- Fixed restartDaemon not killing parent service.sh loop alongside daemon process |
| 34 | +- DAC traversal fix: `/data/adb/` mode 700 blocked daemon — added `chmod o+x` in service.sh |
| 35 | +- Tightened `system_data_file` SELinux permissions — removed stale write/create from old storage path |
| 36 | +- Added `adb_data_file` rules to runtime SELinux patcher for storage migration |
| 37 | +- Added `untrusted_app fd use` and `shell_data_file read` to KSU rules |
| 38 | + |
| 39 | +### Module |
| 40 | +- Full storage migration with backward-compatible path detection on first boot |
| 41 | +- Old `/data/misc/usbmassstorage/` directory removed after successful migration |
| 42 | +- Gadget backup, automount config, and boot counter relocated to `/data/adb/Usbmanagement/` |
| 43 | +- Expanded SELinux policy for kernel→adb_data_file read access |
| 44 | +- Uninstall script updated for new data directory cleanup |
| 45 | + |
1 | 46 | ## v4.0 |
2 | 47 |
|
3 | 48 | - One-shot create, format, and mount pipeline for streamlined disk setup |
|
0 commit comments