The controller of AimDroid
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


This project hosts the implementation of the controller of AimDroid. The internal name of the controller is monidroid


  1. Install golang.
    1. Mac OS: brew install go
  2. Create the workspace for go following The following is a list of simplified steps.
    1. Create the default go workspace at $HOME/go/.
    2. Setup env variable GOPATH: export GOPATH=$HOME/go
    3. Create the default go source code folder at $HOME/go/src.
  3. Change directory to $HOME/go/src and clone the source code of Monidroid:
    1. git clone monidroid.
    2. The folder name must be monidroid.
  4. Change directory to $HOME/go/src/monidroid and run go build.
  5. You will see an executable tool named monidroid at $HOME/go/src/monidroid/


Here is a sample of configuration file.


Here is the explanation of each option.

  1. PackageName: the app name of the app under test.
  2. MainActivity: the entry activity of the app.
  3. SDKPath: the path to the Android SDK
    • We need to run the command adb to communicate with the phone.
  4. Epsilon, Alpha, Gamma: the parameters for the reinforcement learning module. See the paper for more details.
  5. MaxSeqLen, MinSeqLen: the length of actions in a single activity. See the paper for more details.
  6. Time: the total testing time in seconds.


AimDroid was first evaluated on real table devices. We have encountered problems of invoking su -c on the emulator. Apply the following patch if you want to build a version for emulator.

cd $HOME/go/src/monidroid
find . -name "*.go" -exec sed -i "s/su -c//" {} \;