Showing posts with label android. Show all posts
Showing posts with label android. Show all posts

Tuesday, 22 January 2013

Onion Vs Wheelies Ported to Android


Over the last couple of days I have had my head down coding. Well that and and doing some sledging and we get our yearly couple of inches of snow.

For the most part I have been fixing up posting to facebook in the app. I can not see on the developer section of facebook people are using my app. Of course I can't see what people are posting just that people are using my app.

This is a good things as it means I fixed the issues.

I also found another bug in Onion Vs Wheelies that was making the title screen slow down to a crawl when using it on android and playing through a few games. I put a fix into the online web version as well.

I am guilty of not having promoted my web version at all. I really should if I want to build up the number of visitors to marblemice.com.

I finally feel like I have cleared some of the back log that has been lingering in my mind.

What next?

Well starting work on the next game is a good idea. I also have a simple web app I created with JQueryMobile that I would like to publish and get it up on the chrome web store. It is really simple and consists of less than a 100 lines of CoffeeScript.

Having also recently moved marblemice.com to a different host I sort of come to the conclusion it really needs a bit of an overhaul  I kind of like the design but it is not really maintainable. I prefer to keep it as a static site so will probably look at nanoc as a way of making it more maintainable.

All this will be done in dead time when I am either in need of a break from coding or just outright tired.

Monday, 17 September 2012

Losing my Keystore and Other Fun.



A couple of days ago a user reported my that my app, Days Until, was not really handling posting to his Facebook wall very well. I ranted a bit about this in my previous blog post so I will not do so again.

Over the weekend I managed to get this sorted, there is a great little series on you tube about getting the Facebook SDK set up and working with your android project.

The fun happened when I came to export and sign my APK's. Yep I could not find my keystore. This is pretty imported as without I cannot sign my apps and update them. I think it go lost when I reformatted and moved over to Bodhi linux.

I "recall" checking I had backed it up at least 4 times but clearly my memory is failing me. I started to panic and did a complete search of my whole computer. Nothing...

In desperation I log into Dropbox and decide to do a search there. Yay it finds the file I was looking for. Even though I am fully synced on my laptop the web version found it. Perhaps it also search my file history or something?

Anyway disaster averted and I am incredibly grateful to DropBox.

And yes I have backed up my keystore again.

Day Until gains another small release that fixes the Facebook issues.

As I was logged into the publishing side of the play store I took a look at the spread of people using my app and was happy to see the people with version 4, or greater, of android has hit over 20% of my active users. Perhaps it will eventually surpass version 2.3.3 that currently sits 54% of my users. At some point I would like to drop the older versions of android but I still have 1.6% of users on android 1.6 (not a typo) and about 5% on 2.1. Even at only 1.6% I would not feel right leaving them behind.

Yes I could do different version of the app that will target different devices and it would not be too much of a pain to manage.

With all this android fun I have dropped the ball on the gamedev side of things. I should get back into the swing of things in a couple of days. I still have a tricky bug to find in the code so I will probably procrastinate on that tonight.

Wednesday, 12 September 2012

Facebook intent rant plus a few other bits


So where am I at at the moment. I guess I have three things on the go.

First I am  about to do a little update to my Days Until  app on android. A while ago I added a sharing feature, the let you post it is a 100 days until christmas on twitter and others.

I have now had a few reports that it does not work on Facebook. I was sure it used to but further investigation revealed it does not work as Facebook has decided to not properly honour an intent to post a message to it. Basically it drops the text you send over and presents a blank dialogue for the user to type in.

Apparently this is a feature not a bug. I get the feeling that Facebook would prefer for me to use their SDK rather than the system built into android. You know the one that is flexible and easy to use. I will have to use their SDK to get the feature working but it does annoy as I get the feeling facebook is pushing this on me rather than letting me decide if I need all the useful features their SDK has rather than using the built in android stuff. I am not really a fan of Facebook so that does not help.

Learning Clojure continues. I have a long way to go that will probably involve churning through a couple of books. I am currently writing some very simple examples just to gain some experience with developing in clojure using emacs. Nothing to show yet but good fun.

In terms of some game dev. I am working on a simple RPG, that is currently call "simple RPG"  :) It is very early days but should push me to learn a little more in terms of libgdx and hopefully my drawing skills. Currently I am in a bug hunt phase with implementation of A*.

