adb (Android Debug Bridge — a command-line tool that talks to a phone from a PC) so every result is a file on disk, not a memory of what you saw on screen.svc commands below), a USB cable, a PC with adb installed, the Google Translate app from Google Play, the InkPeek build supplied by its vendor.
Settings → About phone → tap Build number 7 times, then Settings → System → Developer options → USB debugging = On.adb version; the output starts with Android Debug Bridge version <x.y.z> and the exact number depends on your package — check the documentation of your platform-tools release.Allow USB debugging? appears; tap Allow and tick Always allow from this computer..apk, keep it in an empty folder, e.g. ~/apk/inkpeek/.What to do: connect the phone, confirm that adb sees it, record the Android version and check free space before installing anything.
adb devices
adb shell getprop ro.build.version.release
adb shell getprop ro.product.model
adb shell df -h /data
Expected output, in order:
List of devices attached
<RANDOM_SERIAL> device
14
Filesystem Size Used Avail Use% Mounted on
/dev/block/dm-5 108G 61G 46G 59% /data
The word device (not unauthorized, not offline) means the PC is allowed to control the phone. The Avail column is your headroom for language packs and models.
Why: every later check runs through adb. If the device is unauthorized, nothing else in this guide works, and you would waste time blaming the translator.
How to check: run adb devices a second time and confirm the same serial number shows device. If it shows unauthorized, unlock the phone and accept the debugging prompt again.
Example: on a test phone the model string came back as Pixel 7 and Avail showed 46G, which is more than enough for several language packs.

What to do: install or update both apps, then download the offline data each one needs. For Google Translate, that means one language pack per language, downloaded inside the app: open Google Translate → profile icon (top right) → Offline translation → select language → Download. For InkPeek, install the vendor-supplied build and let the app download its offline model, following its own on-screen flow.
If you are sideloading InkPeek instead of installing from a store:
adb install -r ~/apk/inkpeek/<your-build>.apk
Expected output: Success. A failure prints a reason code, for example Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE] — handled in Troubleshooting.
Then confirm both packages are actually present:
adb shell pm list packages | grep -i -E "translate|inkpeek"
Expected output (the InkPeek line appears only if the package name really contains inkpeek; otherwise grep by the vendor's package name from its documentation):
package:com.google.android.apps.translate
package:<vendor.package.for.inkpeek>
Optionally record the installed Google Translate build, so you know exactly what you tested:
adb shell dumpsys package com.google.android.apps.translate | grep -m1 versionName
Expected output: versionName=<x.y.z> — the number is whatever your Play build is; do not compare it against a figure from an article, check the current listing in Google Play.
Why: an offline translator is only offline for the languages it has already stored locally. Downloading the packs first is what separates a real offline test from a test that silently used mobile data.
How to check: in Google Translate open Offline translation again — each language you downloaded is listed there and the app shows that it is ready. In InkPeek, the app's model or language screen shows the model as installed rather than offering a download button.
Example: for an English↔Spanish test you need two Google Translate packs — English and Spanish — because the app translates each side of the pair locally.

What to do: cut every network path from the phone, run the same sentence through both apps, and capture proof.
adb shell svc wifi disable
adb shell svc data disable
adb shell settings get global airplane_mode_on
The third command prints 1 when airplane mode is on and 0 when it is off. If it prints 0, enable airplane mode from the quick settings shade and run it again.
Then translate one fixed sentence in both apps, for example The meeting is moved to Thursday at 9 a.m., and save a screenshot of each result:
adb exec-out screencap -p > ~/offline-google.png
adb exec-out screencap -p > ~/offline-inkpeek.png
Expected result: two PNG files on the PC, each showing a translated sentence and no banner such as “Connect to the internet to translate”.
Finally, restore connectivity so you do not leave the phone broken:
adb shell svc wifi enable
adb shell svc data enable
Why: Wi-Fi and mobile data both have to be off. Leaving one radio on is the single most common reason a “failed” offline test turns out to have been online all along.
How to check: open the two PNG files and confirm three things — the sentence is readable, the meaning matches, and no network error is visible. Record the result in a table so the decision is not based on impressions:
| App | Handles offline | Prerequisite | Price | What to confirm yourself |
|---|---|---|---|---|
| Google Translate | Yes, after language packs are downloaded | One pack per language, downloaded in-app | Free — confirm on the Google Play listing | Current listing and pack sizes |
| InkPeek | Yes, with its on-device AI model installed | The app's own model files | Not stated in our source material — check the documentation | Package name, minimum Android version, model size, licence |
Example: decision rule used on a test device — if the offline pack already exists for your everyday pair and you only need short, predictable sentences, Google Translate is the zero-cost default; if you need on-device AI behaviour that the Google app does not expose, keep InkPeek, but only after its model has been downloaded once and the airplane-mode test passes.
adb devices shows deviceadb shell settings get global airplane_mode_on prints 1If you also want to run the same comparison on a larger screen, the setup steps in How to Run Android Apps and Games on PC apply unchanged to both apps.
Problem. The InkPeek APK refuses to install.
adb: failed to install base.apk: Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]/data, or the model files must be downloaded after installation and the phone has no room for them either.adb shell df -h /data, free space, then retry with adb install -r ~/apk/inkpeek/<your-build>.apk. If the code is instead INSTALL_FAILED_OLDER_SDK, the build requires a newer Android version than the phone runs — compare ro.build.version.release with the minimum version in the vendor documentation.Problem. A Google Translate language pack will not download.
Download failed next to the language in Offline translation.adb shell svc wifi enable, confirm adb shell settings get global airplane_mode_on prints 0, then retry the download inside the app. Re-check free space with adb shell df -h /data.Problem. The app still translates with airplane mode on, but the result looks suspiciously fresh.
Connect to the internet to translate this language only after you disable Wi-Fi.adb shell svc wifi disable && adb shell svc data disable. Set the source language manually instead of auto-detect to make the test deterministic.Google Translate gives you a free, predictable offline baseline as soon as one pack per language is downloaded, while InkPeek only earns a place on the phone after its model is installed and passes the same airplane-mode test. Repeat the test with your two real working languages and keep the screenshots, so the choice is documented rather than remembered. For the broader picture of on-device AI on Android, see Local AI Companions for Android.
Does Google Translate work without internet?
Yes, but only for languages you downloaded beforehand via Offline translation inside the app; a language with no pack installed needs a connection.
Is InkPeek free?
Our source material does not state a price, so check the documentation and the vendor's current listing before relying on it.
How do I prove an app is really translating offline?
Disable both Wi-Fi and mobile data, confirm adb shell settings get global airplane_mode_on returns 1, then translate a fixed sentence and save a screenshot with adb exec-out screencap -p.
Why does the app ask me to connect when I already downloaded a language?
The detected source language is usually the missing one — download a pack for both sides of the pair and set the source language manually instead of auto-detect.