Skip to content

Commit 30f7288

Browse files
committed
chore(release): bump to v5.0 and update changelog
Major release marking the transition from memfd RAM-copy architecture to direct file access, a full frontend performance overhaul, and storage migration to /data/adb. - Bump version to v5.0 (versionCode 500) - Add comprehensive v5.0 changelog covering breaking changes, new features, performance improvements, and bug fixes - CI workflow: add --no-daemon flag for Gradle in CI environments - CI workflow: add R8 size verification step on release builds to catch regressions in APK shrinking effectiveness
1 parent bb95b5c commit 30f7288

3 files changed

Lines changed: 59 additions & 4 deletions

File tree

.github/workflows/build.yml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,16 +68,26 @@ jobs:
6868
- name: Build APK (${{ matrix.profile }})
6969
run: |
7070
if [ "$PROFILE" = "release" ]; then
71-
./gradlew assembleRelease
71+
./gradlew assembleRelease --no-daemon
7272
else
73-
./gradlew assembleDebug
73+
./gradlew assembleDebug --no-daemon
7474
fi
7575
env:
7676
PROFILE: ${{ matrix.profile }}
7777
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
7878
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
7979
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
8080

81+
- name: Verify R8 shrinking (release only)
82+
if: matrix.profile == 'release'
83+
run: |
84+
APK="app/build/outputs/apk/release/app-release.apk"
85+
SIZE=$(stat -c%s "$APK")
86+
echo "Release APK size: $((SIZE / 1024)) KB"
87+
if [ "$SIZE" -gt 10485760 ]; then
88+
echo "::warning::Release APK exceeds 10MB — R8 shrinking may not be effective"
89+
fi
90+
8191
- uses: actions/upload-artifact@v4
8292
with:
8393
name: apk-${{ matrix.profile }}

CHANGELOG.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,48 @@
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+
146
## v4.0
247

348
- One-shot create, format, and mount pipeline for streamlined disk setup

module/module.prop

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
id=usbmassstorage
22
name=USB Mass Storage
3-
version=v4.0
4-
versionCode=400
3+
version=v5.0
4+
versionCode=500
55
author=Enginex0
66
description=💾 USB Mass Storage gadget controller · Turn your phone into a USB drive · KernelSU / Magisk / APatch
77
banner=banner.png

0 commit comments

Comments
 (0)