NAME
mobile-toolkit — 📱 Terminal tool for Android & iOS device management
SYNOPSIS
brew install ffmpegINFO
DESCRIPTION
📱 Terminal tool for Android & iOS device management
README

What is its purpose?
🛠 Control Android & iOS devices: Capture screen, manage apps, simulate input, examine system logs etc.
⚡️ Speed++ Are you an app developer or a tester? Boost your effectivity, discover new tools!
All features
📲 Control Android and iOS devices or Emulators/Simulators using terminal commands
🛠 Take screeshots, change device settings, gather app & device information
⚙️ Manage mobile applications - install, restart, wipe data and much more
📋 Handle multiple devices effortlessly - select from list or target all connected devices
⏳ Save your precious time - stop doing repetitive tasks manually
🔄 Automatic update - get new features and fixes ASAP
Table of contents
🔩 Maybe you just want to skip to Installation?
💭 Do you want to share Feedback or Contribute?
💻 Installation
Click here to reveal step by step guide ↓
Note: This tool targets macOS for compatibility, but most interactions should work on any Unix system.
- Open terminal
- Clone this repository
git clone https://github.com/IntergalacticPenguin/mobile-toolkit.git - Setup Android tools
- Download and install Android Studio and Android command line tools (using Android Studio SDK manager)
- Edit .zshrc (or .bash_profile if you have bash shell)
open -e ~/.zshrc- Insert this line at the end
PATH=$PATH:/Users/dummyuser/Library/Android/sdk/platform-tools export PATH - Don't forget to replace "dummyuser" with your account username
- Use full path to the "platform-tools" directory
- Insert this line at the end
- Allow USB debugging on your device, connect it and authorize your computer (click OK on the device screen)
- Setup iOS tools
- Install latest Xcode and iOS command line tools using App Store
- Install Homebrew package manager
- Run Xcode, connect iOS device to USB and authorize your computer (click "Trust" on the device screen)
- Run any script i.e.
iscreenshot, installation of all required tools will be initiated automatically (jq and go-ios)
- Add Mobile Toolkit to $PATH, it is mandatory for iOS scripts and it will let you run scripts in any directory
- Edit .zshrc (or .bash_profile if you have bash shell)
open -e ~/.zshrc- Insert the following lines at the end
PATH=$PATH:/Users/dummyuser/mobile-toolkit/android
PATH=$PATH:/Users/dummyuser/mobile-toolkit/ios - Don't forget to replace "dummyuser" with your account username
- Use full path to the "mobile-toolkit" directory (where you cloned this repository)
- Add
export PATHto the end of the file
- Insert the following lines at the end
- Edit .zshrc (or .bash_profile if you have bash shell)
🤖 Android Commands
Capture screen
📸 ascreenshot
ascreenshotSave screenshot to ~/Desktopascreenshot -aTake screenshot on all connected devices
🎥 arecord
arecordRecord screen- End recording using
ctrl + c - Save screen video footage to ~/Desktop
- Records audio by default on devices running Android 12 and up (when using Scrcpy version 2.0.0 or higher)
arecord <custom-name>Specify your own filename by passing it as argumentarecord -lUse legacy-loption to record using ADB instead of Scrcpy
Control device
✏️ apaste
apaste "john.doe@fakemail.com" password1 "5005 1002 3332 1112" "2/19" 5004
apaste <text>Insert text into currently focused fieldapaste "john.doe@fakemail.com" password1Every additional argument will be inserted into subsequent fieldapaste "This is sample multi-word text."use "" to insert multi-word text into one fieldapaste -lInsert "Lorem Ipsum paragraph"apaste -a <input-text>Insert any text input (options displayed above) on all connected devicesapaste -a -lInsert "Lorem Ipsum paragraph" on all connected devices
🌐 aurl
aurl "google.com"Open link in web browser or corresponding applicationaurl -a "google.com"Open link in web browser or corresponding application on all connected devices
🏴 adarkmode
adarkmodeToggle system dark mode
🔊 atalkback
atalkbackToggle TalkBack screen reader accessiblity option
📐 abounds
aboundsToggle UI layout bounds- App restart may be necessary on lower APIs
🚗 aanimationspeed
aanimationspeedset slower animation speed or restore defaultaanimationspeed <speed>set animation speed multiplier
🔠 afontscale
afontscaleset large font scale (1.3x bigger than default) or restore defaultafontscale <scale>set font scale multiplier
🎹 acontrol
acontrolstart scrcpy session- Provides realtime device screen mirroring and keyboard+mouse control
📷 acamera
- Start the default camera application
⚡️ awireless
- Enable or disable wireless ADB connection
- Use ADB and toolkit without having USB cable attached
👋 apowerbutton
- Lock/Unlock the device (send Power button key event)
- Useful to unlock the device after the screen is locked automatically
Manage packages
🚀 alaunch
alaunchList third-party apps and choose one to run italaunch -sList all available apps (including os pre-installed) and choose one to run italaunch com.dummy.package.name.appRun app by package name
🕵️ aappinfo
aappinfoList foreground app information- Package name
- Version
- Last update
- minSdk and targetSdk
- Permissions
- (Optional) Open application settings
aappinfo com.dummy.package.name.appTarget specific app by passing package name as argument
🔪 akill
akillRestart the foreground appakill com.dummy.package.name.appTarget specific app by passing package name as argument
🧽 aerase
aeraseDelete all local data of the foreground app and restart itaerase com.dummy.package.name.appTarget specific app by passing package name as argument
🚚 ainstall
ainstall some-app-file.apkInstall and run .apkainstall -a some-app-file.apkInstall and run .apk on all connected devices
🗑 auninstall
auninstallUninstall third-party app, choose from the listauninstall com.dummy.package.name.apppass package name as argumentauninstall -wUninstall all-third party packages- Skips some essential apps, edit IGNORED_PACKAGES in this script to customize the list to your needs
🔥 awipe
- Wipe internal storage and delete all third-party apps
🐁 apermissionreset
- Revoke ALL GRANTED runtime permissions for ALL apps
- You'll have to handle permission requests upon opening almost any app
🛍 agoogleplay
agoogleplay "Dummy App"Search for "Dummy App" on Google PlayagoogleplaySearch for currently foreground app on Google Play
🏭 abuildproject
abuildprojectBuild, install and run Android project located in current directoryabuildproject <relative-path>Build, install and run Android project located in <relative-path>
Manage device
⚙️ aoptions
aoptionsOpen system settings on a specific activity- You can choose from quick presets
- Developer settings
- Locale settings
- Date & time
- Wifi settings
- Storage management
- Power usage
- Root settings activity
aoptions AChoose from exhaustive list of all available optionsaoptions 1,2,3... | dev | locale | date | wifi | storage | powerUse a preset, choose one
📜 alog
alogPrint system log outputalog -f <package-name>Filter log by package name
📋 acheckdevice
- Print genereal device information
- Perform basic safety-checks and toggle "testing firendly" settings
- 10 minutes screen timeout
- Highest brightness
- Automatic date
- Disabled notification sounds
- Internet connectivity and WIFI name
- Font scale
- enUS locale
- (Optional) Search for the device on GSMArena
😎 aservices
- Print running background services
- Search for more information via Google
♻ areboot
- Reboot the device
📱 aemulator
Required: Make terminal use Android Studio Java
Edit .bash_profile (or .zshrc if you have zsh shell)
open -e ~/.bash_profileoropen -e ~/.zshrcAdd the following line at the end of the file
export JAVA_HOME='/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home'Android emulator supports all listed scripts by default + extra actions listed below
aemulator <option>Handle various Android emulator activitesstart- choose and launch installed emulatorgprs | edge | 3g- simulate network latency, choose onecall <number>- receive fake callsms <number> <text>- receive fake smsgps <lat> <long>- set manual GPS locationbattery <0-100>- set battery leveltelnet <command>- call command via telnet- example commands
event | redir | sensor | physics | finger | rotate | fold | unfold...see Android emulator documentation for more information
- example commands
🐒 atestmonkey
atestmonkeyDefault test with random seed and 15000 input eventsatestmonkey <event-count>Test with random seed and custom input event countatestmonkey <event-count> <seed>Test with custom seed and custom event count- Perform automated stress test using Application Excersciser Monkey
- You can end test prematurely using ctrl^c or
atestmonkeykillin case something goes wrong - App under test needs to be pinned to fullscreen mode to prevent unwanted interactions elsewhere
- Screen pinning button location is directly tied to OS version and device manufacturer skin.
- It may be tricky to turn on, see examples below:
Google Nexus 5 (Android 6)
You need to bring the app window to foreground, the button is located in bottom right corner.

