Skip to content
This documentation is also available as markdown. For a complete index of all pages, see llms.txt at /llms.txt

Apply DoveRunner Mobile App Security

DoveRunner Mobile App Security provides self-protection features — code obfuscation, integrity protection, environment detection, and threat tool detection — without any code changes.

Before you start, have the following ready:

  • Framework — The framework used to build the app. For hybrid frameworks like React Native, know which version was used.
  • KeyStore info — Required if you want DoveRunner Mobile App Security to sign the sealed app on your behalf before uploading to the Play Store.

Sealing takes three steps:

  1. Upload your APK or AAB file.
  2. Configure security options across the five steps of the Developer Console wizard.
  3. Download the sealed app — signed with your keystore, or unsigned for manual signing with apksigner.

Once sealing completes, a download prompt appears. You can also download sealed apps later from Historical Information.

The wizard has five steps, shown down the left side of the page:

StepNameWhat it covers
1Upload FileUpload the APK or AAB, and review the always-on protections
2Basic ConfigurationFramework, sealing version, sealing mode, native and Dex code protection
3Environment DetectionHow the app reacts to a compromised or monitored device environment
4Tool & Package DetectionHow the app reacts to malicious tools installed on the device
5Advanced DetectionScreen capture, Data Sealing, OTA updates, threat-handling callback

While you configure the wizard, the right-hand panel shows a Security level percentage and lists the choices that raise or lower it. It also has a Preset selector, so you can apply a saved sealing preset instead of setting every option by hand.


The protections below are applied to every sealed app and are not configurable. Step 1 lists them under Always On Security.

GroupProtections
Code EncryptionSO encryption for native code; DLL encryption for Unity and Xamarin (Mono) apps; JavaScript bundle encryption for React Native apps
Anti Debugging & Runtime attackProcess/thread status monitoring, debugger attach blocking, Frida framework detection, Xposed framework detection, trampoline code hooking detection, memory dump detection, SSL pinning bypass prevention
Anti TamperingCode integrity check, resource and asset integrity check, package name manipulation detection, AndroidManifest manipulation detection, memory manipulation blocking
Virtual environmentsVirtual OS, Virtual Space tools, Xiaomi Dual App, Xiaomi Second Space
Cheating ToolsGame Guardian, Lucky Patcher, speedhack tools, APK editors
Threat detection & AnalyticsReal-time hacking data streaming to the dashboard (identified by ANDROID_ID), and localized threat detection messages (English, Korean, Chinese, Japanese, Indonesian, Vietnamese, Spanish, with more being added)

OptionDescription
Select your app frameworkThe framework used to develop your app. Native (Java/Kotlin), Unity, Unreal, Flutter, Xamarin, React Native, Ionic, Cordova, and Others are supported.
Select AppSealing VersionThe sealing version to apply. Use the latest version to get the newest security features and framework support. Hybrid frameworks such as React Native also offer a separate legacy 1.7.x version line alongside the current 3.x line.
Sealing ModeTest — Same protection level as Release, but displays a periodic test-mode message on screen. No charge is incurred.

Release — Removes the test-mode message and incurs charges.

Encrypts native library (.so) files in the APK to protect against reverse engineering.

ValueBehavior
Yes (default)All compatible .so files in the APK are encrypted automatically.
NoNo .so files are encrypted.
SelectiveYou choose which .so files to encrypt. The console lists the files it cannot encrypt, and lets you search, select individually, or use Select All Supported. Note that .so files sharing the same filename across different architectures are encrypted together.

Dex Protection makes static and dynamic analysis of the compiled Dex bytecode significantly harder. It builds on top of standard ProGuard/R8 obfuscation rather than replacing it.

OptionValuesDescription
Dex EncryptionNo (default) / SelectiveProtects Java code from tampering by encrypting Dex files. Enabling it may slightly increase the app’s first launch time after install or update.

Selective encrypts only the packages listed under Package Selection for Dex Encryption in App Configurations. If that list is empty, no encryption is applied.
Dex String ObfuscationYes / No (default) / SelectiveObfuscates string literals in the Dex code to defend against static analysis.

Yes obfuscates the whole app and adds an intensity setting.
Selective uses the Inclusion and Exclusion lists under Package Selection for Dex String Obfuscation in App Configurations.
Call HidingYes / No (default)Obfuscates method calls and control flow in Dex files, making the code flow harder to analyze. Adds an intensity setting when enabled.

Selecting Yes for Dex String Obfuscation or Call Hiding reveals an intensity setting:

IntensityTradeoff
Fast (default)Lower obfuscation strength, better runtime performance.
BalanceMiddle ground between strength and performance.
MaximumStrongest obfuscation, with some performance cost.
OptionDefaultDescription
Disable File Integrity CheckOffDisables the runtime check that verifies the app’s files have not been tampered with after sealing. Leave it off unless DoveRunner support advises otherwise.
Enable Signing Certificate Identity CheckOffVerifies the app’s signing certificate against the registered SHA-256 fingerprints at runtime, to detect resigned or repackaged copies.

Controls how the app responds when it detects a potentially compromised or monitored device environment.