Monday, 28 May 2012

Let Me Decide Released

I have finally got round to releasing the app I have been working on. I admit it is a fairly simple, but fun, app that helps you make decisions like what to have for dinner.

It is what I call my first iteration of the app and I expect to iterate a bit on it over the coming months. It does feel like it is marking my return to proper android development as it is an actual new app. I learned a fair bit during the development of it and re-learned a fair bit as well :)

As I only released it a few minutes ago I cannot provide links due to the google databases taking a little while to refresh.

Anyway eclipse is calling me saying it is time to start the next app I have planned. Feeling a little tired but I think it will be good to get another app started.

mmm this blog post is feeling a little bit dry to say the least. I think I am pretty tired.

Thursday, 22 March 2012

A Few Hours With LibGdx


So last night I had a couple of hours spare as the evening headed towards midnight.

To use up this time I started to port the rudimentary parts of a a game I had been working on with my CoffeeScript based engine over to Java and LibGdx. Well when I say port I really mean I just start writing it again. I did not actually look at the CoffeeScript code.

Initial impressions of libgdx are pretty good so far with the caveat that I have only really worked on it for a couple of hours. I got a little background map displayed and started to put sprites on the screen. Messed around with attempting to scale the sprites in a sensible way when the window changed size consumed a bit of time and I failed to make head way with that if I am honest.

I did not want to get bogged down so decided to just ignore it for now and use a screen size of 800 by 480. This coincidently is the resolution of my Nexus One. Having coded for an hour or two on the desktop I was very happy to see I could just change targets in eclipse and have it run on my phone. Nice!

Probably the only thing that made me a few exclamation marks appear above my head in true comic book style was that angle of sprites when draw time uses degrees rather than radians. I am so used to using radians that it feels wrong to use degrees. Not that it is wrong just different and made me think - libraries should not do that. I am sure many people prefer degrees as they are more used to them.

Other than that everything seems good. Googling specific problems usually results in others having hit the problems and then solution is presented. In my experience this is a good thing when it comes to using other people libraries.

Thursday, 15 March 2012

Revisiting JQueryMobile


For some reason I have been taking another look at JQueryMobile. I looked at this in the middle of last year and at the time really liked it even though it was in beta at the time. I had a few complaints and the major one was its' performance on android. At the time me and many other assumed it was JQuerMobile at fault rather than the android browser. As it became clear the default android browser was quite rubbish my interest waned.

The plan had been to use JQueryMobile to write apps that could be wrapped around a very simple Java application and released onto the android market. My reasoning behind this was that is is quicker to write polished looking application in JQueryMobile (its defaults look nice) than using Java. Plus using CoffeeScript is nicer than using Java for small sub 1000 line projects.

I can't comment on larger projects as I have not used CoffeeScript for projects with more lines of code than a few thousand. Realistically it is probably not the language that add to the productivity but the quicker iteration cycle of using a desktop browser to develop rather than a real phone or the emulator.

So JQueryMobile has continued to improve. I still like it and it still does not work on android very well as far as I can tell. I have not tested it but many people still hit problems. Perhaps with the next version of android things will get better. With the recent release of chrome for android and rumours of a official Google tablet in May perhaps we will not have to wait for too long.

Then again you never know.

I of course have a whole load of small applications I would like to write should android get itself into gear in-terms of a descent WebView component so I can code simple application the way I want to.


Friday, 7 October 2011

First Ever Sale!


So it has been a bit of a fun week for me.

I published a new version of Days Until and also published an ad free version for those that don't like ads or just want to support me (the developer) in a more direct way.

I have actually had a sale! This marks the first time in my life where someone has directly brought a piece of software that I have written in my spare time coding. I work professionally on software so lots of people have brought stuff I was written while at work. I am quite happy about this.

I am also progressing on my next app for android. Deciding that JQueryMobile was not going to fix its issues (in the sense they are android issues really) I reverted to the more traditional way of developing for android, that is with Java and the supplied API. It is a bit of a shame and if later versions of android and JQueryMobile work well together I can easily see myself using it for future apps. For now I want to make progress and not deal with the issues that are coming about from JQueryMobile.

Of course I am dealing with alpha software when I mess with PlayN but I am OK with that as I am just messing around with that at the moment.