Google Pixel 3 (Android 11)
You need to click on the app icon, the button is located in popup menu.

- It may be tricky to turn on, see examples below:
🍎 iOS Commands
Capture screen
📸 iscreenshot
iscreenshotSave screenshot to ~/Desktopiscreenshot -aTake screenshot on all connected devices
🎥 irecord
Required: Install videosnap -> download and install videosnap-0.0.8.pkg
Required: Install ffmpeg brew install ffmpeg
irecordRecord screen- End recording using
ctrl + c - Video footage is saved to ~/Desktop
- File is compressed using ffmpeg
📹 iquicktime
- Run QuickTime and open video source picker (so you can choose a device right away)
- You may have to allow security system permission, so the script can access QuickTime application
- This is a fallback script for
irecordon M1 macs as it is currently not working
Manage applications
🚚 iinstall
iinstall some-app-file.ipaInstall .ipa (make sure to use properly signed build)iinstall -a some-app-file.ipaInstall .ipa to all connected devices
🗑 iuninstall
iuninstallUninstall third-party app, choose from the listiuninstall com.dummy.package.name.apppass bundle name as argumentiuninstall -wUninstall all third-party packages- Skips some essential apps, edit IGNORED_PACKAGES in this script to customize the list to your needs
🚀 ilaunch
ilaunchList third-party apps and choose one to run itilaunch -sList os pre-installed apps and choose one to run itilaunch com.dummy.bundle.id.appRun app by bundle id
🔪 ikill
ikillList third-party apps and choose one to restartikill -sList os pre-installed apps and choose one to restartikill com.dummy.bundle.id.appTarget specific app by passing bundle id as argument
Manage device
⚙️ ioptions
ioptionsOpen system settings application
💬 ilang
ilang <lang>Change the device language to different one, according to ISO-639 (i.e. "cs")ilangChange the device language to different one, choose from a list of all supported
📜 ilog
ilogPrint system log output
📋 icheckdevice
- Print device information
- (Optional) Search for the device on GSMArena
♻ ireboot
- Reboot the device
📱 isimulator
- Simulator has limited functionality (no camera, biometrics, Appstore...), but offers some extra options, unavailable on physical iOS devices
isimulator <option>Handle various simulator related activitesstart- choose and launch installed simulatorscreenshot- save screenshot to ~/Desktoprecord- save screen recording to ~/Desktop (full resolution and frame rate, without QuickTime hassle)paste <text>- insert text into pasteboardimport <file>- import image or video to simulator gallery applog- print simulator logurl <url>- open link in web browser or corresponding applicationwipe- wipe all simulator databattery <0-100>- set battery level displayed in status bar (no functional impact)time <hh:mm>- set time displayed in status bar (no functional impact)
🖥 iconsole
iconsoleExamine iOS or macOS system logs using Console application
Feedback & Contribution
⁉️ Submit an issue to report any bugs, request a feature or ask questions.
🤝 Pull requests are highly appreciated, see the issue board.
💬 Also visit my NoMo project and leave a star.
🔗 Find me on LinkedIn or Twitter.