GSplit
3.1.0-Direct · GitHub
Detected trackers (2)
Matched by Exodus Privacy code signatures. Not a complete list.
More about this app
Split-screen and freeform multi-window presets with scheduling, boot autostart and overlays; an optional Shizuku ADB shell configures splits.
GSplit
GSplit is an Android app for split-screen and multi-window presets: pair two apps and launch them in freeform or split-style layouts, with scheduling, boot autostart, overlays, and optional ADB-assisted configuration. It is built with Jetpack Compose, a multi-module architecture, and background services for boot handling and split orchestration.
Support the project
If this app helps you, you can support further development, maintenance, and new features.
Crypto
- BTC:
bc1q37z3d7avhsq3ehpsjm2wldj86ajsnsd6gqnkzm - ETH:
0x69C73C422FEBBf12F47C29C51501Ad659fcdf74A
Thanks for supporting the project.
What This Project Does
- Manages presets (two apps per preset) and launches them via
core:splitLauncherandcore:splitPresets. - Offers preset list and create/edit flows in
feature:split:listandfeature:split:add, plus a stub / dark filler screen infeature:split:stub. - Splits settings across dedicated feature modules (general, scheduler, autostart, presets, UI, ADB, overlays, dark screen, window shift, app tasks, replacement apps, API, and shared
feature:settings:common) and a system overlay infeature:overlay. - Persists global state and schedules through
core:stateKeeper,core:schedulerStorage, and related storage modules. - Integrates Firebase (analytics, remote configuration, Crashlytics) and optional ADB shell usage from
core:adb. - Uses accessibility, foreground service, and boot completed receivers where configured for autostart and experimental native split behavior.
Tech Stack
- Kotlin + Coroutines + Flow
- Jetpack Compose (Material 3, Navigation Compose)
- Hilt (DI)
- AndroidX DataStore
- Timber (logging)
- Coil (image loading)
- Firebase (Google services, Crashlytics)
- Detekt + Ktlint (static analysis and formatting)
- Baseline Profile
Module Structure
This is a multi-module project. Gradle includes container projects core and feature (no code; they group subprojects). Notable modules:
Application
app— application entry point (App,MainActivity), ComposeNavHost,BootReceiver,WakeUpForegroundService,AutoLaunchAccessibilityService.
Feature modules
feature:split— split presets UX; submodules includefeature:split:list(preset list),feature:split:add(create/edit),feature:split:stub(dark filler).feature:settings— settings umbrella; concrete screens live infeature:settings:general,scheduler,autostart,presets,ui,adb,closingOverlay,appSwitchOverlay,darkScreenMode,windowShiftMode,appTasks,replacementApps,api,common, and related packages.feature:overlay— system overlay service integration.
Core — split, apps, and device
core:splitLauncher— launch apps in split / multi-window.core:splitPresets— preset domain and data.core:systemApps— installed apps discovery and management.core:screenSpecs— screen metrics and layout.core:mediaMonitor— media playback state.core:launchHistory— launch history tracking.core:adb— ADB shell helpers for advanced settings.
Core — state and storage
core:stateKeeper— global app state.core:schedulerStorage— scheduled launches.core:replacementAppsStorage— replacement app mappings.core:preferences— DataStore-backed preferences.
Core — cloud and downloads
core:firebase— Firebase integration.core:remoteConfig— remote configuration.core:fileDownloader— file download by URL.
Core — shared infrastructure
core:base— shared Android base types and dependencies.core:navigation— navigation graphs, typed routes, and transitions (SplitNavGraphhosts the main split flow).core:resources— shared resources (strings, assets).core:ui/core:uikit— shared and app-specific UI.core:coil— Coil setup for image loading.
Tooling
baselineprofile— Baseline Profile generation for startup performance (used with the Baseline Profile Gradle plugin and theprepareReleasetask chain inapp).
Requirements
- JDK 17
- Android SDK (compileSdk 34, targetSdk 34, minSdk 24)
- Gradle Wrapper (
gradle-8.6) - Android Studio / IntelliJ with Android support
Quick Start
- Clone the repository.
- Open the project in Android Studio.
- Make sure Android SDK API 34 is installed and configured.
- Build debug:
./gradlew :app:assembleDebug
For Windows PowerShell:
.\gradlew :app:assembleDebug
Debug, internal, and car build types reference a dummy keystore at app/dummy.jks. If that file is not present in your checkout, add a compatible keystore or adjust signingConfigs in app/build.gradle.kts before building those variants.
Useful Commands
- Build:
./gradlew :app:assembleDebug./gradlew :app:assembleRelease./gradlew :app:assembleInternal/./gradlew :app:assembleCar(additional product flavors)
- Lint / style checks:
./gradlew ktlint./gradlew detekt(Detekt also runs as part of the app build)
- Auto-format:
./gradlew ktlintFormat
- Release preparation (Baseline Profile for release + release APK):
./gradlew prepareRelease
- Other flavor Baseline Profile chains (see
app/build.gradle.kts):./gradlew prepareInternal./gradlew prepareCar
Release Signing
The project supports external signing configuration:
- Copy
_secure.signing.gradletosecure.signing.gradle(or point to a custom path viasecure.signing=...ingradle.properties). - Add signing parameters in that file.
- Run:
./gradlew prepareRelease
Release outputs are produced under app/build/outputs/apk/ and app/build/outputs/bundle/ as configured by your signing and build types.
Debug, internal, and car builds use the dummy signing config when
app/dummy.jksis available; configuresecure.signingfor production release signing as needed.
Navigation and UI Flow
MainActivitysets up Compose content and aNavHostwithstartDestination = SplitNavGraph(core:navigation), registering the main graph viasplitGraph(...).PresetLauncherActivity,ShortcutActivity, andMultiWindowHeatingActivityprovide additional entry points for presets and multi-window behavior (seeAndroidManifest.xml).
Permissions and System Notes
The app uses (among others) the following permissions from AndroidManifest.xml:
INTERNETQUERY_ALL_PACKAGESSYSTEM_ALERT_WINDOWWRITE_SETTINGSWRITE_SECURE_SETTINGSACCESS_NETWORK_STATERECEIVE_BOOT_COMPLETEDFOREGROUND_SERVICEFOREGROUND_SERVICE_MEDIA_PLAYBACK- Accessibility service (
AutoLaunchAccessibilityService)
Freeform multi-window and secure settings often require explicit user grants or a privileged / automotive firmware context. An optional experimental path launches split layouts via the Accessibility API on supported devices (see in-app “experimental native split” settings).
Notes
- GSplit targets workflows on large Android devices and in-vehicle head units where running two apps side by side is a primary use case.
- Vendor- or device-specific behavior may limit freeform windows or accessibility-based split on some OEM builds.
How Shizuku is used
No Shizuku usage was found in this release, privileged features use wireless ADB instead.
This is an AI-assisted analysis of Shizuku-related usages in the app's public source code. It is best effort, so it may not catch every single usage.
How this app uses Shizuku
No Shizuku usage was found in the current source. The app declares a Shizuku library version but no code imports, connects to, or calls Shizuku, and all privileged operations go through a wireless ADB shell connection instead of Shizuku.
Notable details
App updates can be installed without Shizuku through the normal system installer prompt.
Changelog
What's new for version 3.1.0-Direct
- Видимость верхней панели теперь можно настраивать для каждого окна отдельно (переключатели в редакторе пресета). - В свободном режиме сплита, через оверлей "Переключение приложений" теперь можно заменять отдельные окна, а не только весь пресет целиком. - Исправлено: при подключении через Telnet после закрытия сплита приложения при следующем запуске могло открываться на весь экран, а не в окнах. - Добавлен Shizuku как ещё один способ подключения, рядом с ADB и Telnet.
Permissions
20 permissions requested