Dragon Guard Handheld WMS targets rugged Android devices running API 21 or higher. This guide walks you through every step needed to get a working build running on a physical device — from cloning the repository to seeing the four home modules appear after first login.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/CodexaCP/DG_APK/llms.txt
Use this file to discover all available pages before exploring further.
Meet the prerequisites
Make sure you have the following installed and available before you start:
| Requirement | Version / notes |
|---|---|
| .NET SDK | 8.0 or later (dotnet --version to verify) |
| .NET MAUI workload | dotnet workload install maui-android |
| Android SDK | API level 21 (Android 5.0) minimum, API 34 recommended |
| Java / JDK | 17 recommended (required by Android tooling) |
| Android device | USB debugging enabled; rugged terminal or standard phone |
| Dragon Guard backend | Running and reachable from the device’s network |
Clone the repository and open the solution
Handheld.sln in Visual Studio 2022, JetBrains Rider, or your preferred .NET IDE. The solution contains a single project targeting net8.0-android.The active
<TargetFramework> in Handheld.csproj is net8.0-android. Other frameworks (Windows, iOS, MacCatalyst, Tizen) appear in project tooling but are untested — keep the active target as Android.Configure the backend base URL
The app resolves the Dragon Guard backend using compile-time constants in
Constants/ApiConstants.cs. Edit this file to point at your backend server before building:Constants/ApiConstants.cs
DefaultAndroidBaseUrl— used at runtime when the app runs on Android. Replace192.168.100.4with the IP address of your Dragon Guard backend server on the local network.DefaultDesktopBaseUrl— used when running on non-Android targets (development/testing only).PlaceholderBaseUrl— the initialBaseAddressassigned to everyHttpClientat DI registration time.DynamicBaseUrlMessageHandleroverwrites it before each request; you should never see traffic actually reach this address.
Build and deploy to the Android device
- dotnet CLI
- Visual Studio
Connect the device via USB and confirm it appears in To deploy directly to a connected device during development:
adb devices, then publish:Debug APKs are built with
EmbedAssembliesIntoApk = true (set in Handheld.csproj). This makes Debug builds self-contained because some rugged Android firmware breaks MAUI’s fast-deployment assembly override mechanism. Debug builds are therefore larger and slower to deploy, but they run reliably on all tested terminals.Register the device with a Supreme Admin
Dragon Guard enforces device-level authorisation. Before any user can log in, a Supreme Admin must register the device in the Dragon Guard backend using the device’s identifier.The app resolves its identity through the following fallback chain (implemented in
DeviceIdentityService):- WiFi MAC address
ANDROID_ID- Randomly generated GUID (persisted to
SecureStorage)
- Launch the app — it will show the SafeBootPage splash screen while initialising.
- Note the device ID shown on the registration prompt (or retrieve it from the app’s Settings screen).
- Have a Supreme Admin add that device ID in the Dragon Guard backend admin panel.
- The device is now authorised to accept login credentials for that tenant.
Log in for the first time
With the device registered, enter your operator credentials on the Login screen:
- Enter username and password.
- The app calls
POST api/auth/grupomas-handheld-login, sendingusername,password,deviceId, anddeviceName. - The backend validates the device identity and returns a Dragon Guard JWT.
SessionServicestores the token and the list of companies the user has access to.- Exactly one company must be available. Zero companies or multiple companies block login — the app never silently picks the first entry.
- On success,
App.xaml.cscallsShowHomeAsync()and theNavigationPageroot is replaced withMainPage.
While the session is being restored on startup, the app displays the SafeBootPage splash — a full-screen gradient (Dragon Guard navy) with a “Preparando entorno operativo” spinner. This page is shown briefly on every cold start while
SessionService.InitializeAsync() reads from SecureStorage. Once the session check completes, the app routes to MainPage (valid session) or LoginPage (no valid session).Verify the four home modules appear
After a successful login you should see the
If you see these four tiles, the app is correctly connected to the backend and the session is fully initialised. You are ready to use Dragon Guard Handheld WMS in your warehouse environment.
MainPage home screen with exactly four operational tiles:| Tile | Navigates to |
|---|---|
| Items | ItemInquiryPage — product and RFID lookup |
| Receipts | ReceivingPage — receiving header list |
| Shipments | ShipmentHeadersPage — outbound shipment list |
| Movements | MovementsPage — inventory movement list and journals |