* l10n: move hard-coded UI text into string resources (#212) About 650 user-facing strings were written in Kotlin and Java, so no translation could reach them and the UI stayed half English in every language. They now live in values/strings.xml. - Dialogs, menus, status lines, toasts and errors shown to the user go through getString/stringResource. - Code that matched on English text now uses IDs: installer and loading stages, Decky stages, storage labels and the Back button's order labels. - Choice lists (upscalers, FPS limits, textures, themes, presets) carry @StringRes labels instead of English. - Robolectric tests read the app's resources (includeAndroidResources). - Six strings nothing used any more are dropped. Existing translations are untouched; the new strings show in English until they are translated. * Layouts: fit longer text in other languages, and small phones Found by screenshotting every page, tab and menu in each language on a phone, a tablet, a 640dp phone and a foldable. - Rail labels shrink to fit instead of being cut off (FitText). - Tab rows tighten when they overflow and scroll the chosen tab into view. - Menus fade over a down arrow when more entries are below, and open scrolled to the current choice. - On a small phone the desktop card's button moves under its title, emulator tiles go two across, the GPU support verdict wraps and the Updates page stacks the channels under the status. * l10n: translate every string into Spanish, Japanese, Korean and Chinese (#187) Simplified Chinese, Traditional Chinese (Taiwan) and Traditional Chinese (Hong Kong, reviewed for Hong Kong wording) are complete, as are Spanish, Japanese and Korean: no missing keys and no placeholder mismatches. * Language setting: follow the system, or a language picked in Setup; Steam uses it too (#187) - Setup -> Launcher starts with a Language row: "System default (...)" and each language by its own name. With nothing picked the app follows the system language; a pick applies at once and stays until System default is picked again. - Steam keeps its language in ~/.steam/registry.vdf under both Valve/Steam/language and Valve/Steamsteamglobal/language. Before each start of the client the guest helper droiddeck-steam-language writes both (and exportedsettings.json), and the client gets -language. SteamLanguage maps the app's language to Steam's names: english, spanish/latam, japanese, koreana, schinese, tchinese. * l10n: translate the strings main added since, and Chinese review fixes - Translate the 32 strings added on main since (Windows components, device details, Force SSBS, native Steam sleep) into all six languages. - zh-CN: busy labels say what is in progress again (正在取消, 正在导出 ...), as the other languages do. - zh-CN: "set up" is 配置, as Setup is; 设置 stays for Settings. - zh-TW: proton_compatible_note says 前綴 rather than "prefix".
DroidDeck brings the SteamOS experience to Android: Valve's Steam client in Big Picture on your Adreno handheld, with Windows games through Valve's ARM64 Proton.
Note: DroidDeck does not have a stand-alone website. Do not click on any download links from websites claiming to be the DroidDeck team.
Requirements and install
Use Android 9 or newer on a supported Adreno device (730 or newer, or 8xx). Adreno 6xx is experimental: DirectX 11 uses DXVK 2 and may run, and DirectX 12 games can still crash. Mali, Xclipse, PowerVR, and Adreno 710 are unsupported. No root is required. Allow about 3 GB for the runtime and 1.1 GB more for the desktop and emulators. Install the APK from Releases, install the Linux runtime, then press Play and sign in. Steam downloads on first launch. Install Desktop & apps to use the desktop and emulators. The Store installs Linux apps and games from Flathub (ARM64 builds) with Flatpak; with additional options to install Appimages and set up scripts.
Before Steam launches, you must turn off Restrict child processes in Developer options. If this option is not available in developer settings (Android 12 and 13 devices), first launch of Steam will present a "Fix it for me" button, which will help automate the setup process.
Community
Join the DroidDeck Discord for help, Preview builds, and device reports. Bug reports go in its #bug-reports forum; attach the session folder from Download/DroidDeck/ so the logs come with it.
Build
Run tools/build_local.sh with Docker, Java 17, the Android SDK/NDK, and zstd installed. It builds the ARM64 audio sinks from PulseAudio 13.0 and packages them into the APK at app/build/outputs/apk/release/app-release.apk. Set DROIDDECK_PA13_SOURCE_DIR to an existing PulseAudio 13.0 source directory to skip downloading it. To install the APK on an attached device, run tools/deploy_local.sh.
Limits
Compatibility and performance vary by device; hardware validation is limited. Desktop compositing uses software rendering. Firefox sandboxing is reduced under proot. See the session logs in Download/DroidDeck/ when diagnosing problems.
Credits and licence
GPL-3.0. Runtime, shim, input, and controller work build on WinNative and Bannerlator (maxjivi05). LSFG frame generation is from the work of Camille LaVey and the Eden emulator project, following lsfg-vk, ported to WinNative and DroidDeck by @maxjivi05; it needs your own copy of Lossless Scaling and ships none of its shaders. x86 AppImages, and any whose own runtime cannot unpack them, are unpacked with uruntime by VHSgunzo (MIT), shipped unmodified with its licence. See LICENSE. Steam and Proton belong to Valve Corporation; this project is not affiliated with Valve.
