Engineering

Mobile app protection performance

How Otukan keeps protection light: you choose where checks run, and we measure your protected build against its baseline on the devices your users have.

  • Android
  • iOS
  • Flutter
  • React Native
  • Checks where they belong

    You choose which checks run and at which moment, per user flow. Protection works hardest where the risk is and stays quiet elsewhere.

  • Measured on your build

    Otukan compares your protected build with its own baseline, from the same commit and signed the same way, on the same devices.

  • Real devices, real spread

    Results come per device and per flow, with medians and high percentiles, including the low-end phones your users actually carry.

How Otukan keeps protection light

Performance is designed in, then proven on your own app.

  • Flow-level placement

    Run a check once at start-up, before a sensitive call or continuously. Each choice is made per flow, not as one global switch.

  • Profiles you can tune

    Your protection profile is versioned. Move, relax or tighten a check, then re-measure the same journeys to see the effect.

  • Baseline comparison

    Otukan's engineers help you set up baseline and protected builds and read the results together, device by device.

  • Framework-aware

    Flutter and React Native apps have their own start-up work. Otukan measures the framework layer as well as the native shell.

How we measure together

  1. Fix the baseline

    Build baseline and protected releases from the same commit, with the same settings, signed the same way.

  2. Pick the devices

    Choose physical devices that match your users, including a low-end phone and an older supported OS.

  3. Script the journeys

    Automate launch, sign-in and your most sensitive flows so every run does identical work.

  4. Compare the spread

    Read medians and high percentiles per device and per flow, for both builds.

  5. Tune and repeat

    Move or adjust any check that shows up, then re-run the same set to confirm.

Otukan keeps protection light by design and proves it on your own app. You choose which checks run and at which moment, per user flow, so protection works hardest where the risk is. Otukan’s engineers then measure your protected build against its unprotected baseline: the same code, built and signed the same way, run through the same journeys on the same physical devices. You see start-up, size, CPU, memory, crashes, and ANRs on Android or hangs on iOS, as a spread per device rather than one average. Compatibility is proven the same way, on your devices, OS versions and SDKs.

Metrics

Otukan tracks the same measures for the baseline and the protected build, separately for Android and iOS.

MetricWhat is measuredAndroid toolsiOS tools
Start-upCold and warm start to first usable screenMacrobenchmark, PerfettoXCTest launch metrics, Instruments
App sizeDownload size and installed sizePlay Console size reports, bundletoolApp Store Connect size report, App Thinning Size Report
CPUCPU time during start-up and key flowsPerfetto, Android Studio profilerInstruments Time Profiler
MemoryPeak and steady memory in key flowsAndroid Studio memory profilerInstruments Allocations, XCTest memory metrics
CrashesCrash-free sessions per buildAndroid vitals, your crash toolXcode Organizer, MetricKit, your crash tool
ResponsivenessANRs on Android, hangs on iOSAndroid vitalsXcode Organizer hang reports, MetricKit
Flow latencyTime for sign-in, payment or other sensitive flowsCustom trace sections, viewed in PerfettoSignposts, viewed in Instruments

Battery and network use are measured too wherever a check runs in the background or calls your server. A check that adds a server round trip is measured end to end.

Compatibility

A build that fails on some devices costs more than a slower one, so compatibility gets the same rigour as speed. For each protected build, and separately for Android and iOS, Otukan’s test plan covers:

  • install and update success on each OS version you support
  • behaviour on devices from each manufacturer your users have, and on older hardware
  • each third-party SDK in your app, especially those that inspect or hook the app
  • accessibility services, managed devices and enterprise profiles, where relevant

Method

  1. Fix the inputs. Baseline and protected releases come from the same commit, with the same compiler settings and release configuration, signed the same way.
  2. Choose the devices. Physical devices that match your user base, including a low-end device and an older OS version you still support. Android and iOS results stay separate.
  3. Control the device state. Same OS build, battery level, thermal state, network and installed apps, with a reboot between series.
  4. Script the journeys. Launch, sign-in and your most sensitive flows are automated, so each run does the same work.
  5. Repeat. Enough iterations to see the spread, the same number for both builds, alternating baseline and protected runs so that drift affects both.
  6. Record everything. App version, protection profile version, device model, OS version, tool versions, date and reviewer.
  7. Re-run after change. The same set runs again after a platform upgrade, a new protection profile or a framework update.

Framework apps get extra care. Flutter and React Native apps have their own start-up work, and a protected Dart or JavaScript layer behaves differently from native code, so Otukan measures both layers. For framework notes, see Flutter app security and React Native app security. Obfuscation has its own effect on size and speed. For that, see code obfuscation.

Interpretation

Report distributions

Averages hide the users who notice. Otukan reports the median and a high percentile for each metric, per device and per flow, for both builds, with the difference shown as a range and the number of runs behind it.

Find the cause, then fix it

If a protected build is slower in one place, a trace shows where. Checks that run once at start-up, checks that run on each sensitive call and checks that run continuously have different costs. Because Otukan lets you place each check per flow, a check that shows up can move to a less visible moment, and the next run confirms the change.

Results your team can repeat

A result belongs to one app version, one protection profile and one device set, and Android and iOS are measured on their own. That is why Otukan gives you the method, the devices and the raw numbers with every result: your team can repeat it, and trust it.

Step-by-step test guidance is in how to test app shielding performance. For how performance fits the wider protection model, return to mobile app security.

Common questions

  • How much does app protection slow an app down?

    It depends on which checks run, when they run, how large the app is and which devices your users have, so the useful answer is a measurement of your own build. Otukan lets you place each check where it costs least, then measures your protected build against its baseline on your device set and shares the method, the devices and the raw numbers with the result.

  • Which metric matters most?

    Usually cold start and the latency of your most sensitive flow, because users notice both. Crash rates, and ANR rates on Android or hang rates on iOS, matter just as much, because a protected build that fails on some devices costs more than a slower one. Size matters where users download over mobile data. Otukan tracks all of them for both builds.

  • Can we test in emulators?

    Use emulators and simulators for functional checks only. Their CPU, memory and storage behave differently from phones, and Otukan's runtime protection is designed to react to emulated environments. Performance and compatibility results come from physical devices.

Measure protection on your own build

Tell us your platforms, frameworks, the flows that matter most for speed and the devices your users have. We do not ask for binaries, signing keys or production credentials.

Or request a technical demo