Need help with mobile-toolkit?
Click the β€œchat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

IntergalacticPenguin
192 Stars 30 Forks MIT License 1.2K Commits 17 Opened issues

Description

πŸ“± Command line tool for Android & iOS device management

Services available

!
?

Need anything else?

Contributors list

Header

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.

  1. Open terminal
  2. Clone this repository git clone https://github.com/IntergalacticPenguin/mobile-toolkit.git
  3. Setup Android tools
    • Download and install Android Studio or Android command line tools
    • Edit .bash_profile (or .zshrc if you have zsh shell) open -e ~/.bash_profile or open -e ~/.zshrc
      • Add this line 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
    • Allow USB debugging on your device, connect it and authorize your computer (click OK on the device screen)
  4. Setup iOS tools
    • Install latest Xcode and iOS command line tools using App Store
    • Install Homebrew package manager
    • Install usbmuxd, libimobiledevice and ideviceinstaller brew install --HEAD usbmuxd && brew install --HEAD libimobiledevice && brew install --HEAD ideviceinstaller
    • Run Xcode, connect iOS device to USB and authorize your computer (click "Trust" on the device screen)
  5. (Optional) Use Mobile Toolkit in any directory in terminal
    • Edit .bash_profile (or .zshrc if you have zsh shell) open -e ~/.bash_profile or open -e ~/.zshrc
      • Insert these 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)
      • Move export PATH to the end of the file

πŸ€– Android commands

Capture screen

πŸ“Έ ascreenshot

  • ascreenshot
    Save screenshot to ~/Desktop
  • ascreenshot -a
    Take screenshot on all connected devices

πŸŽ₯ arecord

  1. arecord
    Record screen
  2. End recording using
    ctrl + c
  3. Save screen video footage to ~/Desktop
    • arecord 
      Specify your own filename by passing it as argument

Control device

✏️ apaste

apaste "[email protected]" password1 "5005 1002 3332 1112" "2/19" 5004
  • apaste 
    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 
    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

πŸ“ abounds

  • abounds
    Display or hide layout bounds
  • App restart may be necessary on lower APIs

πŸš— aanimationspeed

  • aanimationspeed
    set slower animation speed or restore default
  • aanimationspeed 
    set animation speed multiplier

πŸ”  afontscale

  • afontscale
    set large font scale (1.3x bigger than default) or restore default
  • afontscale 
    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 
    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 
    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
or
open -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
  • aeimulator 
    Handle various Android emulator activites
    • start
      - choose and launch installed emulator
    • gprs | edge | 3g
      - simulate network latency, choose one
    • call 
      - receive fake call
    • sms  
      - receive fake sms
    • gps  
      - set manual GPS location
    • battery <0-100>
      - set battery level
    • telnet 
      - call command via telnet

πŸ’ atestmonkey

  • Perform automated stress test using Application Excersciser Monkey
  • Default test length is
    15000
    input events, support for custom count will be added in future update
  • 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 find, 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.

🍎 iOS commands

Capture screen

πŸ“Έ iscreenshot

  • iscreenshot
    Save screenshot to ~/Desktop
  • iscreenshot -a
    Take screenshot on all connected devices

πŸŽ₯ irecord

Required: Install videosnap -> download and run

videosnap-0.0.6.pkg
Required: Install ffmpeg
brew install ffmpeg
  1. irecord
    Record screen
  2. End recording using
    ctrl + c
  3. Video footage is saved to ~/Desktop
  4. File is compressed using ffmpeg

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

Manage device

πŸ“œ ilog

  • ilog
    Open console log output
  • Examine macOS or iOS system logs

πŸ’₯ icrashlogs

  • icrashlogs
    Import crash logs to ~/Desktop, choose whether to keep them in device storage
  • icrashlogs -k
    Import crash logs, keep them in device storage
  • icrashlogs -r
    Import crash logs, delete them from device storage
  • You can import these logs to Xcode to make them more readable via symbolication
    • Open relevant project in Xcode
    • Click on Window > Devices and Simulators > View Device Logs
    • Drag the .crash file onto the log list
    • Readable crash log should appear in the list

πŸ“‹ 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 
    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 
      - insert text into pasteboard
    • import 
      - import image or video to simulator gallery app
    • log
      - print simulator log
    • 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 
      - set time displayed in status bar (no functional impact)

πŸ’­ About

You can read about my motivation in this blog post, if you made it this far in readme and you like my work, please be so kind and star this repository or leave some claps on Medium. Every appreciation empowers my motivation.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.