Smart Android Automation

Write automation scripts in plain English. Let AI handle the complexity.

Coordinate-based: ~70% success
Smart Locator: ~100% success
Terminal
$ ditto run "open settings and enable dark mode"

Parsing natural language command...

→ Intent: navigate + toggle_setting

→ Target: "Settings" app

→ Action: enable "Dark mode"

✓ Workflow completed successfully

Why Smart Locators?

Traditional automation breaks when UI changes. DittoMation adapts.

Coordinate-Based

Fixed pixel coordinates break on different devices
UI updates require script rewrites
No fallback when elements move
click(x=540, y=1200) // Fails if button moves!

Smart Locator

Multiple fallback strategies
Adapts to UI changes automatically
AI-powered element matching

Fallback Chain:

1
Resource ID miss
2
Content Description miss
3
Text Match ✓ found
4
Visual AI (OCR/Vision)

Powerful Features

Everything you need for robust Android automation

Natural Language Commands

Write automation in plain English. No need to learn complex APIs or element hierarchies.

"tap the login button and enter my email"

Smart Locator

Intelligent element finding with confidence scoring and multiple fallback strategies.

Resource ID {{ confidenceScores.resourceId }}%
Text Match {{ confidenceScores.textMatch }}%
Visual AI {{ confidenceScores.visualAI }}%

Record & Replay

Record your actions once, replay them anywhere with smart element mapping.

Record
Map
Replay

Variables & Control Flow

Use variables, loops, and conditionals for complex automation workflows.

{
  "steps": [
    {"set_variable": {"name": "count", "value": 0}},
    {"while": {
      "condition": "count < 5",
      "do": [{"tap": "next_button"}]
    }}
  ]
}

Interactive Demo

Type commands and watch them execute on the simulated Android device

{{ phoneTime }}
{{ app.icon }}
{{ app.name }}
Search...
Settings
{{ setting.icon }}
{{ setting.name }}
{{ chromeUrl || 'Search or type URL' }}

Enter a search query

Messages
{{ msg.sender[0] }}
{{ msg.sender }} {{ msg.time }}

{{ msg.text }}

{{ actionIndicator }}
Quick commands:

Execution Log:

{{ log.time }} {{ log.message }}

Try on Real Device

Test with a real Android emulator in your browser

Parsed Command:

Intent {{ parsedCommand.intent }}
Target {{ parsedCommand.target }}
Action {{ parsedCommand.action }}
Value {{ parsedCommand.value }}

Code Examples

Multiple ways to use DittoMation

# Run a natural language command
ditto run "open settings and enable wifi"

# Record a workflow
ditto record --output my_workflow.json

# Replay a recorded workflow
ditto replay my_workflow.json

# Run with variables
ditto run workflow.json --var username=test@email.com
from dittomatic import DittoMation

# Initialize
ditto = DittoMation()

# Run natural language command
ditto.run("open Chrome and search for weather")

# Use smart locator
element = ditto.find_element(
    text="Login",
    fallback_strategies=["resource_id", "content_desc", "ocr"]
)
element.tap()

# Record and replay
ditto.start_recording()
# ... perform actions ...
workflow = ditto.stop_recording()
workflow.save("login_flow.json")

# Replay with variables
ditto.replay("login_flow.json", variables={
    "username": "test@example.com",
    "password": "secure123"
})
{
  "name": "Login Workflow",
  "variables": {
    "username": "",
    "password": ""
  },
  "steps": [
    {
      "action": "tap",
      "locator": {
        "text": "Login",
        "resource_id": "btn_login",
        "confidence_threshold": 0.8
      }
    },
    {
      "action": "input_text",
      "locator": {"resource_id": "input_username"},
      "value": "${username}"
    },
    {
      "action": "input_text",
      "locator": {"resource_id": "input_password"},
      "value": "${password}"
    },
    {
      "action": "tap",
      "locator": {"text": "Submit"}
    }
  ]
}

How DittoMation Compares

Feature comparison with traditional automation tools

Feature DittoMation Traditional
{{ row.feature }} {{ row.ditto }} {{ row.traditional }}

Success Rate Comparison

DittoMation (Smart Locator) ~98%
Coordinate-Based Tools ~70%

* Based on tests across multiple device types and UI variations

Quick Start

Get up and running in minutes

1

Install DittoMation

pip install dittomatic
2

Connect your device

# Enable USB debugging on your Android device
adb devices  # Verify connection
3

Run your first command

ditto run "open settings"
4

Or use Python

from dittomatic import DittoMation

ditto = DittoMation()
ditto.run("tap the search icon and type hello world")

Share Your Thoughts

Help us improve DittoMation with your feedback

Thank You!

Your feedback has been received. We appreciate you taking the time to help us improve.

{{ ['', 'Poor', 'Fair', 'Good', 'Very Good', 'Excellent'][feedback.rating] }}
{{ feedbackError }}

Recent Feedback

{{ item.name ? item.name[0].toUpperCase() : 'A' }}
{{ item.name || 'Anonymous' }} {{ item.type }}
{{ '★'.repeat(item.rating) }}{{ '☆'.repeat(5 - item.rating) }}

{{ item.message }}

Real Android Emulator

Powered by Appetize.io - Interact directly with a real Android device

{{ phoneTime }}
5G 100%

Real Device Required

DittoMation connects to real Android devices via ADB for automation

Click buttons above to access real emulators

Recommended: Connect Real Device

  1. Enable Developer Options on your Android device
  2. Enable USB Debugging in Developer Options
  3. Connect device via USB cable
  4. Run commands below to verify connection
Terminal
# Check connected devices
adb devices

# Install DittoMation
pip install dittomatic

# Run your first command
ditto run "open settings"

# Or use Python
python -c "from dittomatic import DittoMation; DittoMation().run('open settings')"

Using Android Studio Emulator

You can also use the Android Studio emulator, which connects via ADB automatically:

# List available emulators
emulator -list-avds

# Start an emulator
emulator -avd Pixel_4_API_30

# Verify connection
adb devices

How to use with DittoMation

  1. Interact with the emulator manually to explore
  2. Note the app package names and element texts
  3. Use those in your DittoMation commands

Connect Your Own Device

For full DittoMation testing, connect a real device:

# Connect via USB
adb devices

# Or connect wirelessly
adb tcpip 5555
adb connect <device-ip>:5555

# Run DittoMation
ditto run "open settings"

Note

The browser emulator is for exploration only. DittoMation commands execute on devices connected via ADB, not browser emulators.

Set Up Your Own Emulator

Upload your APK to Appetize.io for a custom embedded emulator:

Go to Appetize.io