Tuesday, 4 October 2011

Days Until


Over the past few days I have returned to a project that I have not worked on for a while. That is my Days Until app I published for android.

This app holds a special place in my memory as it is by far the most popular app I have made and won me a free nexus one a long way back. I have not tended it very much over the past year but have recieved a fair number of emails asking for features. Until now I have been putting off doing them, partly because I have been busy doing other stuff :)

The return to proper android programming has been quite easy. I was expecting a little bit of a getting back into it period but I just seemed to have slipped back into it. I also suspect every question I could possibly want to ask when I get stuck has already been answered on stack overflow, sometimes it feels a bit like I have an expert android programmer sitting next to me ready to answer any question I may have.

Latter this week I will be posting my first update to Days Until in a long time. I am also planning on offering a paid for version that is identical in terms of features but with the adverts removed. If it manages to sell even a couple of copies I will be happy.

Thursday, 14 July 2011

Getting An Android WebView Set Up

Creating a little WebView inside an android app to run my web app locally on a phone has been a bit of a pain. By default webview is fairly locked down and for a good reason, security. That means to be useful we have to turn lots of things on in order to do anything useful (assuming you want to do something other than display simple html). There the fun begins. Turn on JavaScript, Dom Storage and a host of other things.

Then local storage is not persistent so goes away when when the app closes, not really what you would expect from localStoarage. To get persistent persistent storage you have to google a little more and eventually arrive at this little bit of code like this

String databasePath = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();  
webview.getSettings().setDatabasePath(databasePath); 
A little cheer as everything seems to be working. 

Perhaps I would have preferred a function called setUpForLocalWebApp() that turns on all the stuff you need for a local web app but then I guess that would be too open to coding abuse with programmers turning it on when they should not. Still this is code I only have to figure out once and use again and again. 

Monday, 2 August 2010

Quite a Productive Night.


Android wise I produced my first AI process, the random player. Yep a computer component who just places pieces randomly. Not exactly the most difficult AI to beat (Thankfully) but it will serve the purpose of weakening any stronger AI players I create. If one in 5 moves is a random move people should find it easier to beat.

It also served the purpose of driving the code forward and some refactoring, things are starting to find their natural place although there is more refactoring to get the stonger AIs in place. It is simple stuff just pushing methods around so I can ask the right object questions.

I also managed to get a bit more GWT learning in place. Getting GWTCanvas hook up was a bit of fun, plus I managed to get some scroll bars added as well. Yes it is all simple stuff but it is good to get these wins and help grow my confidence. Next up is writing an example of the incremental command. I have seen GWT is pretty fast but there is no excuse for freezing the browser and given I don't have an upper limit on the time it will take to compute things I need to be ready. 

I considered web worker scripts as they seemed like real threading but they appeared to not be fully supported in GWT and currently I prefer to keep it to the core GWT where possible and only branch out when I have to. 

All that in two hours and my brain not being at 100%. Time for an early night.

Thursday, 29 July 2010

Game Progress


Progress on my next android game continues quite well. I have made a serious dent into the core aspects of it. Probably the big unknown is writing the AI. 

The game play leans itself towards a max-min algorithm but I am suspecting it will be very easy to make it impossible to beat so I am planning on a series of mini brains that have various styles like place a random piece, cause as much damage as possible along with the more traditional search techniques. As I write this I am pondering how to score a board it is quite complex because you can have a huge number of your army wiped out in one move if you are not careful so scoring based on number of pieces is probably not ideal, I am sure I will think of something.

This is the last unknown in the project. After that there will be quite a bit of grunt work and probably a few weeks of polish. One of my aims is to make it the most polished game I have made on android and I am expecting another month or two given the rate of progress.

Monday, 26 July 2010

Waiting on the Monkey


Well I am currently sitting here at my computer just typing as I think. Yep I am waiting for another large round of monkey testing to finish off an update to Days Until. I was not planning on doing an update until later in the year but as I was cycling home I could see how to implement a feature a user had requested with great ease. Only about an hour of coding was required so I figured why not. I added years to the count down options

Nothing earth shattering there but it is these small incremental improvement that make an app. Another 15 minutes and I should be able to do some final tests and then upload. 

