How to do an online IDE for Android app development

No, this is not a product that I am planning to work on. I am sufficiently occupied with my current projects and plan to continue working on them. But one can’t help flirting with new ideas, so I am going to put it out there. If you like it, go implement it.

The idea is not at all new. Mobile is the next platform in computing and more and more people will want to create new apps for it. A bulk of them will be newbies and would appreciate if there was an easy way to create such apps. It appears that a majority of such users are music labels, celebrities, product brands - who already have content and want to develop mobiles apps to create more channels to their content. This is where startups like Mobile Roadie is growing. They are soon entering into Android space. Kyte is another contender in this space.

On the other hand, there are mockup based products which are adding mobile apps to their generic software mockup development environments, e.g. Balsamiq. Last month we saw Palm launching Ares. It is a web based IDE where one can drag-n-drop widgets to design their Palm Pre app. It goes beyond the basic mockup functionality and lets you edit the code and also does final packaging producing the package that can be tested in Palm Pre’s emulator or actual device.

There must be many more which I don’t know. But this is a pretty young field and there is a lot to do.

Here I want to lay out plans about such a product for Android. I will enlist the features that I would like to see in it, that may or may not be covered by already existing products I listed above. More importantly I will list how I would have designed such system, if I were doing it today - choice of tools and technologies, revenue model, etc.

The basic scheme has four components:
1. Save the source (and resource) files.
2. Run the compilation and packaging inside the cloud.
3. Give a simplified web interface.
4. Provide templates for common tasks.

The first two components dominate the choice of your Cloud provider. Android build environment is not a generic setup to be run in cloud (unlike email hosting or version control), so you will need raw virtual machines hosted in the cloud. I would have chosen Amazon S3 and EC2 for the job. A typical recipe would be, a Linux VM (fedora/centos or debian/ubuntu server), Sun JDK 1.5, Ant, Android SDK. As the project will grow, there will be need to build higher level management of build processes - Ant and its task architecture might help in building that. My favorite cloud service is Google App Engine, but it’s not the right hosting service in this case. However you can design a hybrid cloud, where your account management, web page hosting is served from GAE, which the build and packaging takes place inside Amazon EC2 cloud.

The third component is the web based user interface to the system. Like many web based IDEs, it will have to be AJAX-ified. I would go with jQuery (GWT is also a choice). As first steps of designing this component, one should first build user flows. A simple user flow would be:

1. Ask user for project details - Name, Package name, etc. (whatever that needs to go in AndroidManifest.xml)
2. Run “android create project …” in cloud and provide user link to the debug apk.

Here on give user an interative interface, in which he/she can modify source code, hit a “Build” button, fix build errors and get the debug apk upon successful build.

For editing the source code, use some off-the-shelf javascript based code editor. (My choice: EditArea). When user clicks on the source code files in the tree view (.java or .xml), just show the code editor populated with the file’s contents.

When user clicks on the layout .xml files, give an option to the visual editor. This should be a drag-n-drop interface for placing and manupulating standard Android widgets. I don’t know any off-the-shelf solution, but take a look at this example for iphone mockups. It is easier said than done, but it will be a great success if done rightly.

The fourth component is what makes this service usable to the masses. You can’t expect hard core developers to use this service, for them native Android SDK is the best environment (except for the visual layout editor, something that is lacking altogether in Android dev world). It’s the non-coders who will find your service useful. And making their life more easier will increase the value of your service. To do that, you have to identify generic apps that masses would want to write - A music library browser, RSS reader, gallery of photos or some fancy list of items. Mobile Rodie would be an extreme example to look at for this. Their service is mainly targetted towards Music album brands and other kind of content creators. It is up to you to choose one of these target audience and create template projects that will help them build their apps in a snap. Over time you can add to your library of templates and address wider audience. Which demographic to address and when, will depend on your understanding of your (potential) users and the resources you have to create the new templates. Again, easier said than done - but that’s why I won’t get a dime for writing this and you will win the lottery if you do it right.


You will need to create user accounts system. I would investigate OpenID based login mechanisms (e.g. StackOverflow), rather than implementing my own. If you choose to implement a hybrid cloud and use Google App Engine for user interface, then you can use Google’s User API with almost no extra implementation.


