🖥️

Android and Windows apps

Desktop and mobile development for the task at hand

Application development for Windows (including Windows 7 — for clients with an older fleet) and Android. One codebase of logic for all platforms, a native UI for each, over-the-air self-updates and crash reports to the developer — so we learn about a problem before the user does.

Done so far: a VPN client with a swappable engine for three platforms and an audio player with direct sound output to a USB DAC, bypassing the system mixer.

Problems clients bring

Typical situations and what we do about them.

Users should not have to deal with settings

We hide the complexity behind one button and sensible defaults: the subscription is entered once, and the app picks a working entry point and updates itself. Our VPN client works this way.

A fleet of Windows 7 machines

We build a separate client on .NET Framework 4.8 that runs on the old Windows and shares the logic with the main version.

You learn about crashes from users, not from the app

We build in over-the-air updates with signature checks and crash reports sent to your own server. The developer sees the crash and the log before a user writes to support.

Who it is for

Types of clients we have already built this for.

What we build

Types of work in this area. Each links to a case where it is already done.

Android audio player with USB DAC output

A player for a personal library that talks to a USB DAC directly over USB Audio Class, bypassing the Android system mixer, and delivers the track bit-perfect. It has its own resampler, a Hi-Res fake check based on the spectrum, playlists, search across four sources and an audiobook section. It ends with an APK that then updates itself.

VPN client for Android and Windows

An app with one 'Connect' button: the subscription is entered once, the entry point is chosen by a race, the client switches by itself when the connection drops, and Russian sites go direct. The Xray or sing-box engine is plugged in through a thin layer, so it can be replaced. The client is currently in testing with users.

Windows 7 client

A separate build on .NET Framework 4.8 and WinForms that shares its logic with the main client. Windows 7 has no TUN, so it works through the system proxy, with sing-box as the engine. It was built and run on Windows 11 and has not yet been tested on a real Windows 7.

Over-the-air app self-update

The release list is signed with a key, and the public key is built into the app: a forged list is rejected. Android downloads the APK for its own architecture, Windows downloads only changed files and rolls the replacement back on failure. There is a tester channel and a regular one.

Crash and log report receiver

A small Python service in Docker on your server, where the app sends the log, version, network state and crash reason with a token. Secrets are masked on the device before sending, and if the connection is lost the report waits in a queue on disk. It ends with a script the developer uses to read the reports.

What you get

What stays with the client after handover.

  • An app for Android, Windows 10/11 or Windows 7 with a native UI for each platform
  • Over-the-air self-update with a signed release list
  • Crash reports and logs sent to your own receiver, with secrets masked on the device
  • A 'How to use' section and a version history inside the app
  • Installation from a file: an APK for Android, an archive with a built-in installer for Windows
  • A README written as a technical specification, with known limitations, and a CHANGELOG
  • A free month of support after handover; the code and data stay with the client

How the work goes

From the first request to handover: at every step it is clear what happens next.

  1. 1

    Request and free audit

    You describe the task: platforms, devices, what already exists. We go through it and state the scope of work.

  2. 2

    Platforms and architecture

    We decide which logic is shared and what is separate on each platform, and which constraints apply, for example an old Windows or a specific DAC.

  3. 3

    Development on real devices

    We build the app and check it beyond the emulator. Test builds and logs come from real phones and computers.

  4. 4

    Testing at the client

    Test builds are installed from a file. Tester mode sends crash and anomaly reports, and we fix bugs from them.

  5. 5

    Release and distribution

    We prepare the APK and the Windows installer, sign the release list and turn on self-update.

  6. 6

    Handover and support

    We hand over the code, documentation and access to the report receiver. The first month of support is free, after that maintenance is by agreement.

Stack for this area

Kotlin and Jetpack Compose →
The basis of our Android apps: an adaptive interface that follows the system theme.
C# / .NET 10 and WPF →
The basis of the Windows 10/11 client: native windows and the engine launched as a separate process.
.NET Framework 4.8 →
Lets us build a client that runs on Windows 7, where newer .NET versions do not start.
C++ (NDK) →
Where timing and precision matter, such as the audio stream to a USB DAC, the code is written in C++ for Android.
Xray and sing-box →
Swappable VPN engines: the client talks to them through a thin layer, so one engine can be replaced with another.

Pricing

Ballpark figures to understand the order of magnitude. Exact estimates come after the audit.

Android app
from $2,100
per project

A native Kotlin app: hardware access, offline data, custom design.

  • ✓Crash and log receiver — quoted after the audit
  • ✓Over-the-air updates — quoted after the audit
  • ✓Source code is handed to the client
Store publishing
from $500
per app

RuStore and Google Play: signing, build, store page, moderation replies.

  • ✓One-click CI build
  • ✓Screenshots and descriptions prepared
  • ✓Support — from $100 a month

The audit and the proposal are free. No hourly billing: the price is fixed for the result, the exact figure comes in the proposal after the audit. Support after delivery starts at $100 a month, the first month is free. Timelines are individual and set once the specification is approved.

Frequently asked questions

Why Windows 7 — it's been unsupported for years?
Some clients — checkouts, warehouses, manufacturing — run a fleet on Windows 7, and nobody will replace it for one program. We build a separate client on .NET Framework 4.8 that runs there, sharing the logic with the main version.
Do you publish to Google Play and app stores?
Both ways: through stores or bypassing them — APK distribution via a bot link with over-the-air self-updates and a signed release list. For internal corporate apps the second path is usually simpler.
Will the app update itself?
Yes: we build in self-updates with signature verification — on Android the install is silent, on Windows only changed files are downloaded, and on failure the update rolls back.
Can one app be built for Android and Windows at once?
The logic can be shared while the interface is built per platform. In our VPN client, Android is written in Kotlin, Windows 10/11 in C# and WPF, and Windows 7 on .NET Framework 4.8, and the Windows clients share common logic. A common layer sits between the interface and the VPN engine, so the engine can be replaced without rewriting the app.
What happens to traffic if the VPN client or its engine crashes?
On Windows in TUN mode, WFP 'leak protection' filters are active: outgoing traffic outside the tunnel is blocked, and when the engine drops or restarts, programs see 'no internet' rather than the real address. On Android the tunnel stays up until 'Disconnect' is pressed, and the system 'always-on VPN' protects traffic before the app starts: the main screen reminds the user if it is off.
How can we collect crash reports without third-party services?
The app sends the log, version, network state and crash reason with a token to a receiver on your own server. Subscription links, keys, passwords and tokens are masked on the device when the log is written, before sending. If the receiver is unavailable, the VPN client queues reports on disk: up to 20 files and 50 MB.
Can Android play audio to a USB DAC without alteration?
Yes. The OshaPlay player takes over the DAC through the USB Host API and sends audio in isochronous transfers, bypassing the system mixer, which would otherwise resample every track to 48 kHz. Direct output works with UAC2 DACs using adaptive or synchronous transfer, while asynchronous DACs and UAC1 still play through the system.
How much does an app cost and how fast can it be built?
An Android app starts at $2,100. A VPN client for Android and Windows runs from $4,900 to $18,000 and above depending on requirements: server-driven updates, statistics, a Windows 7 client. Store publishing starts at $500. Over-the-air updates and a crash receiver as separate jobs are quoted in the proposal after a free audit. No hourly billing: the price is fixed for the result.

Need something from “Android and Windows apps”?

A short review is free: we'll look at the task and tell you what's worth doing and roughly for how much.