Last night I also progressed with the little game I have been working. Yep it was quite a late night. My other half thinks this should be the first game that I attempt to sell on android. I am not sure why I have been putting off attempting to sell stuff on android. Any additional income is welcome and to be honest it would not take many sale for a game to beat what I earn from advertising.

In some ways it is a little nerving when I think about selling stuff. With free app the user does not spend any money when they are buying stuff I feel like I need to provide value and there for have to try a lot harder in this hobby of mine. Ok no more self analysis!

I seem to be being drawn back into programming in clojure. Probably because it is a pragmatic variant on lisp although given my current project and those planned it will not get much in the way of widespread use from me.

Testing Finished!

Monday, 12 July 2010

Tests on Android

Last night I added unit test to my the android game I am developing. This is quite a step for me. While I make up of unit tests when possible it is something I have not done on a android project until now.

It is funny given I am addicted to them on other platforms, perhaps one of the reasons for not using them on android is none of the work has reached a complectixty that I felt needed unit tests. I can hear some TDD expert reaching for a large axe in order to take out this programmer.

I will say it to irritate the TDD gods, for small projects that have a definite limited scope writing unit tests slows me down. I can hold the complexity in my head and reaaching the ideal code structure is not important. Abstractions leak happen, things are not quite where they should be and sometime state is repeated in places. For code programs less then say 2K lines of Java, for me, it is not a big deal and writing tests always feels like an overkill and a waste of time.

That is just what I have experienced and this is particularly true in in simple games where you have to play the game so much to balance it you naturally do a lot of testing.

Now for apps or code I expect to work on for an extended period I tend to write tests. I also attempt to write the tests first in many cases as I find it helps to clarify my thoughts.

Another really important bonus of test is I can safely work on code while tired. When I am tired separating what is meant to be happening and writing that in a test then making the code do that saves me a lot of headaches. How many times have you returned to some code you hacked out late one night and asked yourself what was I thinking?

I suppose I do wonder why the games industry has not taken on TDD or at least comprehensive unit tests with more vigor. Their code is very complex and the industry traditionally works its staff pretty hard and so a lot of code is hasked out late at night. They seem like the ideal candidate for these processes. From a few of the friends I still retain from my stint in that industry it does appear that they are heading that way but it is sort of after nearly everyone else has made progress in that direction.

Sunday, 11 July 2010

Ponder this reflux and more

The ponder this game I released earlier this week has performed about as expected. Near the end of devlopment  I started to think it was not a super natural fit for mobile phones and so wanted to just push it out the door. My other half played it and said it was a little bit difficult even on easy level. Her other comment was the numbers where a little hard to press.

With that in mind I think I will summon up the energy to do a release to fix some of these problems. I will balance out the difficulty and attempt to increase the size of the squares. This should improove the playability some what. I suspect with these improvements the game should play a lot better on mobile devices. I suspect near the end of development of the first release I was just rushing. I should have got my other half to play test it before release and taken on her advice.

In the mean time I have started work on another game. Just having a simple framework of reusable code in place really help with getting everything set up. In a few hours I had the start of a game forming. Again it is a simple board based game but this time with opponents... Each game I am trying to grow my base of reusable code. Oh an I
promise to put some sound in this time!

In the back of my mind I keep considering porting the frame work another system, say applets. While most of the code is platform independent some android stuff has leaked in. For now I am not going to worry too much as porting really feeds my geeky desires.

I stopped looking a Gwt for a while and moved onto looking into the app engine. I decided this was my biggest unknown when it comes to doing a web app. I read some docs and watched a few you tube videos. I plan to spend a couple of evening going through the tutorials provided with the documentation. None of it seems particularly hard it is more a case of demystifiying things and getting some of the knowlegde into my head so I don't have to look everything up.

Monday, 5 July 2010

Ponder This

At last I release another small game for android OS. It is pretty simple and won't wind any awards for originality of design/code/graphics. It does however mean my little code framework has been used in two games now and my experience is starting to build. Visit my android site or search for "Ponder This" on the android market place to see what I have been up to.

For those that are not that interested it is a simple grid based number logic game. I find these types of game quite addictive but I know other share no real interest in them.

I am throwing around some designs for the next game in my head at the moment.

Monday, 14 June 2010

Android Update


