Skip to content

Latest commit

 

History

History
500 lines (369 loc) · 17.9 KB

README.md

File metadata and controls

500 lines (369 loc) · 17.9 KB

Header

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?

🤖 Android Commands

🍎 iOS Commands

💭 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.

  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 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
    • 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
    • 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)
  5. 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

🤖 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
  4. 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 argument
  • arecord -l Use legacy -l option to record using ADB instead of Scrcpy

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

👋 apowerbutton

  • Lock/Unlock the device (send Power button key event)
  • Useful to unlock the device after the screen is locked automatically

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 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

  • 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

🐒 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.

🍎 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

  1. irecord Record screen
  2. End recording using ctrl + c
  3. Video footage is saved to ~/Desktop
  4. 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

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.