GameHub 5.3.5 ReVanced — extended with GOG Games, Amazon Games, and Epic Games Store library tabs, a full Component Manager, in-app component downloader, background download service with in-app cross-store download manager, SD card / external storage routing for store game downloads, Winlator HUD overlay (Normal + Extra Detailed + Konkr style with CPU/GPU/RAM/SWAP/temp/per-core metrics), in-game performance toggles, RTS touch controls, VRAM unlock, per-game CPU core affinity, root access management, offline Steam launch, community game configs browser, per-game config export/import with Frontend Export, Japanese locale, in-game voice chat (room-based, no Steam required, cross-compatible with BannerHub v6), per-game PC audio settings (recording-compatible mode), and more. Built entirely with apktool smali patching — no source code, no external library injection.
All smali edits, patches, and code changes in this project are developed with the assistance of Claude AI Sonnet 4.6 by Anthropic. Claude is used to write, review, and modify smali bytecode and Java extension code since this project has no source code to work from — all changes are applied directly to the decompiled APK via apktool.
Before any stable release is published, all changes are manually debugged and tested by me across multiple devices — both rooted and unrooted. Debugging is done using logcat output and in-app debug log files to diagnose and verify behavior before changes are finalized.
Installing the app, installing games, and showcasing all features.
Download the APK that matches your existing GameHub package name from the latest release:
| APK | Package | App Label |
|---|---|---|
BannerHub-vX.Y.Z-Normal.apk | banner.hub | BannerHub |
BannerHub-vX.Y.Z-Normal.GHL.apk | gamehub.lite | BannerHub |
BannerHub-vX.Y.Z-PuBG.apk | com.tencent.ig | BannerHub PuBG |
BannerHub-vX.Y.Z-AnTuTu.apk | com.antutu.ABenchMark | BannerHub AnTuTu |
BannerHub-vX.Y.Z-alt-AnTuTu.apk | com.antutu.benchmark.full | BannerHub AnTuTu |
BannerHub-vX.Y.Z-PuBG-CrossFire.apk | com.tencent.tmgp.cf | BannerHub PuBG CrossFire |
BannerHub-vX.Y.Z-Ludashi.apk | com.ludashi.aibench | BannerHub Ludashi |
BannerHub-vX.Y.Z-Genshin.apk | com.miHoYo.GenshinImpact | BannerHub Genshin |
BannerHub-vX.Y.Z-Original.apk | com.xiaoji.egggame | BannerHub Original |
Which APK do I need?
If you do not already have any GameHub variant installed, use the Normal APK (banner.hub). It installs as a completely separate app alongside the official GameHub Lite — both can coexist. If you want BannerHub to take over the gamehub.lite package slot (e.g. so apps that launch GameHub Lite by package name launch BannerHub instead), use Normal.GHL — but you must uninstall the official GameHub Lite first since they share the same package name and have different signing certificates. If you want to use a specific GameHub variant for performance spoofing (e.g. PuBG or Genshin), pick the matching APK. Be aware: performance spoofing variants push your device harder and generate significantly more heat. Do not use these variants without proper cooling and a clear understanding of what you are doing. Use at your own risk.
All 9 variants can be installed simultaneously. All APKs are signed with AOSP testkey (v1/v2/v3).
Note: You must uninstall your existing BannerHub build before installing a new release if the signing certificate changed. Data is not preserved across uninstall.
Use Obtainium to automatically track and install new BannerHub stable releases directly from GitHub — no manual checking required.
Add this repo (https://github.com/The412Banner/BannerHub) as an app source in Obtainium. Starting with v3.4.0, BannerHub reports its own version number to Android (e.g. 3.4.0) instead of the base GameHub version, so Obtainium can correctly detect when a new release is available and prompt you to update.
Required setting: When adding BannerHub in Obtainium, enable "Reconcile version string with version detected from OS". This tells Obtainium to compare the GitHub release tag against the version installed on your device. Without this, Obtainium may not detect version changes correctly.
[!WARNING] Only track stable releases in Obtainium. Pre-release builds use a different package name (
com.tencent.ig) and cannot be upgraded to stable without uninstalling first — installing a pre-release over a stable build will break your install.
Accessible via the left side menu → GOG.
For the complete technical implementation breakdown, see GOG_IMPLEMENTATION.md (API endpoints, auth flow, manifest format, download pipeline, BannerHub integration guide).
bh_gog_prefs SharedPreferences file.BannerHub supports both GOG's current and legacy download systems:
Generation 2 (Galaxy-era games):
content-system.gog.com/products/{id}/os/windows/buildsfilesDir/gog_games/{title}/Generation 1 (pre-Galaxy legacy games):
generation=1 parameterdepot.files[], skips support-only filesRange HTTP requests (byte-range resumable download)Installer fallback (very old pre-Galaxy games with no content-system builds):
api.gog.com/products/{id}?expand=downloadsdownlink or manualUrl from the downloads object.exe directlyMulti-CDN failover (v3.7.3+): Each file probes every CDN advertised in the depot manifest (typically 4–6 endpoints) and falls back automatically when one rejects with HTTP 403 / 404 / 5xx. A CDN picker in the install-confirm dialog (with a ↻ Refresh button to re-fetch the live CDN list) lets you pin a specific CDN if your network plays better with one. When a download is interrupted mid-stream, the install state is recorded as PARTIAL so the next tap resumes from the same per-file progress instead of restarting from scratch. Originally ported from utkarshdalal/GameNative upstream PRs (see release notes for credits).
ProgressBar + status text replaces the Install button during download. Live progress is also visible in the Download Manager.EditImportedGameInfoDialog pre-populated with the executable path.bh_gog_prefs is read on every app open; already-installed cards show checkmark and Add button automatically.EditImportedGameInfoDialog.filesDir/gog_games/{dirName}/ to Downloads/{dirName}/.Accessible via the left side menu → Amazon Games.
For the complete technical implementation breakdown, see AMAZON_IMPLEMENTATION.md (PKCE auth, GetEntitlements API, manifest.proto format, XZ/LZMA decode, FuelPump env vars, SDK DLL deployment, BannerHub integration guide).
Pipeline based on research by The GameNative Team.
openid.oa2.authorization_code= in any redirect URL, so it works correctly through OTP / 2FA intermediate pages without hanging. Tokens are stored in bh_amazon_prefs.GetEntitlements. Each entry includes title, product SKU, entitlement ID, and cover art.GetGameDownload to retrieve the CDN download URL and version IDmanifest.proto — a protobuf manifest listing every file with its CDN hash path, size, and SHA-256 checksumDownloads run via the BhDownloadService foreground service — a persistent notification with a Cancel action appears in the notification tray and the download continues if you leave the screen. Live progress is also visible in the Download Manager.
fuel.json from the install directory to determine the executable and required FuelPump environment variables, then launches via GameHub's EditImportedGameInfoDialogFuelSDK_x64.dll and AmazonGamesSDK_* DLLs are deployed to the install directory at launch timeAccessible via the left side menu → Epic Games.
For the complete technical implementation breakdown, see EPIC_IMPLEMENTATION.md (OAuth2 auth, library API, manifest format, CDN selection, chunk download pipeline, BannerHub integration guide).
Pipeline based on research by The GameNative Team.
authorizationCode from Epic's JSON redirect response body via evaluateJavascript, exchanges it for tokens using the Legendary client credentials, and stores them in bh_epic_prefs.Downloads run via the BhDownloadService foreground service — a persistent notification with a Cancel action appears in the notification tray and the download continues if you leave the screen. Live progress is also visible in the Download Manager.
pending_epic_exe in SharedPreferences → picked up by the main launcher activity → opens EditImportedGameInfoDialogAccessible via the left side menu → Components.
The Component Manager gives you full control over the WCP/ZIP components that GameHub uses to run Windows games — the DXVK, VKD3D, Box64, FEXCore, and GPU Driver entries that appear in per-game settings.
Each installed component is displayed as a compact card with:
| Action | How to trigger | What it does |
|---|---|---|
| Inject file | Tap a card, select a WCP or ZIP | Replaces the component's contents with the new file. The folder is cleared first — no stale files |
| Add New Component | Tap "+ Add New" in the bottom bar | Injects a WCP or ZIP as a brand new component slot. It immediately appears in GameHub's DXVK/VKD3D/Box64/FEXCore/GPU Driver selection menus and persists across restarts |
| Backup | Swipe RIGHT on a card | Copies the component folder to Downloads/BannerHub/{name}/ |
| Remove | Swipe LEFT on a card | Unregisters the component from GameHub's in-memory map, deletes the folder on disk, and clears its downloaded indicator in the online repo browser |
| Remove All | Tap "Remove All" | Removes only BannerHub-managed components. The confirmation dialog shows the exact count. Stock GameHub components are never touched |
| Format | Used by | Extraction |
|---|---|---|
| ZIP (PK magic) | Turnip, adrenotools GPU drivers | Flat extraction — meta.json + .so files land directly in the component root |
Zstd-compressed tar (.wcp) | DXVK, VKD3D, Box64 | Preserves system32/ + syswow64/ internal structure |
XZ-compressed tar (.wcp) | FEXCore nightlies | Flat extraction to component root |
BannerHub uses GameHub's own bundled libraries (commons-compress, zstd-jni, tukaani xz) for extraction — no external dependencies are injected, so there are no class loader conflicts.
Inside the Component Manager, tap Download at the bottom of the screen to open the Download Components browser and install components directly from GitHub without leaving the app.
Three-level navigation: Repo → Category → Asset list
Tapping any asset downloads it to the cache directory and injects it as a new component automatically, with a progress screen showing "Downloading: <filename>" during the fetch.
| Source | Format | Types available |
|---|---|---|
| Arihany WCPHub | pack.json flat manifest | DXVK, VKD3D, Box64, FEXCore, GPU Drivers |
| The412Banner Nightlies | GitHub Releases API (nightly-* tag) | DXVK, VKD3D-Proton, Box64, FEXCore, GPU Drivers |
| Kimchi GPU Drivers | GitHub Releases API | GPU Drivers only |
| StevenMXZ GPU Drivers | GitHub Releases API | GPU Drivers only |
| MTR GPU Drivers (MaxesTechReview) | rankings.json | GPU Drivers only |
| Whitebelyash GPU Drivers | GitHub Releases API | GPU Drivers only |
A ⬇ button in the launcher dashboard opens the Download Manager (BhDownloadsActivity) — a live cross-store download dashboard accessible from anywhere in the app. The button updates in real time: at rest it shows ⬇; when one or more downloads are active it shows a red count badge (e.g. ⬇ 2) that increments and decrements as jobs start and finish.
A persistent screen showing all active and completed downloads across GOG, Amazon, and Epic simultaneously:
ProgressBar. A Cancel button stops the download immediately and cleans up partial files.bh_library SharedPreferences and are shown as completed rows with a color-coded store badge. Each row has:
EditImportedGameInfoDialog pre-populated with the stored executable pathThe ⬇ button in each store's header (GOG, Amazon, Epic) also opens the Download Manager directly from within the store view.
All downloads are handled by BhDownloadService, an Android foreground service. A persistent notification with a Cancel action appears in the notification tray for each active download. Downloads survive leaving the detail screen, switching apps, or navigating elsewhere in BannerHub.
A "Save Store Games to External Storage (SD Card)" toggle in the BannerHub side menu settings controls where GOG, Epic, and Amazon game downloads are saved. Steam games are unaffected — this toggle only governs the BannerHub-added stores.
Android/data/<package>/files/{store}/{game}/{SD card}/bannerhub/{store}/{game}/ — visible as a bannerhub/ folder at the root of the SD card with subfolders per store (gog_games/, epic_games/, Amazon/)Turning the toggle on or off shows a confirmation dialog explaining what will change before anything is applied. Pressing Cancel reverts the switch without making any change.
Install location is locked at install time. The full absolute path is saved to SharedPreferences the moment a game finishes installing. All uninstall paths (game list, detail page, download manager) read and delete from that stored path directly — the toggle state at uninstall time is irrelevant. Installing with the toggle on, flipping it off, then uninstalling will still correctly remove the game from the SD card.
Upgrading from v3.5.0? That release accidentally moved Steam games to SD card alongside GOG/Epic/Amazon when the toggle was on. The first time you open a GOG/Epic/Amazon library after upgrading, BannerHub will offer a one-time prompt to switch Steam back to internal storage. From v3.6.0 onward this toggle is BannerHub-only and never touches Steam.
Install path display: each game's detail page shows the full install path in the ACTIONS card when the game is installed, alongside a colored badge indicating the storage location:
An in-game heads-up display that shows real-time performance metrics while a game is running. Accessible from the in-game Performance sidebar.
Three HUD modes are available (only one active at a time):
A second, expanded overlay that replaces the Normal HUD when the Extra Detailed checkbox is enabled. Displays a richer set of metrics:
Available in both horizontal (metrics displayed side-by-side in two aligned rows) and vertical (one metric per row) layouts — toggled with the same Orientation switch as the Normal HUD.
The Extra Detailed checkbox is automatically grayed out and disabled when the Winlator HUD toggle is off.
The Extra Detail HUD is a continuation and extension of the Winlator HUD by Stevenmxz. The additional metrics and layout were inspired by the performance HUD built into my personal device — no credit is claimed from any external project.
A third HUD style, mutually exclusive with Extra Detailed. Enable via the Konkr Style checkbox in the Performance sidebar. Reproduces the layout of the Konkr strategy game's built-in HUD.
Vertical (default): a 2-column table with:
Horizontal: a compact multi-column strip — FPS block (current/min FPS + CPU temp), CPU 2×4 core grid, GPU block, thermal/power 2-column block, memory block with colored label backgrounds.
Tap anywhere on the HUD to toggle between vertical and horizontal. Drag to reposition. The opacity slider applies to the Konkr HUD.
Note: Not all data collected and displayed will always be correct. Each device detects and reads data differently. Values are read directly from sysfs/proc and may vary in accuracy depending on your device, kernel, and thermal zone mapping.
All position, orientation, and opacity settings are persisted in SharedPreferences and restored automatically the next time the Performance sidebar is opened.
Located in the in-game Performance sidebar tab, above the Dual Battery Mode toggle. Both toggles persist their state in bh_prefs SharedPreferences and are re-applied automatically every time the Performance sidebar is opened.
WARNING — USE AT YOUR OWN RISK
These toggles override your device's thermal management. Forcing the CPU and GPU to run at maximum frequency continuously generates significantly more heat than normal operation. Sustained high temperatures can cause permanent damage to your device's processor, battery, and other components. Device manufacturers do not support or warrant against damage caused by overriding performance governors. By using these toggles you accept full responsibility for any damage, data loss, throttling, unexpected shutdowns, or reduced component lifespan that results. Do not leave these enabled unattended. Monitor your device temperature. Disable them immediately if your device becomes uncomfortably hot.
Both toggles require root. Without root, both are greyed out at 50% opacity and non-interactive. Root access is checked once when you grant it in Settings → Advanced — there is no root popup every time the sidebar opens.
Sets all CPU cores to the performance frequency governor via su, eliminating all downclocking while the toggle is on. On disable, schedutil is restored.
# Enable
for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo performance > "$f"; done
# Disable
for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo schedutil > "$f"; done
Locks the Qualcomm Adreno GPU clock floor equal to the ceiling via the KGSL devfreq sysfs interface, so the GPU cannot downclock under any load condition short of a kernel thermal emergency.
# Enable — set min_freq = max_freq
cat /sys/class/kgsl/kgsl-3d0/devfreq/max_freq > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq
# Disable — remove floor
echo 0 > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq
Use both toggles together for maximum sustained CPU + GPU performance (root required).
🙏 Credit: The AI frame interpolation engine itself —
libGameScopeVK, theVK_NV_optical_flowAdreno path, the optical-flow synthesis pipeline, and the 6 quality presets — is the work of the GameHub team, who built it into GameHub 6.0.1. BannerHub adds only the user-facing wiring: the in-game sidebar entry, the settings dialog, persistence across launches, and the runtime ICD JSON path fix. All the heavy lifting that actually generates interpolated frames is theirs.
A new sidebar entry that drives GameHub 6.0.1's built-in libGameScopeVK AI frame-interpolation engine — generates synthetic in-between frames using Vulkan-side optical-flow vectors so your effective frame rate roughly doubles on supported hardware. No more hex-editing gamescope.control to use it.
📖 For the full technical breakdown — data classes, the 10-byte
gamescope.controlmmap protocol, libGameScopeVK Vulkan ICD, theVK_NV_optical_flowAdreno path, per-GPU capability gating, and the action/state classes — seegamehub_reports/GAMEHUB_600_MASTER_MAP.md§ 26.8 (AI Frame Generation — Technical Deep Dive).🧩 BannerHub-side deep dive — for a combined report covering the BannerHub
feature/framegen-menuimplementation, the runtime ICD-path fix, the launcher-regenerator gotcha, the 18:23 A/B failure post-mortem, verified 20:30 FPS results, and a layman's-terms breakdown of how all this works, seeAI_FRAME_GENERATION_REPORT.md.
When the renderer produces a real frame, libGameScopeVK uses Adreno's hardware optical-flow extension (VK_NV_optical_flow) to compute motion vectors between the previous real frame and the current one, then synthesises one (or more) interpolated frame(s) in between. Those synthetic frames are pushed into the swapchain so the displayed framerate is a multiple of the rendered framerate. The GPU never has to draw the in-between frames from scratch — the real bottleneck (your game's CPU/GPU rendering work) is unchanged, but the screen sees twice (or more) the frames.
Open any PC game's in-game sidebar and tap the Performance tab. You'll see a new AI Frame Generation row above Dual Battery Mode, with:
gamescope.control and persists)The gear icon appears next to the sidebar switch only when AI Frame Generation is enabled (v3.7.3+). Tapping it opens a translucent dialog over the dimmed game view:
| Setting | Range / Options | What it does |
|---|---|---|
| Preset | Eco / Flow / Bal / Boost / Clear / Max | 6 named profiles that bundle a quality model and flow-scale value. Map: Eco=model 0/flow 0.2, Flow=0/0.4, Bal=0/0.6 (default), Boost=0/0.8, Clear=1/0.6, Max=1/0.8. Mirrors GameHub 6.0.1's AiFrameInterpolationMode enum |
| Custom flow scale | 0.20–1.00 | AI optical-flow strength. Lower = cheaper, more artifacts on fast motion. Higher = cleaner but more GPU cost. Defaults to whatever the chosen preset says; moving the slider overrides it |
A blue Close button dismisses; tapping outside the panel also dismisses. The sidebar switch is the single source of truth for on/off — there is no in-dialog Enable toggle. The multiplier is fixed at 2× (the only validated path on tested hardware).
Every change is applied immediately to the running game (writes through gamescope.control mmap) and saved to SharedPreferences so the value persists.
The FPS-limit byte (bytes 0–1 of gamescope.control) is owned by GameHub's separate sidebar control — our writer deliberately leaves it alone so toggling frame-gen never clobbers your existing FPS cap.
Bal preset, 2× multiplier. This is the default for a reason — clean output without spending much GPU on the optical-flow pass.Eco or Flow if you're already GPU-bound and frame-gen costs more than it gains.Clear or Max if you have GPU headroom and want the cleanest possible interpolated frames (uses model 1, the higher-quality compositor path).On a working device, roughly 1.8–1.9× FPS scaling at 2× multiplier — e.g. 42 FPS off → 75–80 FPS on (validated via the in-game overlay during testing).
Settings are global (per-game scoping is a v2 candidate). They persist across game launches via two layers:
bh_framegen.xml (keys: enabled, preset, flowScale, model).WineActivity.onCreate and WineActivity.onResume re-apply all saved values to gamescope.control, so the AI overlay survives both fresh launches and Home/lock/resume cycles (v3.7.3 added the onResume hook — previously, resuming the game left the sidebar switch saying "ON" while the overlay was silently dead). The regenerator zeros byte 0 every launch, which is why the onCreate hook runs after it. The Vulkan ICD JSON is also re-written at launch using your APK's actual package name, so the menu works on any installed package — including manually-renamed APKs.Note — requires Adreno GPU. GameHub 6.0.1's frame interpolation engine uses
VK_NV_optical_flow, which on Android is currently only exposed by Qualcomm Adreno drivers. The menu controls work on any device but the actual frame interpolation is silently skipped on Mali, Xclipse, and other non-Adreno GPUs — you'll see the toggle move but not the FPS gain.
Caveats. Frame interpolation can introduce mild visual artifacts on fast camera motion or particle-heavy scenes, and adds a small amount of input-to-display latency by definition (the displayed frame is half a real frame "behind" the engine). Both are inherent to interpolated frame generation, not BannerHub-specific.
Thanks to @Nightwalker743 for making this possible.
Enable via the Controls tab in the in-game sidebar. Adds a full gesture overlay for PC strategy and RTS games that maps touch gestures to mouse inputs inside the Wine environment.
| Gesture | Mouse action |
|---|---|
| Single tap | Move cursor + left-click at tap position |
| Drag | Hold LMB while dragging — draws a box selection |
| Long press (300 ms) | Right-click at press position |
| Double-tap (within 250 ms / 50 px) | Double left-click |
| Two-finger pan | Camera pan (direction configurable) |
| Pinch to zoom | Mouse wheel scroll up/down (configurable) |
Tap the gear icon in the Controls tab to configure pan direction and pinch-to-zoom scroll direction.
Thanks to @TideGear for the original feature (PR #80, from GameNative PR #1214) and for the v3.7.4 x86_64 / Box64 compatibility rework (PR #91).
Routes Wine's XInputSetState(slot, low, high) rumble calls into Android's VibratorManager so PC games actually shake your controller.
CombinedVibration.startParallellow × 0.80 + high × 0.33) on 1-motor pads and the phone vibratorwinebus.so in the container is patched on disk so SDL2's ~1 s rumble auto-expiry never fires, giving continuous rumble for as long as the game asks for it. This replaces the v3.7.0–v3.7.3 libevshim.so LD_PRELOAD shim, which mapped an extra library into the Wine process and broke x86_64 / Box64 game launches (see scope notes). No extra library is loaded anymore — same sustained-rumble behavior, no launch regression.VibratorManager.cancel(), since Samsung's BT-HID effect path doesn't reliably halt on bare cancelA new PC Vibration Settings entry appears in each game's popup options menu, right after PC Game Settings:
| Setting | Options |
|---|---|
| Mode | Off / Controller / Device / Both |
| Intensity | 0–100% slider |
Settings live in the stock pc_g_setting<gameId> SharedPreferences under bh_vibration_* keys, so the existing Export / Import Config flow picks them up automatically.
libevshim.so into Wine via LD_PRELOAD; on Box64 this corrupted the dynarec and made x86_64 game launches die at startup (c000007b / wine has died). v3.7.4 removes the preloaded library entirely — x86_64 / Box64 titles now launch normally with rumble intact. arm64 / FEX containers were never affected.New in v3.8.0. A per-game PC Audio Settings entry in each game's popup options menu, right after PC Vibration Settings.
Stock GameHub loads module-aaudio-sink with no performance-mode argument, so PulseAudio opens a LOW_LATENCY AAudio stream the framework can grant as exclusive MMAP — which bypasses the AudioFlinger mixer that screen recorders tap (MediaProjection's AudioPlaybackCapture). The result: Android screen recordings capture video but no game audio whenever the in-game audio driver is PulseAudio. (ALSA uses a legacy mixed AudioTrack and records fine.)
| Setting | Options |
|---|---|
| PulseAudio mode | Low latency (default) / Recording-compatible |
Recording-compatible routes the default.pa sink line through the extension, appending pm=0 — the module computes setPerformanceMode(pm + 10), so 0 → PERFORMANCE_MODE_NONE → the stream stays on the mixer and screen recordings capture in-game sound. The active game's gameId is resolved from the live WineActivity's WineActivityData field (the 5.3.5 launch intent carries no gameId extra). Settings live in the stock pc_g_setting<gameId> SharedPreferences, so the existing Export / Import Config flow carries them automatically.
New in v3.8.0. A built-in voice chat overlay you can use while in a game — no Steam, no root, no extra app. Identity is a user-chosen nickname plus a stable per-install client id; there are no friends lists and no ringing — it's a room model: Create or Join a room by a short code, or share a join link.
A new Voice Chat item appears in the dashboard side menu under Game Configs → opens a settings screen with a nickname field + Check availability. An Activate toggle stays disabled until the name is confirmed free; ticking it claims the name and turns the in-game pill on. The pill only attaches in-game once a nickname is claimed and activated.
A draggable edge pill opens a room box that shows the live roster (everyone's nickname), a call timer, and Mute / Leave; the pill stays pinned to the edge while the box drags freely, with a collapsible opacity slider. The mic is requested at runtime on activation.
Voice rides the same WebRTC mesh served from the BannerHub Cloudflare Worker (with Cloudflare Realtime TURN for strict NATs) that BannerHub v6 uses — so a BannerHub user and a BannerHub v6 user can share the same room and talk, in either direction. Rooms are identity-agnostic (any two clients on the same room code connect), and room codes use the same format on both builds. Device-confirmed both ways across different networks.
PC game settings → VRAM Limit now includes 6 GB, 8 GB, 12 GB, and 16 GB options in addition to the original GameHub range of 512 MB through 4 GB.
Accessible via the left side menu → Game Configs. A four-screen community browser for sharing and downloading per-game Wine/DXVK/component configurations.
games.json file refreshed every 30 minutes and on every new uploadSamsung SM-G998B • Adreno 750 • 89 games); updates to X of Y games while the search box is activeAll configs are stored in The412Banner/bannerhub-game-configs. The community is powered by a Cloudflare Worker — votes, downloads, descriptions, and comments are tracked without any account required.
You can also browse, search, filter, and download configs from the web at the412banner.github.io/bannerhub-game-configs — no app required.
The community database grows through contributions — if you find settings that work well for a game on your device, sharing them helps other users get a working config without trial and error.
PC game settings include Export Config, Frontend Export, and Import Config options.
Opens a preview dialog showing what will be exported before any file is created:
Then choose:
/sdcard/BannerHub/configs/ on your deviceThe exported filename embeds the game name, device manufacturer, device model, and SOC (e.g. GodOfWar-Samsung-SM_S928B-Adreno_750-1234567890.json).
A separate Frontend Export option in the PC game settings popup creates a launcher .iso file for use with a supported frontend instead of exporting a BannerHub config JSON.
Downloads/bannerhub/frontend/Beacon/{gameName}.isoDownloads/bannerhub/frontend/ES-DE/{gameName}.steamBoth use the same game ID logic — localGameId for imported games, getSteamAppId() for catalog games.
ES-DE note: If the exported
.steamfile doesn't work for a particular game, RobZombie9043/steam-files-es-de is a community resource with pre-made.steamfiles for Steam catalog games.
A dialog lets you choose:
.json files saved in /sdcard/BannerHub/configs/. Selecting a file shows a preview card (device, SOC, settings count, components count) with a ⚠ SOC mismatch warning if the config was made on a different GPU. Tap Apply to proceed or Cancel.If a config references components not currently installed, a dialog lists the missing ones and offers to download and install them via the Component Manager before applying.
Configs exported from BannerHub are fully compatible with BannerHub Lite, and vice versa.
Both apps store per-game Wine settings under the same SharedPreferences keys (pc_g_setting<gameId>) and export to the same folder (/sdcard/BannerHub/configs/). The export format is identical — the app that created the config has no effect on whether it can be imported. The app_source field in the JSON ("bannerhub" or "bannerhub_lite") is only used by the community config site for filtering and is ignored during import.
PC game settings → Core Count is replaced with a multi-select dialog to choose exactly which CPU cores the game process is pinned to.
| Core(s) | Label |
|---|---|
| Core 0–3 | Efficiency |
| Core 4–6 | Performance |
| Core 7 | Prime |
Opening PC game settings while offline no longer blocks with a spinner or error. Container and component lists fall back to empty data, and all settings rows remain fully accessible and editable without a network connection.
When Steam auto-login fails at cold start with no network, BannerHub detects the condition, skips the Steam login screen, and proceeds using the locally cached Steam configuration. You can continue playing your installed Steam library offline.
| Setting | What it does |
|---|---|
| Compatibility API Source | Choose which backend serves the component/compatibility catalog — GameHub (official), EmuReady, or BannerHub. Opens a 3-option picker. See Compatibility API Source below for what each offers |
| CPU Usage Display | Show/hide CPU usage overlay during gameplay |
| Performance Metrics | Show/hide full performance metrics overlay |
| Sustained Performance Mode | Same toggle as the Performance sidebar — available here for convenience outside a running game |
| Grant Root Access | Opens a warning dialog, then runs su -c id on a background thread and stores the result. Performance sidebar reads this pref to enable or grey out the root-dependent toggles — no unsolicited root popup on sidebar open |
BannerHub can pull its component catalog (DXVK, VKD3D, Box64, FEXCore, GPU drivers, containers, compatibility data) from one of three backends. The selector lives in Settings → Advanced → Compatibility API Source and opens a dialog with three options. Picking one saves it, clears the cached component + token data, and shows a toast — restart the app to refresh components against the new source.
| Option | Endpoint | Auth | What it offers |
|---|---|---|---|
| GameHub (default) | XiaoJi's official feed | Your normal app token / login | The stock, unmodified catalog served by XiaoJi upstream. This is what an un-switched install uses. Requires the normal account/login flow. |
| EmuReady | gamehub-lite-api.emuready.workers.dev | fake-token (no login) | A third-party, community-run catalog worker maintained alongside the gamehub-lite project. Not operated by BannerHub. Selecting it bypasses login. |
| BannerHub | bannerhub-api.the412banner.workers.dev | Service token (auto-fetched, 4 h cache) | BannerHub's own curated catalog — hand-picked DXVK/VKD3D/Box64/FEXCore/driver builds and containers, with fallback to the upstream feed for anything not curated. Selecting it bypasses login. |
How it behaves
0). Fresh installs boot on the official source until you change it.SharedPreferences (api_source); a separate last_api_source key lets the app detect a change across restarts and clear stale component/token caches automatically.Note: EmuReady is a separate third-party service — BannerHub neither hosts nor controls its catalog. Use the BannerHub option for the catalog curated by this project, or GameHub for the stock upstream feed.
All three game store activities (GOG, Epic, Amazon) support full D-pad / gamepad controller navigation.
Focus highlight uses gold (#FFD700) consistently across all stores and view modes.
Accessible from the in-game sidebar (three-bar icon) while a game is running. Provides live monitoring and control of the Wine session without leaving the game.
| Tab | What it shows |
|---|---|
| Container Info | CPU cores (WINEMU_CPU_AFFINITY), RAM (/proc/meminfo), VRam (SharedPreferences), device model, Android version |
| Applications | All wine* host processes with PID — tap any row to kill it |
| Processes | All .exe guest processes with PID — tap any row to kill it |
| Launch | WINEPREFIX file browser — navigate directories (yellow ▶), tap any .exe / .msi / .bat / .cmd file (white) to launch it via the Wine binary |
All tabs auto-refresh every 3 seconds. The Kill button at the top terminates the selected process immediately.
The Launch tab lets you run additional executables inside an already-running Wine session — useful for launchers, patchers, or tools that the game itself doesn't start. The browser starts at dosdevices/ in the WINEPREFIX and drills down from there.
A launch guard prevents Wine's "session complete" callback from tearing down the active game session when the secondary executable closes. The guard is released automatically 3 seconds after the secondary process exits.
When selecting a component in per-game settings (DXVK, VKD3D, Box64, FEXCore, or GPU Driver picker), components installed via BannerHub show their description text below the component name. The description is read from profile.json (WCP files) or meta.json (ZIP / adrenotools) at inject time and stored alongside the component.
BannerHub includes a complete 3,468-string Japanese translation covering every screen in the app. When your Android system language is set to Japanese, the app displays fully in Japanese. English users are unaffected — Android's locale fallback uses the default English strings automatically.
Translation contributed by reindex-ot via Crowdin (GameHub's official translation source).
When a game is installed and launched, GameHub creates a Wine virtual container at virtual_containers/{gameId}/ to hold the game's Windows environment. BannerHub ensures this container directory is fully cleaned up when the game is uninstalled, preventing orphaned containers from accumulating on disk over time.
GameDetailActivity is marked excludeFromRecents, so Beacon launches do not leave an orphaned BannerHub task in the recent apps list.base-apk tag in this repo (136 MB).patches/ directory — new smali classes, modified smali files, new resource files, and layout edits.All new BannerHub code lives in smali_classes16/. Existing GameHub smali files that needed modification are patched in place. No external dex files are injected — GameHub's own bundled commons-compress, zstd-jni, and tukaani xz libraries are used at runtime.
smali_classes12 is at the dex method index limit and is never reassembled — the original classes12.dex is extracted from the base APK and zip-injected directly after the rebuild step to bypass the limit.
Q: Does BannerHub require root?
Most features work without root. The only features that require root are the two Performance sidebar toggles (Sustained Performance Mode and Max Adreno Clocks) — both are greyed out and non-interactive on non-rooted devices. All other features — the GOG, Amazon, and Epic Games tabs, Component Manager, component downloader, Winlator HUD, RTS controls, VRAM unlock, core affinity, offline modes, and settings — work on any non-rooted Android device.
Q: Will this replace my existing GameHub install?
Only if you choose a matching package APK. The Normal APK (banner.hub) installs as a completely separate app alongside the official GameHub Lite. The Normal.GHL APK (gamehub.lite) will replace the official GameHub Lite slot — uninstall it first. All other variant APKs replace their respective GameHub variant slots.
Q: Can I use BCI (BannersComponentInjector) with BannerHub?
Yes. BCI grants SAF access to any GameHub package, including banner.hub. Components injected via BCI are visible in BannerHub's Component Manager and vice versa. Launch BCI as a standalone app from your device's home screen or app drawer.
Q: Why does the Max Adreno Clocks toggle require root while some other apps can do it without root?
BannerHub uses a direct sysfs write to /sys/class/kgsl/kgsl-3d0/devfreq/min_freq which is a privileged operation. Some emulators use the KGSL ioctl interface instead, which is accessible to unprivileged apps — but that interface issues a performance hint the driver can still override under thermal pressure. The sysfs approach is a harder lock, at the cost of requiring root.
Q: My GOG game says "Generation 1" — will it still download?
Yes. BannerHub supports Gen 1 downloads via the legacy byte-range download pipeline. If your game is so old that it has no content-system builds at all, the installer fallback will download the Windows .exe installer directly.
Q: Where are GOG / Amazon / Epic games installed?
By default, inside the app's private storage: Android/data/<package>/files/gog_games/<name>/, amazon_games/<name>/, or epic_games/<name>/ respectively. If the Save Store Games to External Storage (SD Card) toggle is enabled in the side menu settings, games install to {SD card}/bannerhub/{store}/{game}/ instead. The toggle only affects these BannerHub stores — Steam games are managed independently. The install path is shown on each game's detail page with a badge indicating whether it is on SD card or internal storage. GOG games have a Copy to Downloads button in the detail dialog to copy files to Downloads/<name>/ for access from any file manager.
Q: Does Amazon login work with two-factor authentication (OTP)?
Yes. BannerHub detects the authorization code directly in the redirect URL regardless of which intermediate pages Amazon routes through during OTP/2FA, so login completes correctly with or without 2FA enabled on your account.
Q: Settings → About → Check Update always says "Already the latest version" — is that broken?
No, that is intentional. BannerHub is pinned to the GameHub 5.3.5 / versionCode 78 base so the Steam shopping card stays visible. The upstream GameHub upgrade endpoint now serves 6.0.x builds, and following that prompt would replace BannerHub with stock GameHub. The Check Update row was stubbed in v3.7.1 to read "Already the latest version" unconditionally and never call GameHub's upgrade endpoint. v3.7.2 extends the stub to the launch-time auto-update dialog (ApkUpdateUtils.checkUpdate) which previously popped on every cold start — that surface is now silent as well. Track BannerHub releases via this GitHub repo or Obtainium instead.
Q: My x86_64 / Box64 games stopped launching on v3.7.0–v3.7.3 — is that fixed?
Yes, in v3.7.4. The v3.7.0 PC Vibration / Rumble feature loaded a helper library (libevshim.so) into Wine via LD_PRELOAD. On Box64, mapping that extra library corrupted the dynarec and made x86_64 game launches die at startup (c000007b / wine has died); arm64 / FEX containers were never affected. v3.7.4 removes the preloaded library entirely and patches winebus.so on disk instead, so sustained rumble still works with no library injected. Update to v3.7.4 and affected x86_64 / Box64 titles launch normally again.
BannerHub Lite is a companion project that ports the same BannerHub features into GameHub Lite 5.1.4 (vanilla, non-ReVanced base). If you are running GameHub Lite rather than GameHub 5.3.5 ReVanced, BannerHub Lite is the correct build to use.
| BannerHub (this) | BannerHub Lite | |
|---|---|---|
| Base app | GameHub 5.3.5 — ReVanced | GameHub Lite 5.1.4 — vanilla |
| APK size | ~138 MB | ~47 MB |
| GOG / Amazon / Epic tabs | Yes | Yes |
| Component Manager + Downloader | Yes | Yes |
| Background download service + Download Manager | Yes | No |
| Winlator HUD (Normal + Extra Detailed) | Yes | Yes |
| Export / Import Config + Frontend Export | Yes | Yes |
| Controller D-pad navigation | Yes | Yes |
| Community Game Configs browser | Yes | No |
| Component descriptions in picker | Yes | No |
| Konkr Style HUD | Yes | No |
| RTS Touch Controls | Patched in | Built into base |
| GPU System Driver default | No | Yes |
| Launch fix (hardware whitelist bypass) | No | Yes |
Game configs exported from either app are cross-compatible — see Per-Game Config Export / Import.
Detailed technical breakdowns of each store integration and feature set — API endpoints, auth flows, data models, download pipelines, and known gotchas.
| Report | Description |
|---|---|
| GOG_IMPLEMENTATION.md | GOG API, OAuth2 auth, Gen1/Gen2 depot manifests, download pipeline, cloud saves, DLC, update checker |
| EPIC_IMPLEMENTATION.md | Epic Games Store API, OAuth2 auth, chunked manifest download, CDN selection, cloud saves, free games, DLC |
| AMAZON_IMPLEMENTATION.md | Amazon Games API, PKCE auth, manifest.proto protobuf, XZ/LZMA decode, FuelPump env vars, SDK DLLs |
| STEAM_IMPLEMENTATION.md | JavaSteam integration, PICS library sync, DepotDownloader, credential + QR auth, depot key caches, critical gotchas |
| STORE_FEATURES_REPORT.md | Cross-store feature comparison matrix |
-EpicPortal, -epicusername, -epicuserid, -epicsandboxid, -epiclocale, -epicdeploymentid and the -AUTH_LOGIN / -AUTH_PASSWORD / -AUTH_TYPE exchange-code triple) plus the deployment-ID sidecar fetch in BannerHub v3.6.1 are a Java port of their work. Specifically, PR #1286 / commit cbea7f7 ("Feat/eos overlay utkarsh"). Without GameNative's research and reverse-engineering of Epic's launcher protocols this feature wouldn't exist in BannerHub. Phase 2 — the in-game EOS overlay UI (Epic friends popup / notifications / achievement toasts) — is still pending and will land in a future BannerHub release. Please support GameNative: https://github.com/utkarshdalal/GameNativeAll APKs are signed with AOSP testkey (testkey.pk8 / testkey.x509.pem), v1 + v2 + v3 signatures via apksigner. The testkey is committed to this repository and is the same key used across all builds and all variants.
Join our Discord: https://discord.gg/n8S4G2WZQ4
Smali
65.9%
Java
34.1%
GameHub 5.3.5 ReVanced — extended with GOG Games, Amazon Games, and Epic Games Store library tabs, a full Component Manager, in-app component downloader, background download service with in-app cross-store download manager, SD card / external storage routing for store game downloads, Winlator HUD overlay (Normal + Extra Detailed + Konkr style with CPU/GPU/RAM/SWAP/temp/per-core metrics), in-game performance toggles, RTS touch controls, VRAM unlock, per-game CPU core affinity, root access management, offline Steam launch, community game configs browser, per-game config export/import with Frontend Export, Japanese locale, in-game voice chat (room-based, no Steam required, cross-compatible with BannerHub v6), per-game PC audio settings (recording-compatible mode), and more. Built entirely with apktool smali patching — no source code, no external library injection.
All smali edits, patches, and code changes in this project are developed with the assistance of Claude AI Sonnet 4.6 by Anthropic. Claude is used to write, review, and modify smali bytecode and Java extension code since this project has no source code to work from — all changes are applied directly to the decompiled APK via apktool.
Before any stable release is published, all changes are manually debugged and tested by me across multiple devices — both rooted and unrooted. Debugging is done using logcat output and in-app debug log files to diagnose and verify behavior before changes are finalized.
Installing the app, installing games, and showcasing all features.
Download the APK that matches your existing GameHub package name from the latest release:
| APK | Package | App Label |
|---|---|---|
BannerHub-vX.Y.Z-Normal.apk | banner.hub | BannerHub |
BannerHub-vX.Y.Z-Normal.GHL.apk | gamehub.lite | BannerHub |
BannerHub-vX.Y.Z-PuBG.apk | com.tencent.ig | BannerHub PuBG |
BannerHub-vX.Y.Z-AnTuTu.apk | com.antutu.ABenchMark | BannerHub AnTuTu |
BannerHub-vX.Y.Z-alt-AnTuTu.apk | com.antutu.benchmark.full | BannerHub AnTuTu |
BannerHub-vX.Y.Z-PuBG-CrossFire.apk | com.tencent.tmgp.cf | BannerHub PuBG CrossFire |
BannerHub-vX.Y.Z-Ludashi.apk | com.ludashi.aibench | BannerHub Ludashi |
BannerHub-vX.Y.Z-Genshin.apk | com.miHoYo.GenshinImpact | BannerHub Genshin |
BannerHub-vX.Y.Z-Original.apk | com.xiaoji.egggame | BannerHub Original |
Which APK do I need?
If you do not already have any GameHub variant installed, use the Normal APK (banner.hub). It installs as a completely separate app alongside the official GameHub Lite — both can coexist. If you want BannerHub to take over the gamehub.lite package slot (e.g. so apps that launch GameHub Lite by package name launch BannerHub instead), use Normal.GHL — but you must uninstall the official GameHub Lite first since they share the same package name and have different signing certificates. If you want to use a specific GameHub variant for performance spoofing (e.g. PuBG or Genshin), pick the matching APK. Be aware: performance spoofing variants push your device harder and generate significantly more heat. Do not use these variants without proper cooling and a clear understanding of what you are doing. Use at your own risk.
All 9 variants can be installed simultaneously. All APKs are signed with AOSP testkey (v1/v2/v3).
Note: You must uninstall your existing BannerHub build before installing a new release if the signing certificate changed. Data is not preserved across uninstall.
Use Obtainium to automatically track and install new BannerHub stable releases directly from GitHub — no manual checking required.
Add this repo (https://github.com/The412Banner/BannerHub) as an app source in Obtainium. Starting with v3.4.0, BannerHub reports its own version number to Android (e.g. 3.4.0) instead of the base GameHub version, so Obtainium can correctly detect when a new release is available and prompt you to update.
Required setting: When adding BannerHub in Obtainium, enable "Reconcile version string with version detected from OS". This tells Obtainium to compare the GitHub release tag against the version installed on your device. Without this, Obtainium may not detect version changes correctly.
[!WARNING] Only track stable releases in Obtainium. Pre-release builds use a different package name (
com.tencent.ig) and cannot be upgraded to stable without uninstalling first — installing a pre-release over a stable build will break your install.
Accessible via the left side menu → GOG.
For the complete technical implementation breakdown, see GOG_IMPLEMENTATION.md (API endpoints, auth flow, manifest format, download pipeline, BannerHub integration guide).
bh_gog_prefs SharedPreferences file.BannerHub supports both GOG's current and legacy download systems:
Generation 2 (Galaxy-era games):
content-system.gog.com/products/{id}/os/windows/buildsfilesDir/gog_games/{title}/Generation 1 (pre-Galaxy legacy games):
generation=1 parameterdepot.files[], skips support-only filesRange HTTP requests (byte-range resumable download)Installer fallback (very old pre-Galaxy games with no content-system builds):
api.gog.com/products/{id}?expand=downloadsdownlink or manualUrl from the downloads object.exe directlyMulti-CDN failover (v3.7.3+): Each file probes every CDN advertised in the depot manifest (typically 4–6 endpoints) and falls back automatically when one rejects with HTTP 403 / 404 / 5xx. A CDN picker in the install-confirm dialog (with a ↻ Refresh button to re-fetch the live CDN list) lets you pin a specific CDN if your network plays better with one. When a download is interrupted mid-stream, the install state is recorded as PARTIAL so the next tap resumes from the same per-file progress instead of restarting from scratch. Originally ported from utkarshdalal/GameNative upstream PRs (see release notes for credits).
ProgressBar + status text replaces the Install button during download. Live progress is also visible in the Download Manager.EditImportedGameInfoDialog pre-populated with the executable path.bh_gog_prefs is read on every app open; already-installed cards show checkmark and Add button automatically.EditImportedGameInfoDialog.filesDir/gog_games/{dirName}/ to Downloads/{dirName}/.Accessible via the left side menu → Amazon Games.
For the complete technical implementation breakdown, see AMAZON_IMPLEMENTATION.md (PKCE auth, GetEntitlements API, manifest.proto format, XZ/LZMA decode, FuelPump env vars, SDK DLL deployment, BannerHub integration guide).
Pipeline based on research by The GameNative Team.
openid.oa2.authorization_code= in any redirect URL, so it works correctly through OTP / 2FA intermediate pages without hanging. Tokens are stored in bh_amazon_prefs.GetEntitlements. Each entry includes title, product SKU, entitlement ID, and cover art.GetGameDownload to retrieve the CDN download URL and version IDmanifest.proto — a protobuf manifest listing every file with its CDN hash path, size, and SHA-256 checksumDownloads run via the BhDownloadService foreground service — a persistent notification with a Cancel action appears in the notification tray and the download continues if you leave the screen. Live progress is also visible in the Download Manager.
fuel.json from the install directory to determine the executable and required FuelPump environment variables, then launches via GameHub's EditImportedGameInfoDialogFuelSDK_x64.dll and AmazonGamesSDK_* DLLs are deployed to the install directory at launch timeAccessible via the left side menu → Epic Games.
For the complete technical implementation breakdown, see EPIC_IMPLEMENTATION.md (OAuth2 auth, library API, manifest format, CDN selection, chunk download pipeline, BannerHub integration guide).
Pipeline based on research by The GameNative Team.
authorizationCode from Epic's JSON redirect response body via evaluateJavascript, exchanges it for tokens using the Legendary client credentials, and stores them in bh_epic_prefs.Downloads run via the BhDownloadService foreground service — a persistent notification with a Cancel action appears in the notification tray and the download continues if you leave the screen. Live progress is also visible in the Download Manager.
pending_epic_exe in SharedPreferences → picked up by the main launcher activity → opens EditImportedGameInfoDialogAccessible via the left side menu → Components.
The Component Manager gives you full control over the WCP/ZIP components that GameHub uses to run Windows games — the DXVK, VKD3D, Box64, FEXCore, and GPU Driver entries that appear in per-game settings.
Each installed component is displayed as a compact card with:
| Action | How to trigger | What it does |
|---|---|---|
| Inject file | Tap a card, select a WCP or ZIP | Replaces the component's contents with the new file. The folder is cleared first — no stale files |
| Add New Component | Tap "+ Add New" in the bottom bar | Injects a WCP or ZIP as a brand new component slot. It immediately appears in GameHub's DXVK/VKD3D/Box64/FEXCore/GPU Driver selection menus and persists across restarts |
| Backup | Swipe RIGHT on a card | Copies the component folder to Downloads/BannerHub/{name}/ |
| Remove | Swipe LEFT on a card | Unregisters the component from GameHub's in-memory map, deletes the folder on disk, and clears its downloaded indicator in the online repo browser |
| Remove All | Tap "Remove All" | Removes only BannerHub-managed components. The confirmation dialog shows the exact count. Stock GameHub components are never touched |
| Format | Used by | Extraction |
|---|---|---|
| ZIP (PK magic) | Turnip, adrenotools GPU drivers | Flat extraction — meta.json + .so files land directly in the component root |
Zstd-compressed tar (.wcp) | DXVK, VKD3D, Box64 | Preserves system32/ + syswow64/ internal structure |
XZ-compressed tar (.wcp) | FEXCore nightlies | Flat extraction to component root |
BannerHub uses GameHub's own bundled libraries (commons-compress, zstd-jni, tukaani xz) for extraction — no external dependencies are injected, so there are no class loader conflicts.
Inside the Component Manager, tap Download at the bottom of the screen to open the Download Components browser and install components directly from GitHub without leaving the app.
Three-level navigation: Repo → Category → Asset list
Tapping any asset downloads it to the cache directory and injects it as a new component automatically, with a progress screen showing "Downloading: <filename>" during the fetch.
| Source | Format | Types available |
|---|---|---|
| Arihany WCPHub | pack.json flat manifest | DXVK, VKD3D, Box64, FEXCore, GPU Drivers |
| The412Banner Nightlies | GitHub Releases API (nightly-* tag) | DXVK, VKD3D-Proton, Box64, FEXCore, GPU Drivers |
| Kimchi GPU Drivers | GitHub Releases API | GPU Drivers only |
| StevenMXZ GPU Drivers | GitHub Releases API | GPU Drivers only |
| MTR GPU Drivers (MaxesTechReview) | rankings.json | GPU Drivers only |
| Whitebelyash GPU Drivers | GitHub Releases API | GPU Drivers only |
A ⬇ button in the launcher dashboard opens the Download Manager (BhDownloadsActivity) — a live cross-store download dashboard accessible from anywhere in the app. The button updates in real time: at rest it shows ⬇; when one or more downloads are active it shows a red count badge (e.g. ⬇ 2) that increments and decrements as jobs start and finish.
A persistent screen showing all active and completed downloads across GOG, Amazon, and Epic simultaneously:
ProgressBar. A Cancel button stops the download immediately and cleans up partial files.bh_library SharedPreferences and are shown as completed rows with a color-coded store badge. Each row has:
EditImportedGameInfoDialog pre-populated with the stored executable pathThe ⬇ button in each store's header (GOG, Amazon, Epic) also opens the Download Manager directly from within the store view.
All downloads are handled by BhDownloadService, an Android foreground service. A persistent notification with a Cancel action appears in the notification tray for each active download. Downloads survive leaving the detail screen, switching apps, or navigating elsewhere in BannerHub.
A "Save Store Games to External Storage (SD Card)" toggle in the BannerHub side menu settings controls where GOG, Epic, and Amazon game downloads are saved. Steam games are unaffected — this toggle only governs the BannerHub-added stores.
Android/data/<package>/files/{store}/{game}/{SD card}/bannerhub/{store}/{game}/ — visible as a bannerhub/ folder at the root of the SD card with subfolders per store (gog_games/, epic_games/, Amazon/)Turning the toggle on or off shows a confirmation dialog explaining what will change before anything is applied. Pressing Cancel reverts the switch without making any change.
Install location is locked at install time. The full absolute path is saved to SharedPreferences the moment a game finishes installing. All uninstall paths (game list, detail page, download manager) read and delete from that stored path directly — the toggle state at uninstall time is irrelevant. Installing with the toggle on, flipping it off, then uninstalling will still correctly remove the game from the SD card.
Upgrading from v3.5.0? That release accidentally moved Steam games to SD card alongside GOG/Epic/Amazon when the toggle was on. The first time you open a GOG/Epic/Amazon library after upgrading, BannerHub will offer a one-time prompt to switch Steam back to internal storage. From v3.6.0 onward this toggle is BannerHub-only and never touches Steam.
Install path display: each game's detail page shows the full install path in the ACTIONS card when the game is installed, alongside a colored badge indicating the storage location:
An in-game heads-up display that shows real-time performance metrics while a game is running. Accessible from the in-game Performance sidebar.
Three HUD modes are available (only one active at a time):
A second, expanded overlay that replaces the Normal HUD when the Extra Detailed checkbox is enabled. Displays a richer set of metrics:
Available in both horizontal (metrics displayed side-by-side in two aligned rows) and vertical (one metric per row) layouts — toggled with the same Orientation switch as the Normal HUD.
The Extra Detailed checkbox is automatically grayed out and disabled when the Winlator HUD toggle is off.
The Extra Detail HUD is a continuation and extension of the Winlator HUD by Stevenmxz. The additional metrics and layout were inspired by the performance HUD built into my personal device — no credit is claimed from any external project.
A third HUD style, mutually exclusive with Extra Detailed. Enable via the Konkr Style checkbox in the Performance sidebar. Reproduces the layout of the Konkr strategy game's built-in HUD.
Vertical (default): a 2-column table with:
Horizontal: a compact multi-column strip — FPS block (current/min FPS + CPU temp), CPU 2×4 core grid, GPU block, thermal/power 2-column block, memory block with colored label backgrounds.
Tap anywhere on the HUD to toggle between vertical and horizontal. Drag to reposition. The opacity slider applies to the Konkr HUD.
Note: Not all data collected and displayed will always be correct. Each device detects and reads data differently. Values are read directly from sysfs/proc and may vary in accuracy depending on your device, kernel, and thermal zone mapping.
All position, orientation, and opacity settings are persisted in SharedPreferences and restored automatically the next time the Performance sidebar is opened.
Located in the in-game Performance sidebar tab, above the Dual Battery Mode toggle. Both toggles persist their state in bh_prefs SharedPreferences and are re-applied automatically every time the Performance sidebar is opened.
WARNING — USE AT YOUR OWN RISK
These toggles override your device's thermal management. Forcing the CPU and GPU to run at maximum frequency continuously generates significantly more heat than normal operation. Sustained high temperatures can cause permanent damage to your device's processor, battery, and other components. Device manufacturers do not support or warrant against damage caused by overriding performance governors. By using these toggles you accept full responsibility for any damage, data loss, throttling, unexpected shutdowns, or reduced component lifespan that results. Do not leave these enabled unattended. Monitor your device temperature. Disable them immediately if your device becomes uncomfortably hot.
Both toggles require root. Without root, both are greyed out at 50% opacity and non-interactive. Root access is checked once when you grant it in Settings → Advanced — there is no root popup every time the sidebar opens.
Sets all CPU cores to the performance frequency governor via su, eliminating all downclocking while the toggle is on. On disable, schedutil is restored.
# Enable
for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo performance > "$f"; done
# Disable
for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo schedutil > "$f"; done
Locks the Qualcomm Adreno GPU clock floor equal to the ceiling via the KGSL devfreq sysfs interface, so the GPU cannot downclock under any load condition short of a kernel thermal emergency.
# Enable — set min_freq = max_freq
cat /sys/class/kgsl/kgsl-3d0/devfreq/max_freq > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq
# Disable — remove floor
echo 0 > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq
Use both toggles together for maximum sustained CPU + GPU performance (root required).
🙏 Credit: The AI frame interpolation engine itself —
libGameScopeVK, theVK_NV_optical_flowAdreno path, the optical-flow synthesis pipeline, and the 6 quality presets — is the work of the GameHub team, who built it into GameHub 6.0.1. BannerHub adds only the user-facing wiring: the in-game sidebar entry, the settings dialog, persistence across launches, and the runtime ICD JSON path fix. All the heavy lifting that actually generates interpolated frames is theirs.
A new sidebar entry that drives GameHub 6.0.1's built-in libGameScopeVK AI frame-interpolation engine — generates synthetic in-between frames using Vulkan-side optical-flow vectors so your effective frame rate roughly doubles on supported hardware. No more hex-editing gamescope.control to use it.
📖 For the full technical breakdown — data classes, the 10-byte
gamescope.controlmmap protocol, libGameScopeVK Vulkan ICD, theVK_NV_optical_flowAdreno path, per-GPU capability gating, and the action/state classes — seegamehub_reports/GAMEHUB_600_MASTER_MAP.md§ 26.8 (AI Frame Generation — Technical Deep Dive).🧩 BannerHub-side deep dive — for a combined report covering the BannerHub
feature/framegen-menuimplementation, the runtime ICD-path fix, the launcher-regenerator gotcha, the 18:23 A/B failure post-mortem, verified 20:30 FPS results, and a layman's-terms breakdown of how all this works, seeAI_FRAME_GENERATION_REPORT.md.
When the renderer produces a real frame, libGameScopeVK uses Adreno's hardware optical-flow extension (VK_NV_optical_flow) to compute motion vectors between the previous real frame and the current one, then synthesises one (or more) interpolated frame(s) in between. Those synthetic frames are pushed into the swapchain so the displayed framerate is a multiple of the rendered framerate. The GPU never has to draw the in-between frames from scratch — the real bottleneck (your game's CPU/GPU rendering work) is unchanged, but the screen sees twice (or more) the frames.
Open any PC game's in-game sidebar and tap the Performance tab. You'll see a new AI Frame Generation row above Dual Battery Mode, with:
gamescope.control and persists)The gear icon appears next to the sidebar switch only when AI Frame Generation is enabled (v3.7.3+). Tapping it opens a translucent dialog over the dimmed game view:
| Setting | Range / Options | What it does |
|---|---|---|
| Preset | Eco / Flow / Bal / Boost / Clear / Max | 6 named profiles that bundle a quality model and flow-scale value. Map: Eco=model 0/flow 0.2, Flow=0/0.4, Bal=0/0.6 (default), Boost=0/0.8, Clear=1/0.6, Max=1/0.8. Mirrors GameHub 6.0.1's AiFrameInterpolationMode enum |
| Custom flow scale | 0.20–1.00 | AI optical-flow strength. Lower = cheaper, more artifacts on fast motion. Higher = cleaner but more GPU cost. Defaults to whatever the chosen preset says; moving the slider overrides it |
A blue Close button dismisses; tapping outside the panel also dismisses. The sidebar switch is the single source of truth for on/off — there is no in-dialog Enable toggle. The multiplier is fixed at 2× (the only validated path on tested hardware).
Every change is applied immediately to the running game (writes through gamescope.control mmap) and saved to SharedPreferences so the value persists.
The FPS-limit byte (bytes 0–1 of gamescope.control) is owned by GameHub's separate sidebar control — our writer deliberately leaves it alone so toggling frame-gen never clobbers your existing FPS cap.
Bal preset, 2× multiplier. This is the default for a reason — clean output without spending much GPU on the optical-flow pass.Eco or Flow if you're already GPU-bound and frame-gen costs more than it gains.Clear or Max if you have GPU headroom and want the cleanest possible interpolated frames (uses model 1, the higher-quality compositor path).On a working device, roughly 1.8–1.9× FPS scaling at 2× multiplier — e.g. 42 FPS off → 75–80 FPS on (validated via the in-game overlay during testing).
Settings are global (per-game scoping is a v2 candidate). They persist across game launches via two layers:
bh_framegen.xml (keys: enabled, preset, flowScale, model).WineActivity.onCreate and WineActivity.onResume re-apply all saved values to gamescope.control, so the AI overlay survives both fresh launches and Home/lock/resume cycles (v3.7.3 added the onResume hook — previously, resuming the game left the sidebar switch saying "ON" while the overlay was silently dead). The regenerator zeros byte 0 every launch, which is why the onCreate hook runs after it. The Vulkan ICD JSON is also re-written at launch using your APK's actual package name, so the menu works on any installed package — including manually-renamed APKs.Note — requires Adreno GPU. GameHub 6.0.1's frame interpolation engine uses
VK_NV_optical_flow, which on Android is currently only exposed by Qualcomm Adreno drivers. The menu controls work on any device but the actual frame interpolation is silently skipped on Mali, Xclipse, and other non-Adreno GPUs — you'll see the toggle move but not the FPS gain.
Caveats. Frame interpolation can introduce mild visual artifacts on fast camera motion or particle-heavy scenes, and adds a small amount of input-to-display latency by definition (the displayed frame is half a real frame "behind" the engine). Both are inherent to interpolated frame generation, not BannerHub-specific.
Thanks to @Nightwalker743 for making this possible.
Enable via the Controls tab in the in-game sidebar. Adds a full gesture overlay for PC strategy and RTS games that maps touch gestures to mouse inputs inside the Wine environment.
| Gesture | Mouse action |
|---|---|
| Single tap | Move cursor + left-click at tap position |
| Drag | Hold LMB while dragging — draws a box selection |
| Long press (300 ms) | Right-click at press position |
| Double-tap (within 250 ms / 50 px) | Double left-click |
| Two-finger pan | Camera pan (direction configurable) |
| Pinch to zoom | Mouse wheel scroll up/down (configurable) |
Tap the gear icon in the Controls tab to configure pan direction and pinch-to-zoom scroll direction.
Thanks to @TideGear for the original feature (PR #80, from GameNative PR #1214) and for the v3.7.4 x86_64 / Box64 compatibility rework (PR #91).
Routes Wine's XInputSetState(slot, low, high) rumble calls into Android's VibratorManager so PC games actually shake your controller.
CombinedVibration.startParallellow × 0.80 + high × 0.33) on 1-motor pads and the phone vibratorwinebus.so in the container is patched on disk so SDL2's ~1 s rumble auto-expiry never fires, giving continuous rumble for as long as the game asks for it. This replaces the v3.7.0–v3.7.3 libevshim.so LD_PRELOAD shim, which mapped an extra library into the Wine process and broke x86_64 / Box64 game launches (see scope notes). No extra library is loaded anymore — same sustained-rumble behavior, no launch regression.VibratorManager.cancel(), since Samsung's BT-HID effect path doesn't reliably halt on bare cancelA new PC Vibration Settings entry appears in each game's popup options menu, right after PC Game Settings:
| Setting | Options |
|---|---|
| Mode | Off / Controller / Device / Both |
| Intensity | 0–100% slider |
Settings live in the stock pc_g_setting<gameId> SharedPreferences under bh_vibration_* keys, so the existing Export / Import Config flow picks them up automatically.
libevshim.so into Wine via LD_PRELOAD; on Box64 this corrupted the dynarec and made x86_64 game launches die at startup (c000007b / wine has died). v3.7.4 removes the preloaded library entirely — x86_64 / Box64 titles now launch normally with rumble intact. arm64 / FEX containers were never affected.New in v3.8.0. A per-game PC Audio Settings entry in each game's popup options menu, right after PC Vibration Settings.
Stock GameHub loads module-aaudio-sink with no performance-mode argument, so PulseAudio opens a LOW_LATENCY AAudio stream the framework can grant as exclusive MMAP — which bypasses the AudioFlinger mixer that screen recorders tap (MediaProjection's AudioPlaybackCapture). The result: Android screen recordings capture video but no game audio whenever the in-game audio driver is PulseAudio. (ALSA uses a legacy mixed AudioTrack and records fine.)
| Setting | Options |
|---|---|
| PulseAudio mode | Low latency (default) / Recording-compatible |
Recording-compatible routes the default.pa sink line through the extension, appending pm=0 — the module computes setPerformanceMode(pm + 10), so 0 → PERFORMANCE_MODE_NONE → the stream stays on the mixer and screen recordings capture in-game sound. The active game's gameId is resolved from the live WineActivity's WineActivityData field (the 5.3.5 launch intent carries no gameId extra). Settings live in the stock pc_g_setting<gameId> SharedPreferences, so the existing Export / Import Config flow carries them automatically.
New in v3.8.0. A built-in voice chat overlay you can use while in a game — no Steam, no root, no extra app. Identity is a user-chosen nickname plus a stable per-install client id; there are no friends lists and no ringing — it's a room model: Create or Join a room by a short code, or share a join link.
A new Voice Chat item appears in the dashboard side menu under Game Configs → opens a settings screen with a nickname field + Check availability. An Activate toggle stays disabled until the name is confirmed free; ticking it claims the name and turns the in-game pill on. The pill only attaches in-game once a nickname is claimed and activated.
A draggable edge pill opens a room box that shows the live roster (everyone's nickname), a call timer, and Mute / Leave; the pill stays pinned to the edge while the box drags freely, with a collapsible opacity slider. The mic is requested at runtime on activation.
Voice rides the same WebRTC mesh served from the BannerHub Cloudflare Worker (with Cloudflare Realtime TURN for strict NATs) that BannerHub v6 uses — so a BannerHub user and a BannerHub v6 user can share the same room and talk, in either direction. Rooms are identity-agnostic (any two clients on the same room code connect), and room codes use the same format on both builds. Device-confirmed both ways across different networks.
PC game settings → VRAM Limit now includes 6 GB, 8 GB, 12 GB, and 16 GB options in addition to the original GameHub range of 512 MB through 4 GB.
Accessible via the left side menu → Game Configs. A four-screen community browser for sharing and downloading per-game Wine/DXVK/component configurations.
games.json file refreshed every 30 minutes and on every new uploadSamsung SM-G998B • Adreno 750 • 89 games); updates to X of Y games while the search box is activeAll configs are stored in The412Banner/bannerhub-game-configs. The community is powered by a Cloudflare Worker — votes, downloads, descriptions, and comments are tracked without any account required.
You can also browse, search, filter, and download configs from the web at the412banner.github.io/bannerhub-game-configs — no app required.
The community database grows through contributions — if you find settings that work well for a game on your device, sharing them helps other users get a working config without trial and error.
PC game settings include Export Config, Frontend Export, and Import Config options.
Opens a preview dialog showing what will be exported before any file is created:
Then choose:
/sdcard/BannerHub/configs/ on your deviceThe exported filename embeds the game name, device manufacturer, device model, and SOC (e.g. GodOfWar-Samsung-SM_S928B-Adreno_750-1234567890.json).
A separate Frontend Export option in the PC game settings popup creates a launcher .iso file for use with a supported frontend instead of exporting a BannerHub config JSON.
Downloads/bannerhub/frontend/Beacon/{gameName}.isoDownloads/bannerhub/frontend/ES-DE/{gameName}.steamBoth use the same game ID logic — localGameId for imported games, getSteamAppId() for catalog games.
ES-DE note: If the exported
.steamfile doesn't work for a particular game, RobZombie9043/steam-files-es-de is a community resource with pre-made.steamfiles for Steam catalog games.
A dialog lets you choose:
.json files saved in /sdcard/BannerHub/configs/. Selecting a file shows a preview card (device, SOC, settings count, components count) with a ⚠ SOC mismatch warning if the config was made on a different GPU. Tap Apply to proceed or Cancel.If a config references components not currently installed, a dialog lists the missing ones and offers to download and install them via the Component Manager before applying.
Configs exported from BannerHub are fully compatible with BannerHub Lite, and vice versa.
Both apps store per-game Wine settings under the same SharedPreferences keys (pc_g_setting<gameId>) and export to the same folder (/sdcard/BannerHub/configs/). The export format is identical — the app that created the config has no effect on whether it can be imported. The app_source field in the JSON ("bannerhub" or "bannerhub_lite") is only used by the community config site for filtering and is ignored during import.
PC game settings → Core Count is replaced with a multi-select dialog to choose exactly which CPU cores the game process is pinned to.
| Core(s) | Label |
|---|---|
| Core 0–3 | Efficiency |
| Core 4–6 | Performance |
| Core 7 | Prime |
Opening PC game settings while offline no longer blocks with a spinner or error. Container and component lists fall back to empty data, and all settings rows remain fully accessible and editable without a network connection.
When Steam auto-login fails at cold start with no network, BannerHub detects the condition, skips the Steam login screen, and proceeds using the locally cached Steam configuration. You can continue playing your installed Steam library offline.
| Setting | What it does |
|---|---|
| Compatibility API Source | Choose which backend serves the component/compatibility catalog — GameHub (official), EmuReady, or BannerHub. Opens a 3-option picker. See Compatibility API Source below for what each offers |
| CPU Usage Display | Show/hide CPU usage overlay during gameplay |
| Performance Metrics | Show/hide full performance metrics overlay |
| Sustained Performance Mode | Same toggle as the Performance sidebar — available here for convenience outside a running game |
| Grant Root Access | Opens a warning dialog, then runs su -c id on a background thread and stores the result. Performance sidebar reads this pref to enable or grey out the root-dependent toggles — no unsolicited root popup on sidebar open |
BannerHub can pull its component catalog (DXVK, VKD3D, Box64, FEXCore, GPU drivers, containers, compatibility data) from one of three backends. The selector lives in Settings → Advanced → Compatibility API Source and opens a dialog with three options. Picking one saves it, clears the cached component + token data, and shows a toast — restart the app to refresh components against the new source.
| Option | Endpoint | Auth | What it offers |
|---|---|---|---|
| GameHub (default) | XiaoJi's official feed | Your normal app token / login | The stock, unmodified catalog served by XiaoJi upstream. This is what an un-switched install uses. Requires the normal account/login flow. |
| EmuReady | gamehub-lite-api.emuready.workers.dev | fake-token (no login) | A third-party, community-run catalog worker maintained alongside the gamehub-lite project. Not operated by BannerHub. Selecting it bypasses login. |
| BannerHub | bannerhub-api.the412banner.workers.dev | Service token (auto-fetched, 4 h cache) | BannerHub's own curated catalog — hand-picked DXVK/VKD3D/Box64/FEXCore/driver builds and containers, with fallback to the upstream feed for anything not curated. Selecting it bypasses login. |
How it behaves
0). Fresh installs boot on the official source until you change it.SharedPreferences (api_source); a separate last_api_source key lets the app detect a change across restarts and clear stale component/token caches automatically.Note: EmuReady is a separate third-party service — BannerHub neither hosts nor controls its catalog. Use the BannerHub option for the catalog curated by this project, or GameHub for the stock upstream feed.
All three game store activities (GOG, Epic, Amazon) support full D-pad / gamepad controller navigation.
Focus highlight uses gold (#FFD700) consistently across all stores and view modes.
Accessible from the in-game sidebar (three-bar icon) while a game is running. Provides live monitoring and control of the Wine session without leaving the game.
| Tab | What it shows |
|---|---|
| Container Info | CPU cores (WINEMU_CPU_AFFINITY), RAM (/proc/meminfo), VRam (SharedPreferences), device model, Android version |
| Applications | All wine* host processes with PID — tap any row to kill it |
| Processes | All .exe guest processes with PID — tap any row to kill it |
| Launch | WINEPREFIX file browser — navigate directories (yellow ▶), tap any .exe / .msi / .bat / .cmd file (white) to launch it via the Wine binary |
All tabs auto-refresh every 3 seconds. The Kill button at the top terminates the selected process immediately.
The Launch tab lets you run additional executables inside an already-running Wine session — useful for launchers, patchers, or tools that the game itself doesn't start. The browser starts at dosdevices/ in the WINEPREFIX and drills down from there.
A launch guard prevents Wine's "session complete" callback from tearing down the active game session when the secondary executable closes. The guard is released automatically 3 seconds after the secondary process exits.
When selecting a component in per-game settings (DXVK, VKD3D, Box64, FEXCore, or GPU Driver picker), components installed via BannerHub show their description text below the component name. The description is read from profile.json (WCP files) or meta.json (ZIP / adrenotools) at inject time and stored alongside the component.
BannerHub includes a complete 3,468-string Japanese translation covering every screen in the app. When your Android system language is set to Japanese, the app displays fully in Japanese. English users are unaffected — Android's locale fallback uses the default English strings automatically.
Translation contributed by reindex-ot via Crowdin (GameHub's official translation source).
When a game is installed and launched, GameHub creates a Wine virtual container at virtual_containers/{gameId}/ to hold the game's Windows environment. BannerHub ensures this container directory is fully cleaned up when the game is uninstalled, preventing orphaned containers from accumulating on disk over time.
GameDetailActivity is marked excludeFromRecents, so Beacon launches do not leave an orphaned BannerHub task in the recent apps list.base-apk tag in this repo (136 MB).patches/ directory — new smali classes, modified smali files, new resource files, and layout edits.All new BannerHub code lives in smali_classes16/. Existing GameHub smali files that needed modification are patched in place. No external dex files are injected — GameHub's own bundled commons-compress, zstd-jni, and tukaani xz libraries are used at runtime.
smali_classes12 is at the dex method index limit and is never reassembled — the original classes12.dex is extracted from the base APK and zip-injected directly after the rebuild step to bypass the limit.
Q: Does BannerHub require root?
Most features work without root. The only features that require root are the two Performance sidebar toggles (Sustained Performance Mode and Max Adreno Clocks) — both are greyed out and non-interactive on non-rooted devices. All other features — the GOG, Amazon, and Epic Games tabs, Component Manager, component downloader, Winlator HUD, RTS controls, VRAM unlock, core affinity, offline modes, and settings — work on any non-rooted Android device.
Q: Will this replace my existing GameHub install?
Only if you choose a matching package APK. The Normal APK (banner.hub) installs as a completely separate app alongside the official GameHub Lite. The Normal.GHL APK (gamehub.lite) will replace the official GameHub Lite slot — uninstall it first. All other variant APKs replace their respective GameHub variant slots.
Q: Can I use BCI (BannersComponentInjector) with BannerHub?
Yes. BCI grants SAF access to any GameHub package, including banner.hub. Components injected via BCI are visible in BannerHub's Component Manager and vice versa. Launch BCI as a standalone app from your device's home screen or app drawer.
Q: Why does the Max Adreno Clocks toggle require root while some other apps can do it without root?
BannerHub uses a direct sysfs write to /sys/class/kgsl/kgsl-3d0/devfreq/min_freq which is a privileged operation. Some emulators use the KGSL ioctl interface instead, which is accessible to unprivileged apps — but that interface issues a performance hint the driver can still override under thermal pressure. The sysfs approach is a harder lock, at the cost of requiring root.
Q: My GOG game says "Generation 1" — will it still download?
Yes. BannerHub supports Gen 1 downloads via the legacy byte-range download pipeline. If your game is so old that it has no content-system builds at all, the installer fallback will download the Windows .exe installer directly.
Q: Where are GOG / Amazon / Epic games installed?
By default, inside the app's private storage: Android/data/<package>/files/gog_games/<name>/, amazon_games/<name>/, or epic_games/<name>/ respectively. If the Save Store Games to External Storage (SD Card) toggle is enabled in the side menu settings, games install to {SD card}/bannerhub/{store}/{game}/ instead. The toggle only affects these BannerHub stores — Steam games are managed independently. The install path is shown on each game's detail page with a badge indicating whether it is on SD card or internal storage. GOG games have a Copy to Downloads button in the detail dialog to copy files to Downloads/<name>/ for access from any file manager.
Q: Does Amazon login work with two-factor authentication (OTP)?
Yes. BannerHub detects the authorization code directly in the redirect URL regardless of which intermediate pages Amazon routes through during OTP/2FA, so login completes correctly with or without 2FA enabled on your account.
Q: Settings → About → Check Update always says "Already the latest version" — is that broken?
No, that is intentional. BannerHub is pinned to the GameHub 5.3.5 / versionCode 78 base so the Steam shopping card stays visible. The upstream GameHub upgrade endpoint now serves 6.0.x builds, and following that prompt would replace BannerHub with stock GameHub. The Check Update row was stubbed in v3.7.1 to read "Already the latest version" unconditionally and never call GameHub's upgrade endpoint. v3.7.2 extends the stub to the launch-time auto-update dialog (ApkUpdateUtils.checkUpdate) which previously popped on every cold start — that surface is now silent as well. Track BannerHub releases via this GitHub repo or Obtainium instead.
Q: My x86_64 / Box64 games stopped launching on v3.7.0–v3.7.3 — is that fixed?
Yes, in v3.7.4. The v3.7.0 PC Vibration / Rumble feature loaded a helper library (libevshim.so) into Wine via LD_PRELOAD. On Box64, mapping that extra library corrupted the dynarec and made x86_64 game launches die at startup (c000007b / wine has died); arm64 / FEX containers were never affected. v3.7.4 removes the preloaded library entirely and patches winebus.so on disk instead, so sustained rumble still works with no library injected. Update to v3.7.4 and affected x86_64 / Box64 titles launch normally again.
BannerHub Lite is a companion project that ports the same BannerHub features into GameHub Lite 5.1.4 (vanilla, non-ReVanced base). If you are running GameHub Lite rather than GameHub 5.3.5 ReVanced, BannerHub Lite is the correct build to use.
| BannerHub (this) | BannerHub Lite | |
|---|---|---|
| Base app | GameHub 5.3.5 — ReVanced | GameHub Lite 5.1.4 — vanilla |
| APK size | ~138 MB | ~47 MB |
| GOG / Amazon / Epic tabs | Yes | Yes |
| Component Manager + Downloader | Yes | Yes |
| Background download service + Download Manager | Yes | No |
| Winlator HUD (Normal + Extra Detailed) | Yes | Yes |
| Export / Import Config + Frontend Export | Yes | Yes |
| Controller D-pad navigation | Yes | Yes |
| Community Game Configs browser | Yes | No |
| Component descriptions in picker | Yes | No |
| Konkr Style HUD | Yes | No |
| RTS Touch Controls | Patched in | Built into base |
| GPU System Driver default | No | Yes |
| Launch fix (hardware whitelist bypass) | No | Yes |
Game configs exported from either app are cross-compatible — see Per-Game Config Export / Import.
Detailed technical breakdowns of each store integration and feature set — API endpoints, auth flows, data models, download pipelines, and known gotchas.
| Report | Description |
|---|---|
| GOG_IMPLEMENTATION.md | GOG API, OAuth2 auth, Gen1/Gen2 depot manifests, download pipeline, cloud saves, DLC, update checker |
| EPIC_IMPLEMENTATION.md | Epic Games Store API, OAuth2 auth, chunked manifest download, CDN selection, cloud saves, free games, DLC |
| AMAZON_IMPLEMENTATION.md | Amazon Games API, PKCE auth, manifest.proto protobuf, XZ/LZMA decode, FuelPump env vars, SDK DLLs |
| STEAM_IMPLEMENTATION.md | JavaSteam integration, PICS library sync, DepotDownloader, credential + QR auth, depot key caches, critical gotchas |
| STORE_FEATURES_REPORT.md | Cross-store feature comparison matrix |
-EpicPortal, -epicusername, -epicuserid, -epicsandboxid, -epiclocale, -epicdeploymentid and the -AUTH_LOGIN / -AUTH_PASSWORD / -AUTH_TYPE exchange-code triple) plus the deployment-ID sidecar fetch in BannerHub v3.6.1 are a Java port of their work. Specifically, PR #1286 / commit cbea7f7 ("Feat/eos overlay utkarsh"). Without GameNative's research and reverse-engineering of Epic's launcher protocols this feature wouldn't exist in BannerHub. Phase 2 — the in-game EOS overlay UI (Epic friends popup / notifications / achievement toasts) — is still pending and will land in a future BannerHub release. Please support GameNative: https://github.com/utkarshdalal/GameNativeAll APKs are signed with AOSP testkey (testkey.pk8 / testkey.x509.pem), v1 + v2 + v3 signatures via apksigner. The testkey is committed to this repository and is the same key used across all builds and all variants.
Join our Discord: https://discord.gg/n8S4G2WZQ4
Smali
65.9%
Java
34.1%