mobile-toolkit
mobile-toolkit copied to clipboard
π± Terminal tool for Android & iOS device management
What is this?
π Capture screen, manage apps, simulate input, print system log and more using simple commands!
β‘οΈ Boost your effectivity while developing and/or testing mobile applications, 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
Feedback &Β contribution
βοΈ Submit issue to report bugs, bring inspiration or simply ask questions
π€ Pull request contribution is highly appreciated, see Collossal Challenges
βοΈ Love Mobile Toolkit? -> Hit the star button and bring me joy!
π Connect with me on LinkedIn if you want :)
π» Installation
Click to reveal step by step guide
Note: This repository is mainly focused on macOS compatibility, but majority of 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 PATH
to 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
-
ascreenshot
Save screenshot to ~/Desktop -
ascreenshot -a
Take screenshot on all connected devices
π₯ arecord
-
arecord
Record screen - End recording using
ctrl + c
- Save screen video footage to ~/Desktop
-
arecord <custom-name>
Specify your own filename by passing it as argument
Control device
βοΈ apaste
apaste "[email protected]" password1 "5005 1002 3332 1112" "2/19" 5004
-
apaste <text>
Insert text into currently focused field -
apaste "[email protected]" password1
Every additional argument will be inserted into subsequent field -
apaste "This is sample multi-word text."
use "" to insert multi-word text into one field -
apaste -l
Insert "Lorem Ipsum paragraph" -
apaste -a <input-text>
Insert any text input (options displayed above) on all connected devices -
apaste -a -l
Insert "Lorem Ipsum paragraph" on all connected devices
π aurl
-
aurl "google.com"
Open link in web browser or corresponding application -
aurl -a "google.com"
Open link in web browser or corresponding application on all connected devices
π΄ adarkmode
-
adarkmode
Toggle system dark mode
π atalkback
-
atalkback
Toggle TalkBack screen reader accessiblity option
π abounds
-
abounds
Toggle UI layout bounds - App restart may be necessary on lower APIs
π aanimationspeed
-
aanimationspeed
set slower animation speed or restore default -
aanimationspeed <speed>
set animation speed multiplier
π afontscale
-
afontscale
set large font scale (1.3x bigger than default) or restore default -
afontscale <scale>
set font scale multiplier
πΉ acontrol
-
acontrol
start 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
Manage packages
π alaunch
-
alaunch
List third-party apps and choose one to run it -
alaunch -s
List all available apps (including os pre-installed) and choose one to run it -
alaunch com.dummy.package.name.app
Run app by package name
π΅οΈ aappinfo
-
aappinfo
List foreground app information- Package name
- Version
- Last update
- minSdk and targetSdk
- Permissions
- (Optional) Open application settings
-
aappinfo com.dummy.package.name.app
Target specific app by passing package name as argument
πͺ akill
-
akill
Restart the foreground app -
akill com.dummy.package.name.app
Target specific app by passing package name as argument
𧽠aerase
-
aerase
Delete all local data of the foreground app and restart it -
aerase com.dummy.package.name.app
Target specific app by passing package name as argument
π ainstall
-
ainstall some-app-file.apk
Install and run .apk -
ainstall -a some-app-file.apk
Install and run .apk on all connected devices
π auninstall
-
auninstall
Uninstall third-party app, choose from the list -
auninstall com.dummy.package.name.app
pass package name as argument -
auninstall -w
Uninstall 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 Play -
agoogleplay
Search for currently foreground app on Google Play
π abuildproject
-
abuildproject
Build, install and run Android project located in current directory -
abuildproject <relative-path>
Build, install and run Android project located in <relative-path>
Manage device
βοΈ aoptions
-
aoptions
Open 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 A
Choose from exhaustive list of all available options -
aoptions 1,2,3... | dev | locale | date | wifi | storage | power
Use a preset, choose one
π alog
-
alog
Print system log output -
alog -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_profile
oropen -e ~/.zshrc
-
Add 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 activites-
start
- choose and launch installed emulator -
gprs | edge | 3g
- simulate network latency, choose one -
call <number>
- receive fake call -
sms <number> <text>
- receive fake sms -
gps <lat> <long>
- set manual GPS location -
battery <0-100>
- set battery level -
telnet <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
-
atestmonkey
Default test with random seed and 15000 input events -
atestmonkey <event-count>
Test with random seed and custom input event count -
atestmonkey <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
atestmonkeykill
in 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
-
iscreenshot
Save screenshot to ~/Desktop -
iscreenshot -a
Take screenshot on all connected devices
π₯ irecord
Required: Install videosnap -> download and install videosnap-0.0.8.pkg
Required: Install ffmpeg brew install ffmpeg
-
irecord
Record 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
irecord
on M1 macs as it is currently not working
Manage applications
π iinstall
-
iinstall some-app-file.ipa
Install .ipa (make sure to use properly signed build) -
iinstall -a some-app-file.ipa
Install .ipa to all connected devices
π iuninstall
-
iuninstall
Uninstall third-party app, choose from the list -
iuninstall com.dummy.package.name.app
pass bundle name as argument -
iuninstall -w
Uninstall all third-party packages- Skips some essential apps, edit IGNORED_PACKAGES in this script to customize the list to your needs
π ilaunch
-
ilaunch
List third-party apps and choose one to run it -
ilaunch -s
List os pre-installed apps and choose one to run it -
ilaunch com.dummy.bundle.id.app
Run app by bundle id
πͺ ikill
-
ikill
List third-party apps and choose one to restart -
ikill -s
List os pre-installed apps and choose one to restart -
ikill com.dummy.bundle.id.app
Target specific app by passing bundle id as argument
Manage device
βοΈ ioptions
-
ioptions
Open system settings application
π¬ ilang
-
ilang <lang>
Change the device language to different one, according to ISO-639 (i.e. "cs") -
ilang
Change the device language to different one, choose from a list of all supported
π ilog
-
ilog
Print 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 activites-
start
- choose and launch installed simulator -
screenshot
- save screenshot to ~/Desktop -
record
- save screen recording to ~/Desktop (full resolution and frame rate, without QuickTime hassle) -
paste <text>
- insert text into pasteboard -
import <file>
- import image or video to simulator gallery app -
log
- print simulator log -
url <url>
- open link in web browser or corresponding application -
wipe
- wipe all simulator data -
battery <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
-
iconsole
Examine iOS or macOS system logs using Console application
π About
You can read about my motivation in this blog post. If you made it this far in README.md
and you like my work, please star this repository. Every appreciation empowers my motivation.