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.
Accounts:
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.
Pricing:
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.
Archive
2019
Dimensions of Idea communication
2018
Lessons for Game designers from "Structure of Scientific Revolutions"
Playing games, Doing Mathematics
Why gamers like pixelated games
2017
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?
2016
2015
Before fixing performance issues
2014
2013
Software Engineering Code of Ethics and Professional Practice
2012
Coffeescript: To switch or not to switch
The single most reason that keeps me using Vim
When your git branch diverges from your remote
Something like Olivia - John Mayer
Online courses - New technology, Old rules
Why Patriotism doesn't make sense
Why sea steading is important to pursue?
Rolling back latest git commit
iTunes Download stopped (err =9006)
Good essay on user centric software design
Why we need to explore Seasteading?
2011
How to write interactive CLI utility in node.js
The Gods Themselves by Isaac Asimov
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.
Why the hi-tech minds are writing Social apps?
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
2010
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?
Reality distortion field around
ReaderScope 2.0.6 - Find Comments
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.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
Android fragmentation : How big a deal is it?
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
Make Android speak your Twits with "TwitSpeak"
2009
ReaderScope 1.5 - quicker, better, prettier
Preview android.R.drawable.* images
Is definition of "Evil" changing?
ReaderScope 1.4 (with a Theme Pack)
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.1 - Auto Login
ReaderScope 1.1.3 - SDCard storage
ReaderScope 1.1.1 quick-n-easy features
ReaderScope 1.1 - Social Beacons
ReaderScope 1.0.2 - making deep cache simple
ReaderScope beta4 - offline fun
ReaderScope beta3 - Tweet the news
Intercepting Up/Down keys from bash script
Makeshift XML beautifier in python
HTC Magic (Indian version) - expectations and facts
Android development with Vim + Eclim
FoF - PyOpenGL = miniFoF (possibly for n810)
Twitter client with inkface-pygame v0.2.2
Frets on Fire on Maemo 5 (Fremantle)
Static IP configuration on Fedora 10
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)
Debian repository on Google App Engine
Inkface v0.1.2, Twitter-inkface client
2008
Debugging python reference counts
(k)ubuntu 8.10 - not ready for my home yet
Migrating to Google App Engine
Android opened - first looks inside
Inkface - SVG based GUI design
Today's slashdot and open source
OpenMoko, Android and a great hacking post
2007
XML RPC server inside apache mod_python
Nice review article on virtualization technologies
Once again... a quote from 'Troy'
Sea surfing under the Golden Gate
2006
How do I backup to Amazon S3 storage service
Gas prices... seems like big scam
If Harry Potter were a computer hacker ...
2005
repeat (ps | grep) = filtered top
Halo fixed on ATI Mobility Radeon 9000
Warning: const is a keyword in ANSI C
2004