OptionValuesDefaultDescription
RootingBlock / AllowBlockDetects rooted devices and rooting tools. Running on a rooted device is a significant security risk, so blocking is strongly recommended.
Developer OptionsBlock / AllowAllowDetects whether Android Developer Options are enabled. Developer options expose powerful and risky features to attackers, including USB debugging.
USB DebuggingBlock / AllowBlockDetects whether USB debugging is enabled. With USB debugging on, an attacker can attach debug tools and reach sensitive parts of the system.
Wi-Fi IdentificationCollect Data / DisableDisableOn Android 12 and later, collects the security type of the connected Wi-Fi network for monitoring purposes. Selecting Collect Data adds the ACCESS_WIFI_STATE permission to your app. Does not affect app behavior.
EmulatorsBlock / Optional / AllowBlockDetects Android emulator environments.

Optional lets you allow specific emulators — LDPlayer, Nox App Player, BlueStacks, and GameLoop — and blocks all others.
Work Profile & Samsung Security FolderBlock / Optional / AllowBlockSome cheat tools use work profiles to attack apps. Blocking also prevents the app from running in Samsung Secure Folder.

Optional lets you allow Samsung Secure Folder specifically.

Detects malicious tools installed on the device and controls whether the app can run alongside them.

OptionValuesDefaultDescription
Macro ToolsBlock / AllowBlockDetects macro automation tools that can be used to abuse app functionality. The blocklist is kept up to date.
Packet AttacksBlock / AllowBlockDetects packet interception tools that collect data sent over the network. The blocklist is kept up to date.
KeyloggerBlock / AllowAllowDetects keyloggers — monitoring tools that hide on the device and collect the user’s touch input.
Overlay WindowsBlock / AllowAllowOn Android 12 and later, hides other apps’ overlay windows drawn on top of your app’s screen. The app is not closed and no threat report is sent. Android Accessibility overlays are not blocked.
Use Query All PackagesEnable / DisableDisableUses the QUERY_ALL_PACKAGES permission for stronger detection of cheat tools that run under a changed app name.

OptionValuesDefaultDescription
Screen Mirroring & CaptureBlock / AllowAllowCovers screen capture, screen recording, mirroring, and remote control. When blocked, capture tools see a black screen instead of app content. The app is not closed and no threat report is sent.
Data SealingYes / NoNoHas no effect on 3.x builds. Data Sealing was removed in sealing version 3.x; the option is still rendered here in error. See Android DataSealing.
Over the Air UpdateYes / NoNoDelivers your custom threat blocklist to active installs without a new app release. The custom blocklist is merged with DoveRunner’s default blocklist. Configure the blocklist in App Configurations. Enterprise plan only.
Use callback for threat handling instead of app terminationCheckboxOffDelivers real-time threat events to your code instead of terminating the app.
Hardware Key AttestationEnable / DisableDisableVerifies the device’s bootloader and integrity state through Android’s hardware-backed Key Attestation.
Customize Threat Response MessagesToggleOffUses one of your Threat Response Message templates for the dialogs end users see. Turning it on reveals a Select template dropdown. When off, the solution’s default messages are used.

Checking Use callback for threat handling instead of app termination changes how the sealed app reacts to a detected threat. Instead of terminating immediately, the app invokes your registered callback through an Android broadcast, so you can run your own handling logic — logging, analytics, a custom warning screen, or a forced logout.

The console describes the scope as follows:

When enabled, AppSealing invokes your app’s registered callback function on detection instead of terminating the app. This applies to all detections configured as Block in Step 3 and Step 4.

When DoveRunner detects a threat — such as a rooted device, emulator, debugger, app tampering, or hooking framework — it shows the end user a response dialog. By default this uses standard, solution-provided messages in the device language.

On the Enterprise plan you can replace those defaults with your own reusable template: your wording for each of the 11 threat categories, your dialog title and button label, and your colors. Templates are created under ThreatResponseMessages. To apply one, turn on Customize Threat Response Messages here on Step 5 and pick it from the Select template dropdown — or reference it from a preset when sealing through the CLI.


ProGuard/R8 configuration

If you use Dex Protection, your ProGuard/R8 setup must preserve your business package structure so DoveRunner can correctly identify and obfuscate your code. See the ProGuard Setup Guide for the required rules and what to avoid.

Other requirements

  • Firebase Crashlytics must retain its original package name — do not obfuscate it.
  • The following class must not be obfuscated (required for React Native version detection):
    com/facebook/react/modules/systeminfo/ReactNativeVersion.java

The sealed app must be signed before it can be installed or submitted to the Play Store — the original certificate is invalidated during the sealing process.

Option 1 — Sign via Developer Console (recommended)

Register your keystore in advance via Manage KeyStore in the Developer Console. When downloading a sealed build, the console will sign it automatically using the registered keystore. No manual steps required.

Option 2 — Sign manually

If you are not using the console’s signing feature, sign the output file manually after download:

FormatToolCommand
APKapksignerapksigner sign --ks your.keystore your-app.apk
AABjarsignerjarsigner -keystore your.keystore your-app.aab alias