How to make a video tutorial for your Android app

Finding a way to record a simple video tutorial for my Android app has been quite a challenge. I tried many combination of approaches/tools and I finally found the perfect solution (using a Mac OS X).

So the solution is actually pretty simple: run the app on Genymotion and record the screen with QuickTime player:

Run your app on the Genymotion emulator. You can download the Genymotion Android emulator for free after you registered on the website.
Genymotion is the fastest emulator. It’s actually so awesome it runs my app faster than my real device (Samsung Galaxy Note).

Enable show touches OPTIONAL
Settings -> Developer options -> Show touches

Record your screen using QuickTime player.
Open QuickTime Player and choose File -> New Screen Recording
Hit the red REC button.
Select the area of the screen you want to record (the Genymotion emulator part).
Click Start recording
Stop recording
Save the file as 480, 720, 1080 in a .mov container.

Upload to Youtube
Pretty straight-forward. No need to re-encode or crop or anything. Just upload the video.

Add video to the Google Play Store
Add your youtube url video to the description of your app through the Google Play Developer Console


Approaches that didn’t work out:

Record a smartphone using a camera
It’s a mess. The colours are a mess. You hand is in the way. It’s difficult to position the camera (on a tripod?!) with a correct angle.

Record the screen of the smartphone
I couldn’t find an app that could do so without rooting my device. I also red that rooted that record the screen of a device have a terrible framerate. Then you would still need to transfer the video to your computer.

Record the Android emulator
As you probably know, the Android emulator is SO SLOW. Screen recording the android emulator would make your app look so slow and non-reactive. Genymotion emulator instead is just faster as normal device (or even faster).

Other screen recording program:
I’ve heard from a friend that average screen recording programs are pretty slow (he mentioned 15 framerate on Linux). This is all related to how the OS provide low-level screen recording integration.
Apple Mac OS X is pretty good for this. QuickTime player has screen recording built-in. Screenflow for Mac is a more advanced screen recorder. It allows for example to remove the arrow cursor from the video.

Your private Maven artifacts repository: install Sonatype Nexus OSS on AWS EC2 Amazon Linux

Nexus OSS from Sonatype is a artifacts repository.
I currently use Nexus to store the Maven artifacts of my Java projects that need to be imported by other Maven projects.

I had some headache setting up Nexus OSS on the Amazon cloud so I though of posting the steps to have your own private artifact repository on the cloud.

The following steps will help you to install Sonatype Nexus OSS on a EC2 instance on AWS.
We’ll be using a EC2 micro. Micro instances are the cheapest EC2 instances but they do still costs money. You might get one for free for a while with the free tier.

Login into the AWS Management Console and go to EC2

Create a new Security Group called ContinuosIntegration
allow the following inbound services
22 (SSH)
80 (HTTP)
443 (HTTPS)
8080 (HTTP*)
8081 (Nexus OSS)
9000 (Jenkins)

Launch a new EC2 instance
Amazon Machine Image: Amazon Linux AMI – 64 bit
Instance Type: t1.micro (so far t1.micro was good enough for my 5 Java projects)
Security Group: ContinuosIntegration (previously created)

Download KeyPair into SSH folder and change KeyPair Access Permnission

You haven’ t done already so. Download the KeyPair for this instance into ~/.ssh/YOUR_KEY_PAIR.pem.
Limit the .pem file permission to avoid ssh to complain:

$ chmod 400 ~/.ssh/YOUR_KEY_PAIR.pem

Connect with SSH to your EC2 instance
Find the address of your EC2 instance by selecting it in the Managament Console (something like
Adapt the following bash command to your KEY_PAIR filename and EC2 instance address:

$ ssh -i ~/.ssh/YOUR_KEY_PAIR.pem

Download and unzip Nexus OSS

$ cd /usr/local
$ sudo wget
$ sudo tar -xvzf nexus-latest-bundle.tar.gz
$ sudo rm nexus-latest-bundle.tar.gz

Create a link to the actual nexus-VERSION folder (replace nexus-2.5.1-01 with your nexus installed version)

$ sudo ln -s nexus-2.5.1-01/ nexus

Create NEXUS_HOME environment variable

$ export NEXUS_HOME=/usr/local/nexus

Create nexus user with restricted permissions

$ sudo useradd -m nexus

Change ownership of nexus folder to the nexus user and nexus group

$ sudo chown -R nexus:nexus /usr/local/nexus-2.5.1-01/
sudo chown -R nexus:nexus /usr/local/sonatype-work

Edit the nexus executable (necessary for the nexus user and to run nexus as a service)
I’m using the vi editor since it’s already installed on Amazon Linux.

$ sudo vi /usr/local/nexus/bin/nexus

PRESS i to enter in insert mode

change the following lines:
NEXUS_HOME=”/usr/local/nexus” #(necessary to run nexus as a service)
RUN_AS_USER=nexus #(remove the #comment in front and set the RUN_AS_USER to “”"”"”"nexus)
PIDDIR”"”"”"” =”/home/nexus” #(necessary to run nexus as the nexus user)

PRESS esc to exit the insert mode

PRESS : and type :wq and then press enter to save and quit

Launch Nexus

$ cd /usr/local/nexus/bin
$ sudo ./nexus console
$ tail -f /usr/local/nexus/logs/wrapper.log

Stop Nexus

$ cd /usr/local/nexus/bin
$ sudo ./nexus stop

Start nexus as a service
Copy the nexus starting script to /etc/init.d

$ sudo cp $NEXUS_HOME/bin/nexus /etc/init.d/nexus

Make the nexus script executable

$ sudo chmod 755 /etc/init.d/nexus

Make effective this nexus service settings

$ cd /etc/init.d
$ chkconfig --add nexus
$ sudo chkconfig --levels 345 nexus on

now you nexus should start automatically at each OS startup.

You can still start/stop nexus as a service manually:

$ sudo service nexus start

Access nexus web dashboard
Once nexus is running should be able to connect to the Nexus Dashboard using the EC2 address followed by the 8081 port and /nexus path:

login in nexus and change default credentials

login using the default credentials username: admin password: admin123
Once you are logged in create a new admin account and delete the default admin credentials using the Security -> Users screen accessible through the menu on the left.