Coding everywhere using an Android device

screen-shot

Some while ago, I used to code with my laptop on my knees in the public transportation. That way, I made significants contributions to rss-atom-bundle and I’m sure this bundle wouldn’t be the same today without it. Meanwhile, coding with a 15” laptop in the subway means troubles with other passengers or the laptop itself like complaints, purse shots in the screen or a computer getting very hot on your knees. So I decided to keep it home.

But I couldn’t resist, I needed to keep working on open source projects so I tried to do it with a system closed to what I know on a smaller device. The Nexus 7 tablet is a good candidate for that and you’ll see in this post how I managed to set up a development environment using applications available on Google Play. I ended up with the ability to push commits on Github and to run PHPunit inside my projects.

Things to consider before

Before trying this at home (or in the subway) please take the following into consideration :

– some useful features like profiling and step by step debugging are not supported
– you need a 7″ screen or higher
– some applications are not free (but none of them are really expensive)

Benefits

– you can literally do it wherever you want. I’m talking about programming.
– the ability to test the responsiveness of your webapp in real world conditions

Writing code

To write code using a tablet you’ll need two things : an editor (obviously) and a keyboard.

DroidEdit

A lightweight editor with an excellent syntax highlighting. There’s not much to say about it.

image

Hacker’s keyboard

Brackets and dollar are not easy to find using a classic Android keyboard. It’s not a big deal for those who write short texts and e-mails, but some weirdos here are trying to type really different things. And those nerds will find happiness using the Hacker’s keyboard.

image

In other words : don’t try to write code without it. Period.

Version control

Pocket Git

It supports enough Git features to work efficiently :
– private key authentication
– branch creation, deletion and merge
– Visual history
– show differences since last commit
– ability to revert uncommitted changes
– stashing

image

It just lacks cherry-picks and tagging. However the user interface is clean and pleasant to use. really worth the price (less than 2€).

running the code

A PHP execution environment must provide :
– a web server
– PHP 5 in a recent version
– MySQL and / or SQLite with all privileges
– ability to run a PHPUnit suite

It also should provide :
– PHP CLI
– xdebug

As you will see below, every applications in the Google Play Store includes most of the essential items. It’s not the same with PHP CLI and Xdebug, which are quite hard to find.

Androphp

Free of charge, it comes with :

– lighttpd 1.4.29
– php 5.4.8
– mysql 5.1.62
– phpmyadmin 3.5.3

Obviously, the PHP interpreter will be outdated really soon. Another thing :

image

You’re not privileged to create a database. Maybe you need to root the device to gain access to it? I’m not concerned by this issue for the moment, but I think it will be a real problem for those who need to work with a database. Xdebug is not supported, so I decided to try something else.

Ulti

Not free + PHP 5.4 = next

Ksweb

PHP is updated on a regular basis in this application (5.6.2 at the writing of this article), it’s worth giving it a try even though it’s free for only 5 days. This is a powerful app which allows you to customise everything in the servers configuration : PHP, lighttpd, MySQL and so on. However, Xdebug is still missing let’s move on.

Bit Web Server

PHP 5.6.4 is embedded in BWS and after a quick glance at the phpinfo()’s output … It features Xdebug ! Now the PHP CLI : of course it isn’t a feature officially provided by the application, but the executable must be somewhere in the filesystem. Let’s see if it’s mentioned in lighttpd’s configuration :

image

The line 40 defines the path to the PHP binary. So I tried to execute it in a terminal emulator :

image

It works. Just set an alias like this in the terminal configuration and you won’t have to type the full path again :

alias php=/data/data/com.andi.serverweb/files/php/php

I finally looked at phpmyadmin and I found exactly the same issue androphp suffers from. I think the device needs to be unlocked in order to create databases within MySQL. Anyway, Bit Web Server fits my needs better than the other applications, I’ll stick with it.

Updating dependencies with Composer

The PHP CLI was one of my expectations because I need it to run Composer. So, does it update dependencies like it should ? Let’s see :

image

Apparently not. This time OpenSSL is not properly supported by the PHP interpreter embedded in BWS. Maybe it could only be a matter of certificate but it’s not, the compilation arguments are not suitable for PHP to support OpenSSL.

You can get rid of this issue by simply copy a fresh vendor directory from a computer to the device. However, it will leave you in a rather uncomfortable position when you’ll need to update your project’s dependencies.

Running PHPUnit tests suite

Now that I properly initialised the project on the device, it’s time to run the tests suite. Unfortunately I can’t really count on the PHP CLI, but never mind, there is still an interpreter suitable to run code through a browser. I consequently wrote a phpunit.php script, here is the source :

/**
* Launch PHPUnit in a browser
*/

$argv = array(
'--configuration', 'phpunit.xml.dist',
#'--coverage-html', 'coverage/',
'./tests',
);

$_SERVER['argv'] = $argv;

require 'vendor/autoload.php';

PHPUnit_TextUI_Command::main(false);

Note what I did at line 8, you can uncomment this line if you need to generate the code coverage report. Now just let’s run the tests suite :

image

Perfect for test driven development, isn’t it? 90% of feed-io was written that way since march 2015, so even if it’s harder than working with a laptop, you can write code using a Android device.

Conclusion

The stack still have some issues and it’s a matter of time before I set everything right. The next thing to do for that is to unlock the tablet and try to fix all the issues I met until now. I’m confident that the MySQL privilege problem will be solved easily, however I can’t say the same with OpenSSL. Anyway, trying to set up a development environment on an android device is interesting, it forces you to deal with the (many) differences between Android and a classic *nix system. I may write another post on the subject when I’ll find a way to run composer, until then feel free to drop me a line if you have any comments or suggestions on how to run it.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s