Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
211 commits
Select commit Hold shift + click to select a range
685fd89
add NoRoot kernel for XiaomiPad8Pro & Xiaomi 15 (#182)
404-GCross Jun 5, 2026
b697ef1
selinux: unify daemon domains, simplify dyntransition API
ravindu644 Jun 5, 2026
20ed69c
pulseaudio: fix mainloop deadlock on Android
ravindu644 Jun 5, 2026
4f1ce67
scripts: add setup-termux.sh script to install Termux-X11, VirGL depe…
ravindu644 Jun 5, 2026
5c3ff5f
scripts: setup-termux.sh: nuked termux-specific checks
ravindu644 Jun 5, 2026
5d0aebb
terminal: disable OPOST/ONLCR on host PTY for transparent TUI passthr…
ravindu644 Jun 5, 2026
9901f05
terminal: make TIOCSPTLCK best-effort for kernel 4.9 compat
ravindu644 Jun 5, 2026
d5ba163
daemon: signalfd for SIGCHLD/SIGWINCH, fix poll probe, shrink cmdline…
ravindu644 Jun 5, 2026
8151467
pid: replace 4x check_*_needs() with generic ds_feature_needs()
ravindu644 Jun 5, 2026
b641c24
config: add ds_config_free() to unify free_config_binds/env_vars/unkn…
ravindu644 Jun 5, 2026
09483d3
utils: add ds_global_daemon_stop/ds_resolve_daemon_pid, unify 3 stop fns
ravindu644 Jun 5, 2026
d0a7611
src: reorganize into android/, net/, and include/ subdirs
ravindu644 Jun 5, 2026
bb7871c
container: support NixOS su path (#185)
Akimitsu333 Jun 6, 2026
b672a23
updated gitignore
ravindu644 Jun 6, 2026
c49daea
refactor: remove PulseAudio default.pa patching in favor of clearing …
ravindu644 Jun 6, 2026
e7a8ed5
Translated using Weblate (Chinese (Traditional Han script)) (#188)
weblate Jun 6, 2026
8c891c6
Add OnePlus 7 Pro (guacamole) to community-supported devices (#186)
charan-gn Jun 6, 2026
7524efa
pulseaudio: fix OpenSL ES and suspend-on-idle hang on Samsung
ravindu644 Jun 6, 2026
4d25c6c
chore: remove Chinese feature request template and enforce English-on…
ravindu644 Jun 6, 2026
c2c7cb9
app: ContainersScreen: collapse drawer before action callbacks
ravindu644 Jun 6, 2026
016e744
main: unified root gate before config/scan execution
ravindu644 Jun 6, 2026
a3278f1
Makefile: fix missing -I include/src path in debug-hardened target
ravindu644 Jun 6, 2026
700f751
daemon: fix PTY input deadlock and backpressure on large paste
ravindu644 Jun 6, 2026
0aa6dcd
Add More Wild Kernels OnePlus Kernel Variants (#192)
fatalcoder524 Jun 7, 2026
b8729bf
docs: bold all OnePlus device names in community-supported-devices table
ravindu644 Jun 7, 2026
d9af43e
build: prepare in-house BusyBox for WebUI daemon (#191)
yoshi3jp Jun 7, 2026
b6a3e41
requirements: add Termux requirements section with curl codebox
ravindu644 Jun 7, 2026
5c1355d
post_extract_fixes: always generate a machine ID regardless of alread…
ravindu644 Jun 7, 2026
de132d3
fix: wakelock now requests battery optimization exemption
ravindu644 Jun 8, 2026
4b521a2
Add connection timeout settings for socketd (#193)
yoshi3jp Jun 8, 2026
be467a5
Move socketd and WebUI out-of-tree (#194)
yoshi3jp Jun 8, 2026
d8a53f9
docs: unify GPU, audio, and DE autoboot into Graphics-and-Audio guide
ravindu644 Jun 10, 2026
605d31d
docs: reorganize README and README_CN structure
ravindu644 Jun 10, 2026
e52bac0
droidspaces: bump v6.3.0
ravindu644 Jun 8, 2026
cd95a6f
Translated using Weblate (#195)
weblate Jun 10, 2026
d41368e
Net: Virtual router support (#196)
yoshi3jp Jun 10, 2026
a5bc2cd
Makefile: add make format target to automate clang-format on source f…
ravindu644 Jun 10, 2026
61d400a
clang-format all the source files
ravindu644 Jun 10, 2026
6cf898a
docs: add Networking-From-Zero conceptual guide for gateway mode
ravindu644 Jun 10, 2026
90a53f6
submodules: updated socketd & webui
ravindu644 Jun 10, 2026
c2a1c09
updated gitignore
ravindu644 Jun 10, 2026
81b02fa
net: remove --upstream entirely, detect the internet uplink automatic…
ravindu644 Jun 11, 2026
c29524b
netlink: fix netd default-network rule never matching in RTM_GETRULE …
ravindu644 Jun 11, 2026
899b1ae
updated .gitignore and submodules
ravindu644 Jun 11, 2026
4184d97
net: fix port forwards being unreachable from hotspot/USB-tether clients
ravindu644 Jun 11, 2026
db90b9a
feat: add auto-boot priority ordering for gateway networking mode
ravindu644 Jun 13, 2026
ef6bcb5
feat: add gateway networking mode to installer and edit screens
ravindu644 Jun 13, 2026
f0c2bf5
fix: smooth network-mode switching, single static divider above DNS
ravindu644 Jun 13, 2026
bd65799
net: tear down idle gateway bridge and veth on last client exit
ravindu644 Jun 13, 2026
fc2dbda
config: load running container's booted snapshot, not the host copy
ravindu644 Jun 13, 2026
0ebd06f
net: unify /etc/resolv.conf wiring, fix gateway-mode DNS
ravindu644 Jun 13, 2026
20c6dbc
post_extract_fixes: allow network services to start in gateway mode
ravindu644 Jun 13, 2026
4457dc4
net: keep gateway veth alive on last client exit, reap only the bridge
ravindu644 Jun 13, 2026
c09e941
net: pin container eth0 to a deterministic MAC from its name
ravindu644 Jun 13, 2026
977f0e8
Translated using Weblate (#200)
weblate Jun 13, 2026
a72fec3
Add Droidspaces support for Redmi note 7 pro (violet) (#202)
subhu2008 Jun 14, 2026
7b7213b
android: add OpenWrt procd service management (#203)
yoshi3jp Jun 14, 2026
75ed0b5
Translated using Weblate (Chinese (Traditional Han script)) (#204)
weblate Jun 15, 2026
310abb5
build: add Debian package artifact generation (#206)
yoshi3jp Jun 15, 2026
802c933
docs: add TB520FU (Yoga Tab Plus ROW ZUI 17.5.10.096) to community-su…
da-ai-xian-zun Jun 16, 2026
204e7e9
Translated using Weblate (Chinese (Simplified Han script)) (#208)
weblate Jun 16, 2026
9d6b861
app: trim and collapse whitespace in container names
ravindu644 Jun 17, 2026
e31a047
docs: document non-root GPU access for Turnip
ravindu644 Jun 17, 2026
76cbd21
app: center tab empty/error states above the floating bar
ravindu644 Jun 17, 2026
5c7066f
selinux: fix permission denied when read/write mounted storage
ravindu644 Jun 24, 2026
cbfcd47
Translated using Weblate (Indonesian) (#212)
weblate Jun 24, 2026
7a268e9
update Simplify Chinese translation (#219)
404-GCross Jun 24, 2026
80f687f
app: show rootfs.img disk usage on sparse container details
ravindu644 Jun 24, 2026
d4e518c
Documentation: Updated community-supported-devices.md to bring 1 new …
GarryStraitYT Jun 27, 2026
bc6c536
docs: remove garbled characters from the Android installation guide (…
Jesse205 Jun 28, 2026
4206f21
Added translation using Weblate (Tamil) (#221)
weblate Jun 28, 2026
ea1c703
Update translation files (#224)
weblate Jun 29, 2026
901502d
net: self-heal delegated-LAN clients when the gateway (re)boots
ravindu644 Jun 29, 2026
d035ce8
mount: don't force a full e2fsck on every container start
ravindu644 Jun 29, 2026
f702611
net: add --upstream to pin NAT WAN to specific interface(s)
ravindu644 Jun 29, 2026
9ac6ed3
net: re-assert ip_forward on every platform, not just Android
ravindu644 Jun 30, 2026
371ffd8
app: block back gesture on backend install screen, force Continue button
ravindu644 Jun 30, 2026
f30f467
net: dedupe NAT/gateway helpers (iptables ACCEPT, MAC, link up/down)
ravindu644 Jun 30, 2026
2dfdf89
net: log decoded target name instead of '' for standard verdicts
ravindu644 Jun 30, 2026
e876f99
net: fix DHCP source MAC for bridgeless NAT; harden gateway on no-bri…
ravindu644 Jun 30, 2026
06b1378
app: fix Panel tab polling not resuming after returning from background
ravindu644 Jun 30, 2026
c7c6296
app: drop unused host systemUsage polling and its collector
ravindu644 Jun 30, 2026
e50ebe8
docs: document gateway mode, automatic uplink monitor, and --upstream…
ravindu644 Jun 30, 2026
c4129eb
docs: cover gateway mode and --upstream pinning in built-in help
ravindu644 Jun 30, 2026
d9e6938
docs: link Networking From Zero guide in README
ravindu644 Jun 30, 2026
9e738a8
net: heal stale gateway cable when its peer outlives the gateway netns
ravindu644 Jun 30, 2026
8510a02
net: explicitly reap gateway veth on gateway stop to free orphan netns
ravindu644 Jun 30, 2026
39dbbdf
net: wire gateway clients before unblocking gateway init
ravindu644 Jul 1, 2026
7957014
mount: force image rootfs read-write before pivot_root
ravindu644 Jul 1, 2026
5f5c613
docs: Add Galaxy A15 4G (sma155f) to GKI support list (#225)
poqdavid Jul 1, 2026
ac346ff
ci: remove redundant run-name configuration from CI workflow
ravindu644 Jul 1, 2026
fe67da3
ci: name CI apk Droidspaces-universal-CI-<commit>.apk
ravindu644 Jul 1, 2026
35c6dd4
build: name tarball with commit hash instead of date
ravindu644 Jul 1, 2026
da001f9
change: chkopenrc.sh to use rc-status for checking of running service…
abd3-13 Jul 4, 2026
7612af0
droidspaces: bump v6.4.0
ravindu644 Jul 4, 2026
800d57c
Update bugreport.sh (#227)
abd3-13 Jul 4, 2026
3134eea
app: disable save/proceed button on static IP collision
ravindu644 Jul 9, 2026
a350154
feat(ui): support AMOLED mode with system theme and preserve selectio…
VizXtreme Jul 12, 2026
58690ea
Update community-supported-devices.md (#233)
vitaliylysikov Jul 12, 2026
7c99ccc
ci: include branch name in CI build status notification
ravindu644 Jul 9, 2026
41e164e
RequirementsScreen, docs: added `CONFIG_USER_NS` for the Docker unsaf…
ravindu644 Jul 13, 2026
455f4ec
ported the "Allow User Namespaces" feature from the `anland` branch
superturtlee Jul 9, 2026
997066f
net: add localhost DNAT to port-forward path; watch route_localnet
ravindu644 Jul 13, 2026
03d2e09
Translated using Weblate (Chinese (Simplified Han script)) (#235)
weblate Jul 15, 2026
a512b18
app: add missing userns toggle to container installer + summary
ravindu644 Jul 15, 2026
6e45123
net: dedup upstream interfaces on parse
ravindu644 Jul 15, 2026
2a782aa
UI Refinement (#236)
VizXtreme Jul 15, 2026
e9b2842
app: fix: sync About dialog width to match Resize dialog
ravindu644 Jul 16, 2026
c3fd619
app: bold container name + type-to-confirm gate on uninstall dialog
ravindu644 Jul 16, 2026
fe509af
ci: cache toolchains, fix author/event, add sha link
ravindu644 Jul 16, 2026
b3efef4
Translated using Weblate (Chinese (Traditional Han script)) (#237)
weblate Jul 16, 2026
410cbee
Translated using Weblate (Chinese (Traditional Han script), Spanish) …
weblate Jul 17, 2026
937053f
ci: do not cache toolchains
ravindu644 Jul 17, 2026
1890424
droidspaces: bump v6.4.5
ravindu644 Jul 17, 2026
37d7154
feat(ui): Swipe to switch between home, containers, and control panel…
VizXtreme Jul 17, 2026
12859a9
Add POCO F6 / Redmi Turbo 3 (peridot) — DroidSpaces LXC mode, working…
Mohithash Jul 18, 2026
71e5368
fix(security): check getgrouplist() return in daemon peer auth
ravindu644 Jul 18, 2026
eb3824b
fix(security): length-aware growth in gen_stat() /proc/stat buffer
ravindu644 Jul 18, 2026
995fe9b
fix(security): pin bind-mount target inode to defeat symlink swap race
ravindu644 Jul 18, 2026
7be27b9
fix(security): safe temp-file creation, reject symlinked bind targets
ravindu644 Jul 18, 2026
e5d47e7
fix(security): create pidfile and container.config non-world-writable
ravindu644 Jul 18, 2026
174b75c
fix(security): refuse to load a group/other-writable config
ravindu644 Jul 18, 2026
2c46cff
fix(security): force NUL-termination of socketd wire target field
ravindu644 Jul 18, 2026
79449ca
fix(security): reject socket peers outside the daemon PID namespace
ravindu644 Jul 18, 2026
59ddf21
fix(security): write sysvinit initctl only through a verified FIFO
ravindu644 Jul 18, 2026
6a73f76
fix(security): set SOCK_CLOEXEC on route-monitor and DHCP sockets
ravindu644 Jul 18, 2026
9fb229a
fix(security): guard size==0 underflow in sanitize_container_name
ravindu644 Jul 18, 2026
af4a123
fix(security): fix format-string arg mismatch in domount_silent
ravindu644 Jul 18, 2026
2117b89
fix(security): clamp gen_uptime out_len to bytes actually written
ravindu644 Jul 18, 2026
b0e3ffe
fix(security): add O_NOFOLLOW to bind_vfile target creation
ravindu644 Jul 18, 2026
6601337
fix(security): use atomic close-on-exec for transient fds
ravindu644 Jul 18, 2026
feb7586
fix(security): add SOCK_CLOEXEC to transient AF_INET sockets
ravindu644 Jul 18, 2026
267714d
fix(security): replace weak rand() UUID fallback with getrandom(2)
ravindu644 Jul 18, 2026
4371206
fix(security): validate port_forwards proto in the config parser
ravindu644 Jul 18, 2026
5fd8a2f
fix(security): scrub LD_*/IFS env before the daemon re-execs as root
ravindu644 Jul 18, 2026
70ef5f4
fix(security): use async-signal-safe write() in SIGINT handler
ravindu644 Jul 18, 2026
86c2f58
fix(security): validate container_ip before the iptables shell sweep
ravindu644 Jul 18, 2026
247e6ca
fix(security): guard nl_nest_end against a NULL nest pointer
ravindu644 Jul 18, 2026
e168073
fix(security): bounds-check 4-byte netlink attribute reads
ravindu644 Jul 18, 2026
a8a0a29
fix(security): validate container mount marker before host bookkeeping
ravindu644 Jul 18, 2026
f85f250
refactor: remove dead payload-drain block and stale TODO in socketd b…
ravindu644 Jul 18, 2026
6638be2
refactor: drop premature ds_config_free in start_rootfs boot-failure …
ravindu644 Jul 18, 2026
296c380
refactor: free cur_base on OOM early-return in remove_matching_rules
ravindu644 Jul 18, 2026
3102b97
refactor: unify pidfile sidecar path builders
ravindu644 Jul 18, 2026
9a6856b
refactor: use in-tree remove_recursive to clear stale PulseAudio config
ravindu644 Jul 18, 2026
eef4db0
refactor: extract generic socketd_grow_array for record buffers
ravindu644 Jul 18, 2026
0508150
refactor: share forked-daemon-child preamble across A/V helpers
ravindu644 Jul 18, 2026
95d2746
refactor: share Termux socket-bridge setup for PulseAudio and VirGL
ravindu644 Jul 18, 2026
1660135
refactor: unify socket peer authorization into ds_peer_authorized
ravindu644 Jul 18, 2026
08e6540
refactor: compute doc nav-hint width by display columns, not byte fudge
ravindu644 Jul 18, 2026
aa6c6ca
refactor: centralize tx11/virgl flag ownership in ds_config_free
ravindu644 Jul 18, 2026
e4280cb
refactor: call p_printf explicitly instead of #define printf in print…
ravindu644 Jul 18, 2026
95fcdf6
refactor: shell-quote multi-arg su -c command in run_in_rootfs
ravindu644 Jul 18, 2026
cb6de8a
refactor: share pidfile resolve/prune helpers between scan loops
ravindu644 Jul 18, 2026
334c006
refactor: wrap repeated payload-drain idiom in socketd_drain_payload
ravindu644 Jul 18, 2026
f87862f
fix(net): keep uplink route monitor alive across internal reboots
ravindu644 Jul 18, 2026
9696c76
fix(net): actually remove DS iptables rules on cleanup; stop phantom …
ravindu644 Jul 18, 2026
6b63827
fix(net): re-base jump verdicts on raw iptables delete (fixes ELOOP)
ravindu644 Jul 18, 2026
462ddce
fix(ui): jump directly between tabs instead of scrolling through them
ravindu644 Jul 18, 2026
31c3b69
Use fixed latest release URL for kernel download (#244)
Alhkxsj Jul 18, 2026
ecf412c
Revert "fix(security): refuse to load a group/other-writable config"
ravindu644 Jul 18, 2026
1f1639f
app: validate tarball is a Linux rootfs before install
ravindu644 Jul 18, 2026
7ba97ee
app: add launcher long-press shortcuts
ravindu644 Jul 18, 2026
0b270d3
Translated using Weblate (Romanian) (#243)
weblate Jul 19, 2026
56c8f75
refactor: unify Edit/Config screens into ContainerConfigForm + Contai…
ravindu644 Jul 26, 2026
842c816
fix(security): validate systemd/openrc service names to prevent host-…
ravindu644 Jul 26, 2026
7c5bf7d
refactor: unify Procd/OpenRC/Systemd screens into InitServiceScreen
ravindu644 Jul 26, 2026
139349e
refactor: delete dead StatusBarStyle.kt
ravindu644 Jul 26, 2026
1ba1b12
refactor: extract shared PrimaryActionBottomBar across wizard screens
ravindu644 Jul 26, 2026
ec777f8
refactor: extract shared DialogFooterRow for dialog Cancel/Confirm rows
ravindu644 Jul 26, 2026
21714f3
refactor: merge ToggleCard/SettingsRowCard into shared SettingsCard
ravindu644 Jul 26, 2026
e72f846
refactor: extract DsTextFieldDefaults for duplicated OutlinedTextFiel…
ravindu644 Jul 26, 2026
f4c695a
refactor: collapse GatewaySettingsSection params into GatewayConfig
ravindu644 Jul 26, 2026
971bbc4
refactor: extract shared StatusPill component
ravindu644 Jul 26, 2026
3ce17df
refactor: share warning card, confirm gate and footer across dangerou…
ravindu644 Jul 26, 2026
2bf0fa6
refactor: route ContainerViewModel scan through a ContainerRuntime ga…
ravindu644 Jul 26, 2026
05b01a6
refactor: extract daemon-mode root shell into DaemonModeRepository
ravindu644 Jul 26, 2026
430c1d8
refactor: bound usage-monitor coroutines, prune download jobs, privat…
ravindu644 Jul 26, 2026
2e5ab92
refactor: key/remember recomputed lists to cut needless recomposition…
ravindu644 Jul 26, 2026
a6d1932
refactor: fix net_mode default drift between model and parser
ravindu644 Jul 26, 2026
276b272
refactor: dedupe countEnvVars into ValidationUtils
ravindu644 Jul 26, 2026
0c85f75
refactor: make SummaryItem icon type-safe via overloads
ravindu644 Jul 26, 2026
e11371a
refactor: remove dead @Deprecated buildUptimeCommand
ravindu644 Jul 26, 2026
19e3302
refactor: dedupe ABI->arch mapping into DeviceArch
ravindu644 Jul 26, 2026
2cc3b3c
fix(security): shell-quote file-picker paths in root ls/test commands
ravindu644 Jul 26, 2026
3055be0
fix(security): shell-quote imgPath in disk-usage stat command
ravindu644 Jul 26, 2026
299d654
fix(security): quote bare rm -rf path in installer cleanup
ravindu644 Jul 26, 2026
241bfaf
fix(security): allow-list container name and user before building su …
ravindu644 Jul 26, 2026
5c4ba1c
fix(security): disable allowBackup on the root-privileged app
ravindu644 Jul 26, 2026
e448468
fix(security): enforce HTTPS for rootfs repos and block cleartext tra…
ravindu644 Jul 26, 2026
2c85869
fix(ui): make Accent Color settings row background match sibling rows
ravindu644 Jul 26, 2026
523436a
fix(ui): disable Check Requirements button when backend is missing or…
ravindu644 Jul 26, 2026
c0af39d
fix(security): remove unused RECEIVE_BOOT_COMPLETED permission and no…
ravindu644 Jul 26, 2026
f7b3ce4
fix(security): fail closed when the rootfs validator cannot run
ravindu644 Jul 26, 2026
01a7bb8
fix(security): reject control characters in single-line container-con…
ravindu644 Jul 26, 2026
6eed430
fix(security): quote container-derived paths and drop unsafe names on…
ravindu644 Jul 26, 2026
3b22762
fix(security): detach terminal session client on dispose to stop Acti…
ravindu644 Jul 26, 2026
9ea611b
refactor: move ContainersScreen operations into ContainerOperationsVi…
ravindu644 Jul 26, 2026
711e554
refactor: move InstallationScreen orchestration into AppStateViewMode…
ravindu644 Jul 26, 2026
a4b919a
refactor: group ContainerCard callbacks into ContainerCardActions
ravindu644 Jul 26, 2026
3d6a4bc
refactor: render the container list with LazyColumn + stable keys
ravindu644 Jul 26, 2026
9acf48a
refactor: dedupe wizard-scoped ViewModel resolution in navigation
ravindu644 Jul 26, 2026
77689eb
refactor: collect Settings toggles via collectAsStateWithLifecycle
ravindu644 Jul 26, 2026
9b2eacc
refactor: clear compiler warnings left by the refactor
ravindu644 Jul 26, 2026
893eaec
feat(ui): swipe between service filter categories on the service list
ravindu644 Jul 26, 2026
9096c5a
fix(monitor): drain console PTY master in background mode (#247)
seriaTvT Jul 23, 2026
0fc8344
docs: add motorola edge 30 to supported devices list (#249)
tuxdotrs Jul 24, 2026
0e022a2
Fix blurry launcher icon on Xiaomi tablet desktop and dock (#253)
Yizhou147 Jul 26, 2026
0388a54
fix: report user namespaces as optional, not a hardening regression
ravindu644 Jul 29, 2026
ab96668
app: fix: bump termux terminal to 0.118.3 so fish stops printing "5u"
ravindu644 Jul 29, 2026
2242f37
Translated using Weblate (Czech) (#256)
weblate Jul 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ title: "[BUG]: <Short Description>"
labels: [bug, needs-triage]

body:
- type: markdown
attributes:
value: |
## 🌐 ENGLISH ONLY
**All issues MUST be written in English. Non-English reports will be closed without response.**

- type: markdown
attributes:
value: |
Expand Down
19 changes: 0 additions & 19 deletions .github/ISSUE_TEMPLATE/feature_request_CN.md

This file was deleted.

33 changes: 24 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
name: Droidspaces CI
run-name: ${{ github.event.head_commit.message || format('Release {0}', github.event.inputs.tag_name) || github.workflow }}

on:
push:
Expand Down Expand Up @@ -69,8 +68,10 @@ jobs:
echo "[+] Toolchains ready."
tree -L 3 $HOME/toolchains

- name: Build All Tarball & Sync to Android
run: make all-tarball
- name: Build All Tarball, Debian Packages & Sync to Android
run: |
make all-tarball
scripts/mkdeb.sh

- name: Decode Keystore
env:
Expand Down Expand Up @@ -103,28 +104,41 @@ jobs:

- name: Stage & Rename Artifacts
run: |
TAG="${{ github.event.inputs.tag_name || 'test' }}"
DATE=$(date +%Y-%m-%d)
APK_NAME="Droidspaces-universal-${TAG}-${DATE}.apk"
TAG="${{ github.event.inputs.tag_name || 'CI' }}"
COMMIT_HASH=$(git log -1 --pretty=%h)
APK_NAME="Droidspaces-universal-${TAG}-${COMMIT_HASH}.apk"
TAR_NAME=$(ls droidspaces-v*-*.tar.gz)
mkdir -p dist
mv Android/app/build/outputs/apk/release/app-release.apk dist/${APK_NAME}
mv ${TAR_NAME} dist/
mv droidspaces_*.deb dist/
echo "APK_FILE=dist/${APK_NAME}" >> $GITHUB_ENV
echo "TAR_FILE=dist/${TAR_NAME}" >> $GITHUB_ENV

- name: Generate Telegram Message
if: github.event_name != 'pull_request'
run: |
EVENT_TYPE="${{ github.event_name == 'workflow_dispatch' && github.event.inputs.create_release == 'true' && 'Official Release' || 'Git Push' }}"
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
if [ "${{ github.event.inputs.create_release }}" = "true" ]; then
EVENT_TYPE="Official Release"
else
EVENT_TYPE="Manual Trigger"
fi
else
EVENT_TYPE="Git Push"
fi
COMMIT_MSG=$(git log -1 --pretty=format:%s)
COMMIT_SHA=$(git log -1 --pretty=format:%h)
COMMIT_AUTHOR=$(git log -1 --pretty=format:%an)
{
echo "TELEGRAM_MESSAGE<<EOF"
echo "**Droidspaces Build Successful**"
echo ""
echo "**Repository:** [${{ github.repository }}](https://github.com/${{ github.repository }})"
echo "**Author:** [${{ github.actor }}](https://github.com/${{ github.actor }})"
echo "**Branch:** ${{ github.ref_name }}"
echo "**Author:** $COMMIT_AUTHOR"
echo "**Event:** $EVENT_TYPE"
echo "**Commit SHA:** [$COMMIT_SHA](https://github.com/${{ github.repository }}/commit/${{ github.sha }})"
echo ""
echo "**Commit Message:**"
echo ""
Expand All @@ -134,7 +148,7 @@ jobs:
echo "EOF"
} >> "$GITHUB_ENV"

- name: Upload Final Artifacts (APK & Tarball)
- name: Upload Final Artifacts (APK, Tarball & Debian Packages)
uses: actions/upload-artifact@v4
with:
name: droidspaces-artifacts
Expand Down Expand Up @@ -211,3 +225,4 @@ jobs:
files: |
release-assets/*.apk
release-assets/*.tar.gz
release-assets/*.deb
15 changes: 9 additions & 6 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
*.o
*.tar.gz
droidspaces-*
output
.cursor
old_code_with_android-app/
logs/
*.deb
output/
*.img
*.txt
*.patch
*.diff
*.rej
*.orig
*.config
.cache
.claude
Android/app/src/main/assets/binaries/
Android/app/src/main/assets/supported_locales.txt

# Keystores
*.keystore
local.properties

# IDE / tooling
compile_commands.json

# Nix stuff
/result
*.qcow2
Expand Down
11 changes: 11 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[submodule "external/busybox"]
path = external/busybox
url = https://github.com/Droidspaces/busybox-droidspaces.git
[submodule "external/www"]
path = external/www
url = https://github.com/Droidspaces/webui.git
branch = main
[submodule "external/socketd"]
path = external/socketd
url = https://github.com/Droidspaces/socketd.git
branch = main
12 changes: 9 additions & 3 deletions Android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ if (keystorePropertiesFile.exists()) {

// Helper to extract version from C header
fun getDSVersion(): String {
val headerFile = file("../../src/droidspace.h")
val headerFile = file("../../src/include/droidspace.h")
if (!headerFile.exists()) return "1.0.0"

val pattern = Regex("#define\\s+DS_VERSION\\s+\"([^\"]+)\"")
Expand Down Expand Up @@ -319,6 +319,10 @@ dependencies {
// Navigation
implementation("androidx.navigation:navigation-compose:2.7.7")

// Drag-and-drop reordering for Compose lists (Auto boot priority screen)
// 2.1.x targets Compose 1.6.x, matching the BOM above.
implementation("sh.calvin.reorderable:reorderable:2.1.1")

// ViewModel
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0")

Expand All @@ -332,8 +336,10 @@ dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")

// Terminal emulator (ported from LXC-Manager / termux-app)
implementation("com.github.termux.termux-app:terminal-view:0.118.1")
implementation("com.github.termux.termux-app:terminal-emulator:0.118.1")
// 0.118.3 consumes unsupported CSI private-parameter sequences (ESC [ = / ESC [ <)
// instead of leaking them to the screen — fish 4.x probes with ESC[=5u.
implementation("com.github.termux.termux-app:terminal-view:0.118.3")
implementation("com.github.termux.termux-app:terminal-emulator:0.118.3")

// Debug
debugImplementation("androidx.compose.ui:ui-tooling")
Expand Down
23 changes: 8 additions & 15 deletions Android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,16 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

<application
android:name=".DroidspacesApplication"
android:allowBackup="true"
android:allowBackup="false"
android:networkSecurityConfig="@xml/network_security_config"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:localeConfig="@xml/locales_config"
Expand All @@ -34,6 +35,11 @@
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

<!-- Long-press launcher shortcuts: Containers, Panel, Settings -->
<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>

<service
Expand All @@ -55,19 +61,6 @@
android:value="Terminal sessions for Droidspaces containers" />
</service>


<!-- Boot receiver: required to pair with RECEIVE_BOOT_COMPLETED permission.
Marked exported=false so only the system can send the boot broadcast.
Without this declaration, scanners flag the permission as a dropper pattern. -->
<receiver
android:name=".receiver.BootReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
</intent-filter>
</receiver>

</application>

</manifest>
4 changes: 2 additions & 2 deletions Android/app/src/main/assets/boot-module/module.prop
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
id=droidspaces
name=Droidspaces: Daemon & Init
version=v6.2.5
versionCode=6250
version=v6.4.5
versionCode=6450
author=ravindu644
description=Automatically starts the Droidspaces daemon if "Daemon Mode" is enabled, and starts containers during boot if "Run-at-Boot" is active.
8 changes: 6 additions & 2 deletions Android/app/src/main/assets/boot-module/sepolicy.rule
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,14 @@ allow system_server droidspacesd fd use
allow system_server droidspacesd fifo_file write

# for Termux:X11 and DRI3 denials in daemon mode
allow untrusted_app droidspacesd fd use
allow untrusted_app droidspacesd fifo_file write
allow untrusted_app_27 droidspacesd fd use
allow untrusted_app_27 droidspacesd fifo_file write

# for pulseAudio
allow audioserver droidspacesd binder { call transfer }
allow audioserver droidspacesd fd use
allow mediaserver droidspacesd binder { call transfer }
allow mediaserver droidspacesd fd use

# fix permission denied when read/write mounted storage (#213)
allow mediaprovider_app droidspacesd fd use
Loading
Loading