There are two ways you can earn from this service:
1. Ads - You have the advantage of having a very specific audience of your web service. Use it for targeted ads, that will be very relevant to your users - for e.g. Beginner Android book ads from Amazon. You can even make sponsors from your users. They would want to advertise their newly created apps to the world after-all.
2. Paid accounts - Provide debug APKs for free, but provide signed APKs only to the ones with premium accounts. Allow XML editing of layout files for free, but provide drag-n-drop interface to only paid users.




Types of Art

Dimensions of Idea communication


Lessons for Game designers from "Structure of Scientific Revolutions"

Bicycle pedals

Insanity and Software

Playing games, Doing Mathematics

Violet end of spectrum

Vipassana Meditation

Why gamers like pixelated games


Collecting Vs Hoarding Netflix

Game Design tip for Programmers - Less Automation

Review Ghost In The Shell - The blinds scene

Why Electron is the best development platform?

Project Dialog


Don't Panic

The Entanglement Pattern

The flying cars analogy

Road Trip of Atlantic Canada

Having done attitude


Before fixing performance issues

No Exams, Yes Video games

Podcasts Français


Quotable Quotes



Uruguay's President

New rules for Formula 1

Software Engineering Code of Ethics and Professional Practice

Something's missing


Coffeescript: To switch or not to switch

Water from air

The single most reason that keeps me using Vim

Time travel fiction

When your git branch diverges from your remote

Something like Olivia - John Mayer

Online courses - New technology, Old rules

Kelsey Grammer is spectacular

Why Patriotism doesn't make sense

Why sea steading is important to pursue?


Rolling back latest git commit

Google Lunar X Prize

iTunes Download stopped (err =9006)

Good essay on user centric software design

Why we need to explore Seasteading?


Master pieces from screen

How to write interactive CLI utility in node.js

The Gods Themselves by Isaac Asimov

Why OpenGL ES is so hard?

How to print stack trace anywhere in Javascript

It's not fair to compare Android with Internet Explorer

How to debug WebWorker threads?

Why can't I criticize Government if I don't vote? I sure can.

Elon Musk quote

Don't label yourself

Why the hi-tech minds are writing Social apps?

Truce with exercise

JavaScript is the next C

Ever growing todo list is a good sign for creative projects

Lesser women in tech... So what?

HTML5 offline cache - use swapCache carefully

How Wikipedia and Flattr can together change the World


Discovering LastPass

Functional programming in Javascipt using Underscore.js

Youtube ETA - Chrome extension

Why secure airports when it's planes that fly?

Mac book red light audio jack problem on Linux

How to save HTML5 canvas image to Google App Engine

Why don't they publish eBooks for free but with embedded ads?

Silicon Valley and Hi-tech

Reality distortion field around

Indirect experiments

Music sharing

ReaderScope 2.0.6 - Find Comments

ReaderScope 2.0

predictably irrational

ReaderScope upcoming changes


Why "Open" is not the first concern of user?

Mutt, Gmail, gdata, notify-send: A Perfect Email solution

Are you the Matt Damon of your game?

ReaderScope 1.9 - OAuth

New app "Find Comments"


ReaderScope 1.8.{2,3} - new authentication and global share

Portable apps for iPhone, Android, Pre, n900 - Can Processing.js help?

ReaderScope 1.8.1 - rethinking features

ReaderScope 1.8 - Random

Android fragmentation : How big a deal is it?

on Dropbox


ReaderScope v1.7 - Widget, new Icons and .... Ads

on Git: tips for SVN users and Git in Dropbox cloud

How to do an online IDE for Android app development

Anti Asserts

Bono's top ten list

Make Android speak your Twits with "TwitSpeak"


Reality of colors

Talking Twitter client

ReaderScope 1.5 - quicker, better, prettier

Preview android.R.drawable.* images

Is definition of "Evil" changing?

on Music: Battle Studies

ReaderScope 1.4 (with a Theme Pack)

On Chrome OS

Black on White

Android AsyncTask template

The AND-OR problem of laptop and mobile phone

ReaderScope v1.3.3 - offline podcasts