I have found my focus again when it comes to android programming and started to work on a simple little game. It is a clone number puzzle game I used to play as a child on an amiga. At the time I sunk a fair amount of time into it so I figure there must be some addictive element into it. That said I will be happy if it get 3 star ratings and a 1000 downloads. I suspect my visual standards will not be that great.

I also put out a small update to DaysUntil and promptly added a Force Close to the code. For those that don't know a force close is the android name for it crashes. Oops!

I also continue a journey into lisp by continuing to watch the original structure and interpretation of computer programs over on you tube. It is fascinating to watch just to see how little we have progressed over the past 24 years. Perhaps monads to help solve the issues with pure functional languages and perhaps we empahsise more unit testing where they prefered incremental testing but I suspect in bigger systems they would have used the concept of unit testing even if they don't mention it in the lectures.

The alternative view point is perhaps they were just that far ahead of the curve. In which case I would love to know the ideas that are being taught at MIT at the moment.

Monday, 3 May 2010

Nexus One Arrived

I qualified for the google device seeding program that they announced in March. Last Friday the device finally arrived. Yep it took that long to be delivered and I imagine there was some supply change or delivery issue. Most people in Europe seem to have been hit by this delay in delivery. Then again it was a free device so waiting is not really a problem.

First impressions are wow it  has a nice screen. And wow it is fast.

Until now I had been developing using just the emulator and relying on that being accurate. The emulator does have one draw back as you have no idea of the performance to expect. This limits the complexity of calculations I can do. Writing something that won't be able to run smoothly on any phone made in the next five years would be quite an easy thing for me to do.

I guess I should finish this post with a thanks to google for running the seeding program.

Wednesday, 28 April 2010

Android Render To Bitmap

Here is a little bit of source code for android that show you how to render some graphics to an integer array and pass that into an ImageView class. The bit I do not like very much is the checking for the size change and reallocating the array.

At the point on onResume the display ImageView has not been resized to it correct size so when you call getWidth/getHeight it returns zero. The only way I could see to handle this was to dynamically update it. The initial size of 50 is needed as the ImageView object is only resized then it actually has some data in it. Well as far as I can see anyway. If there is a better way to do this please let me know.

Incidentally if you choose to turn off (comment out) the display you get quite a nice effect and android attempt to stretch and smooth the image.

public class RenderToImage extends Activity {
int width = 50, height = 50;
int pixels[] = new int[width * height]; // Render into this
ImageView display;
Handler handler;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

private Runnable runnable = new Runnable() {

public void run() {
updateDisplay();
display.invalidate();
handler.postDelayed(runnable, 10);
}
};

@Override
protected void onResume() {
super.onResume();
display = (ImageView) findViewById(R.id.RenderImage);
handler = new Handler();

handler.postAtTime(runnable, 100);
}

void createMess() {
Log.d("WIDTH", "" + display.getWidth()+ " height:" + display.getHeight());

for (int i = 0; i < pixels.length; ++i) {
pixels[i] = 0xffaa88aa;
}

for (int i = 0; i < 1000; ++i) {
pixels[(int) Math.floor(Math.random() * (pixels.length-1)) ] = 0xff00ff00;
}
}

void updateDisplay() {
if (width != display.getWidth() && display.getWidth() != 0) {
width = display.getWidth();
height = display.getHeight();
pixels = new int[width * height];
}

createMess();
Bitmap bm = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bm.setPixels(pixels, 0, width, 0, 0, width, height);
display.setImageBitmap(bm);
display.invalidate();
}
}

Tuesday, 27 April 2010

Generate And Play A Tone In Android

Update: Thanks to xxv for spotting a bug in my encoding. He posted the updated code on stackoverflow, here is the link and made a comment here to let me know. Basically I was getting the byte order wrong in the encoding and forgetting to factor in the sampleRate into the wav- oops and sorry! I have update the code here.

Original post.

I threw this together the other night just to figure out how to do some very simple sound synthesis. I am not going to go into details about how the code works as it is pretty obvious for the most part.

It basically generate a sine wave at a given frequency then converts this into a 16bit pcm format and finally plays it. I used a thread to make sure my generation does not block.

Sound synthesis is something I would like to spend some more time messing with. I have written some Haskell code that lets me play with some synthesis ideas, nothing elaborate. One day I will get round to porting it to Java and making some synthesis apps for android.

