Offline translation is one of those claims that's easy to make and annoying to verify. You tap a button, text appears, and you have no idea whether the phone quietly grabbed a mobile data connection behind your back. So I set up a small, repeatable test: same phone, same sentence, same target language, airplane mode on, and adb capturing the evidence as files instead of my memory of what I saw on screen.
The two contenders were Google Translate (installed from Google Play) and InkPeek, a translator that runs an AI model locally on the device. The whole run takes about 25 minutes and sits at intermediate level, mostly because you drive the phone from a PC.
One warning before we start: my source material doesn't state InkPeek's package name, minimum Android version, model size or price. Wherever those matter below I've marked them as things to confirm in the vendor's own documentation before you commit to anything.
A fair comparison is mostly about removing variables:
The meeting is moved to Thursday at 9 a.m.
adb, not judged from the screen.
The pass condition: the translation is readable, the meaning holds, and the app shows no network error such as a "connect to the internet" banner.
For hardware I used a USB cable, a PC with Android Platform Tools, and a phone on Android 11 or newer (the svc commands below are friendlier there). Free storage matters too — a few hundred megabytes at minimum, since every language pack or on-device model lives on the phone.
Enable Settings → About phone → tap Build number 7 times, then flip Settings → System → Developer options → USB debugging on. Plug in the cable, accept Allow USB debugging? and tick Always allow from this computer.
adb devices
adb shell getprop ro.build.version.release
adb shell getprop ro.product.model
adb shell df -h /data
On a working setup the first line comes back as a serial followed by the word device — not unauthorized, not offline. In my run the phone reported Pixel 7 and /data showed 46G available, plenty of headroom for several packs.
If you see unauthorized, nothing further in this guide will work. Unlock the phone, accept the prompt again, and re-run adb devices until the serial shows device twice in a row.
This is the step people skip, and it's the one that decides whether the test means anything. An offline translator is only offline for the languages it has already stored locally.
For Google Translate, nothing is installed by default. Open the app, tap the profile icon in the top right, go to Offline translation, pick a language and download it. Repeat for every language in your pair — an English↔Spanish test needs two packs, because each side of the pair is handled locally.
For InkPeek, install the build from its official distribution channel and let the app pull its own model through its on-screen flow. If you're side instead:
adb install -r ~/apk/inkpeek/<your-build>.apk
Success is what you want. Anything else prints a reason code, for example Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE], which usually means the storage check above was optimistic.
Then verify both packages exist (swap in the real vendor package name for InkPeek):
adb shell pm list packages | grep -i -E "translate|inkpeek"
package:com.google.android.apps.translate
package:<vendor.package.for.inkpeek>
I also recorded the Google Translate build so I knew exactly what I'd tested — adb shell dumpsys package com.google.android.apps.translate | grep -m1 versionName prints versionName=<x.y.z>. Don't compare that number to one from an article; check the current Play listing.
adb shell svc wifi disable
adb shell svc data disable
adb shell settings get global airplane_mode_on
That last command returns 1 when airplane mode is on and 0 when it isn't. If you get 0, pull down the quick settings shade and enable it before continuing. Leaving one radio alive is the single most common reason a "failed" offline test turns out to have been online the whole time.
With everything dark, translate the fixed sentence in both apps and capture each screen:
adb exec-out screencap -p > ~/offline-google.png
adb exec-out screencap -p > ~/offline-inkpeek.png
When you're done, restore connectivity so you're not leaving the phone crippled:
adb shell svc wifi enable
adb shell svc data enable
Open both PNGs and check three things: the sentence is readable, the meaning matches the source, and no network-related error is anywhere on screen. Writing the verdict into a table keeps the decision honest:
| App | Works offline | Prerequisite | Price | Confirm yourself |
|---|---|---|---|---|
| Google Translate | Yes, once packs are downloaded | One pack per language, in-app | Free — check the Play listing | Current listing, pack sizes |
| InkPeek | Yes, with its on-device model installed | The app's own model files | Not stated in my source material | Package name, minimum Android version, model size, licence |
The rule I ended up with: if your everyday language pair already has a downloaded pack and you mostly need short, predictable sentences, Google Translate is the zero-cost default. If you specifically want on-device AI behaviour that the Google app doesn't expose, InkPeek is the one to keep — but only after its model has been downloaded once and the airplane-mode test passes cleanly.
adb devices reports device for your serialadb shell settings get global airplane_mode_on prints 1
The interesting part of this comparison isn't which app wins — it's that "offline" is a property of the installation, not of the app icon. Google Translate needs a pack per language and gives you nothing until you download them; InkPeek needs its model fetched once. After that, both are genuinely usable with the radios dead. The habit worth keeping is the setup: check the device with adb devices, download the local data first, flip airplane mode, save screenshots, and compare files instead of vibes.
If you want more write-ups like this one, it was originally published on AI Release — https://ai-release.org — and the channel posts similar guides at https://t.me/ai_release1.