ReaderScope v1.3.2 - Social Channels

ReaderScope v1.3 - Beyond Google Reader

Frets on Fire for Maemo - Update

ReaderScope 1.2.7 - Podcasts, Expanded View

Sprint HTC Hero problems with ReaderScope

ReaderScope 1.2.3 - Search

ReaderScope 1.2.1 - Auto Login

ReaderScope v1.2

ReaderScope 1.1.3 - SDCard storage

Crash report for Android App

Wifi and Battery

ReaderScope 1.1.2

ReaderScope 1.1.1 quick-n-easy features

ReaderScope 1.1 - Social Beacons

ReaderScope 1.0.2 - making deep cache simple

ReaderScope 1.0.1

ReaderScope 1.0

Detecting HTC magic on Fedora

ReaderScope beta4 - offline fun

ReaderScope beta3 - Tweet the news

ReaderScope Beta2

ReaderScope beta1 is out

Intercepting Up/Down keys from bash script

Makeshift XML beautifier in python

HTC Magic (Indian version) - expectations and facts

using android AsyncTask

Android development with Vim + Eclim

Cutewit (preview)

Einstein's Dreams

Preprocessing the GUI

Evas + Inkface in v0.2.5

easy source

FoF - PyOpenGL = miniFoF (possibly for n810)

FoF update

Twitter client with inkface-pygame v0.2.2

Frets on Fire on Maemo 5 (Fremantle)

Static IP configuration on Fedora 10

Inkface+pygame v0.2.0

Smooth scrolling with Inkface+pygame

Inkface v0.2 update and automated GUI testing

Testing Android (Koolu Beta 3) on Openmoko Freerunner

Clutter animation paths with Inkscape+Inkface (v0.1.3)

Turning a page

Planning Inkface v0.2

Debian repository on Google App Engine

Inkface + Clutter

Inkface v0.1.2, Twitter-inkface client


Inkface update

Debugging python reference counts

Paul Graham nails it again!

Fedora 10 on MacBook 2,1

A great essay

Thanksgiving at Crater Lake

Digital SLR buyer's guide

more fun with notify-send

(k)ubuntu 8.10 - not ready for my home yet

Migrating to Google App Engine

Android opened - first looks inside

Has it started?

Inkface v0.1

Musical discovery of the week

Die Berlin-Affäre

aus Berlin

Inkface - SVG based GUI design

Script fun

Visualizing source code

OpenMoko photo tour

New connection with the past

George Carlin - favorite clip


80-20 rule

Python fun

OSiM'08 Berlin, Germany

Of games

"Wine" tasting

Today's slashdot and open source

Cost of Open Source

Lions for Lambs

Ubuntu reviewed

Flickr uploads from n810

Cringely and Paul Graham

Accelerometer brainstorming

Clutter Webkit

OSiM USA 2008 - Day 2

OSiM USA 2008 - Day 1

Google code

Gr8 commercial

OSiM USA 2008, see you there

OpenMoko, Android and a great hacking post

two great videos

Blog from nokia tablets


cool n770 hack


Colbie Caillat

Firefox 3 is brilliant!!!

XML RPC server inside apache mod_python

best effort technologies

coding Monalisa

formula of a horror movie

next desktop jump

The "Screen"

Nice review article on virtualization technologies

Once again... a quote from 'Troy'

Story of a random number

quotes from George Carlin

"from time import sleep"

Sea surfing under the Golden Gate

Trip videos


across two hours

What I read...

How do I backup to Amazon S3 storage service

Stranger than fiction

Gas prices... seems like big scam

Another nice quote

Hilarious nerd comment

Programming & Painting

Why do we like fiction?


If Harry Potter were a computer hacker ...

Gentoo, XGL, HGG

Henry Ford

VI - A capable IDE

New blog

Safari Bookshelf


Back to the L4


GCC 2.95 rpms

repeat (ps | grep) = filtered top

Halo fixed on ATI Mobility Radeon 9000

DirectX Installation Problem

Warning: const is a keyword in ANSI C

Not much on L4 front

Last two weeks


Stumbled on HURD

Installed HURD console

Make problem solved


Handy way to create stack trace