Here is the code.


public class GenerateSound extends Activity {
private final int duration = 3; // seconds
private final int sampleRate = 8000;
private final int numSamples = duration * sampleRate;
private final double sample[] = new double[numSamples];
private final double freqOfTone = 100; // hz

private final byte generatedSnd[] = new byte[2 * numSamples];

Handler handler = new Handler();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

@Override
protected void onResume() {
super.onResume();

// Use a new tread as this can take a while
Thread thread = new Thread(new Runnable() {
   public void run() {
     genTone();
     handler.post(new Runnable() {

public void run() {
playSound();
}
});
   }  
 });
 thread.start();
}

void genTone(){
// fill out the array
for (int i = 0; i < numSamples; ++i) {
sample[i] = Math.sin(2 * Math.PI * i / (sampleRate/freqOfTone));
}

// convert to 16 bit pcm sound array
// assumes the sample buffer is normalised.
int idx = 0;
for (double dVal : sample) {
short val = (short) (dVal * 32767);
generatedSnd[idx++] = (byte) (val & 0x00ff);
generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8);
}
}

void playSound(){
AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
8000, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, numSamples,
AudioTrack.MODE_STATIC);
audioTrack.write(generatedSnd, 0, numSamples);
audioTrack.play();
}
}

Monday, 26 April 2010

No Gold Rush For Android


It should be pretty obvious now that there won't be a so called gold rush for developer creating android apps. While I was out running this morning I was pondering why.

The original gold rush was where people quite literally rushed across a county to stake claim to some land in the hope of finding gold quite literally in the river beds. Basically you could find gold just lying around... I have no idea if this is factually true, I suspect a lot of hard work was involved. The gold was still on the surface because the local inhabitants did not value gold in the same way the Europeans did?

In computing there have been plenty of gold rushes. The two that spring to mind are the casual game gold rush. Game programmers suddenly realised lots of middle age women like to play games and pay money for them. Suddenly lots of casual game portal sites appeared and some developers got rich servicing this need. The ones that got in early had a pent up demand and did not not need a game with high production value to make a lot of money. Demand was just that high. The gold rush had started and the media reported some people striking it rich.

Trouble was as more competition appeared they competed by increasing production values. Make your game more shiny than the next. This ate into the profit margins. But times were still good. As more and more developers entered the market the portal sites started to treat developers as a comodity and reduce the spilt the developer got. They were able to do this because development teams where a commodity as each individual team could easily be replaced. The skill required to clone a match 3 game is not immense. Still the portals sites had a lot of customers and if you (a developer) got in the top ten then times would still be good.

Still more developers entered the market. Productions standards where about as high as they could get for these type of games. The next easy thing to do was to start to compete on price. Suddenly developers where only getting 30% of $6.99 instead of $19.95. Smaller portals could not compete with the big ones and started dropping like flies, concentrating more power in the bigger ones and giving developer less options to go elsewhere. 

The gold rush in casual games is well and truly over, in all honesty the gold rush was over after the first part. Once the media started to report the success of companies going from 0 to large sums of money it was probably too late to get in on the best times.

That is not to say their is not money to be made in the casual game market it, like a lot of things, is no longer easy.

The Iphone gold rush follows a similar story. There was a lot of pent up demand for apps. Remember apples did not allow app development on the phone for a while as they wanted you to do mobile web apps for the iphone. So by the time you could actually write and sell apps lots of Iphones were already in the market. So again huge demand but zero apps.

The early adopters got rich because there was nothing else to buy on the market. This got reported in the media. More developers moved in, production values of app increased if you want to be successful while at the same time there was a race to the bottom in terms of pricing.

Guess what? To be successful in the iphone market now takes hard work and it is certainly not a gold rush anymore.

So to return to why android is never going to have a gold rush. Well it should now be pretty obvious that a gold rush in the computing industry needs a demand that is not being satisfied. Android entered the mobile phone market when it was understood the app stores are expected and developers where there from the outset to meet the demand when phones were released. That means demand has never build up to the point where it is easy to get rich easily. Instead android developers are going to have to work on their products and make something good that people want to use in a competitive environment.

I don't see that as a bad thing. It means developers can more easily plan as the landscape that they deploy apps in is a little less bumpy.