Tuesday, July 28, 2009

PetBook Woes

The last app I worked on before focusing on the Android Developer Challenge II was PetBook, a little app that let's you store information such as groomer and vet info about any number of pets, and create photo albums for each pet. There's an analogous app for the iPhone, and I since DogWhistle had done so well, I thought this would be a popular app. I was wrong. The app has had 25 downloads, with 17 active installs. That's a flop.

Things got a bit worse. I'd tried to drop the price from $2.99 to $1.99 several times, but for some reason the price was not updating properly. So I thought I would toggle from free back to paid. Big mistake...that isn't allowed. If you change a paid app to free in the market, you absolutely cannot change it back to paid. I'm not sure why the market is built this way, but oh well. So I had to unpublish that version, change the package name, recompile the app, and resubmit it to get it back on the market in a paid version. Lame.

Recently this site posted a positive review of the app, but it certainly hasn't led to any sales. I'm tempted to just make it free so that people can use it. I worked pretty hard on that app and learned quite a few new things, such as using XML for persistence in Android and how to handle images and image galleries. I think it's one of my best apps and I hate to see it lay there unused.

Friday, July 17, 2009

Mark Murphy on ADC2

Mark Murphy has some advice regarding the Android Developer Challenge 2. Unfortunately it's coming about two weeks before submissions start, but it's still useful.

Basically he suggests publishing a draft of the submission app on August 1st on the Android Market, before submitting it in the contest, in order to get some early feedback to allow for revisions. That would be nice, but I'm just not going to have my app ready by then. Some version of it will be ready by the end of August, but I'm just not going to have enough time to solicit feedback.

He also says to make sure the app isn't buggy. Kind of obvious. And that might be a problem for me. Again, I don't have much time, and this is the most complicated app I've done so far, so there might be bugs. I'm especially worried about out of memory errors, since I'm using a lot of resources.

The four criteria for judging are supposed to be:


  • originality
  • effective use of the platform
  • aesthetics
  • indispensability


I think I'm doing well under each of those criteria. Murphy recommends focusing more on aesthetics, under the premise that judges will have a subjective bias for prettier, slicker apps and unconsciously weight that criteria more.

He also says to try to pick an underrepresented category. Again, probably too late with the advice there. My app most certainly will not fall under anything but a game category.

Another piece of advice is to localize the app, which seems a little strange. The rules state the app must be in English. Murphy thinks multi-language support would score brownie points...but how would you decide which ones to implement?

Finally the best advice is to keep things in perspective. ADC1 had about 1,700 apps and ADC2 will only have 30 winners. I think my concept and design is great, but the implementation will most definitely fall short of my original scope. The hope is that users and judges will enjoy what is implemented and will want to invest in seeing the game fleshed out. I would consider making the final cut (20 apps from each category, or 200 apps) a victory, but even if I don't make it that far, I will still have a workable prototype, will have learned a great deal while making the game, and will still have a viable app to release on the market.

Tuesday, July 7, 2009

Revenue for June

Despite not releasing any new apps last month, my revenue from sales and advertising was right at $400. Sales were actually up over the previous month by about $30, but advertising continued to slide by about $80. When it comes to advertising in apps, at least the way I'm doing it, the age of the app definitely makes a big difference.

Android devs received an email stating that free apps were now available in Romania and Bulgaria, even though Android devices aren't sold there yet. And the free market opens to Japan on the 10th of this month. I would simply be happy if my sales remained steady as new devices and new markets come online.

I have no doubt that I would have made more money in June if I'd continued along the same trajectory, releasing small utility apps while working on medium-sized games. I had requests for a Domino game app, and would likely have released that last month if I had not been working on my game for the Android Developer Challenge II.

So I'd be happy with another $400 this month, although it's probably looking more like $250-$300. I hope the investment in Relativia pays off.

Friday, July 3, 2009

Relativia Gameplay

I'm working on a game for the Android Developer Challenge II. I've hired an artist to work on character, background, and item art. I've got the basics of the combat system worked out, and I thought I'd share a short video demonstrating how gameplay will work.

The player is on the left side, the enemy on the right. Each turn, a player can use one action (an attack or spell, if they have enough of the right kind of energy) and they may drop one token into the playing grid. The game is very much like Connect 4. If a player matches 3 or more in a row of a given token type: gems (square), mana (round), or skulls, those tokens are removed from the grid. If gems are matched, the player gets gem dust, which is used to purchase items in markets. If mana is matched, the player gets energy corresponding with that mana type (blue, orange, green, or purple). If skulls are matched, damage is done directly to one's opponent. Actions can either cause damage to one's opponent, heal the player, or have some other effect (like gaining an extra turn). A given battle ends when one player reaches zero health points.



I'd like to add in more polish, e.g. feedback events for matching, smoother animations, etc., but the deadline is about six weeks away and I'm rushing just to get the basics implemented. I'm optimistic about the progress, but a bit worried about getting it in good shape for the contest. We'll see how it goes.

Tuesday, June 23, 2009

How to Change Your Spinner Typeface

Pretty much every widget in Android that contains text has a setTypeface method...except for Spinners. I looked around in vain for an example or tutorial that would demonstrate how to set the typeface for text in a spinner, so I asked for help in a couple of forums. Mark Murphy replied with a proposed solution, and Philip helped explain the answer to me, so for anyone who needs to do this in an Android app and doesn't know how, hope this helps.

First, create a new XML file in your res/layout directory called "my_spinner_style.xml", and put in something like the following content:

android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="9pt"
android:singleLine="True"
android:id="@+id/spinnerTarget"
android:textColor="#000000"
android:gravity="center"/>
Then in your code, use something like this:

Spinner mySpinner = (Spinner) findViewById(R.id.my_spinner);
mySpinnerArrayAdapter = new MyCustomArrayAdapter(this, R.layout.my_spinner_style); mySpinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Normally you would create a new ArrayAdapter for the second line, but in this case you need to create a custom ArrayAdapter and override the methods that get the TextView from our custom spinner style.

So, you need to put in the code for your custom ArrayAdapter, like so:
private class MyArrayAdapter extends ArrayAdapter {

public MyArrayAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}

public TextView getView(int position, View convertView, ViewGroup parent) {
TextView v = (TextView) super.getView(position, convertView, parent);
v.setTypeface(myFont);
return v;
}

public TextView getDropDownView(int position, View convertView, ViewGroup parent) {
TextView v = (TextView) super.getView(position, convertView, parent);
v.setTypeface(myFont);
return v;
}

}
The font you want to use needs to reside in the assets/fonts directory, and you access it like so:
Typeface myFont = Typeface.createFromAsset(getAssets(), "fonts/myfont.ttf");
And that's pretty much it. I always appreciate it when I'm having a problem and I Google around and find in someone's blog that they've already dealt with the same issue, so I hope this helps someone.

Friday, June 19, 2009

Golf Solitaire Free Marches Up and Onward

According to AndroidStats, as of this writing, Golf Solitaire Free is #15 in the Cards and Casino category, having moved up very quickly through the rankings.

This is thankfully also resulting in a decent amount of conversions to the paid version. Spades Free has slid down to #6, but that's reasonable, considering I haven't done any updates since near release.

I'd like to at least keep a decent trickle of revenue coming in over the summer as I work on my game for the second Android Developer Challenge.

Saturday, June 13, 2009

My First 80-something Days in the Android Market

So I've been selling and releasing ad-supported apps on the Android market now for nearly 3 months. It's difficult to gauge success. I thought I wasn't really doing all that well, but it sounds like relative to all but the outliers in the iPhone market I'm doing pretty well. This iPhone developer is complaining about having a couple of apps in the top 100 in their respective category and still only pulling in about $20/day.

So here are some summary stats for reference.
  • I released my first paid app, ConcretePal, 83 days ago.
  • My average daily net income for that span is: $19.41
  • My average daily income from ads for that span is: $8.74
    I've released 22 total apps: 14 paid and 8 free (6 of those are ad-supported demo versions of paid apps)
Here's a visual breakdown:

I thought I was going to do very well in the market when I released Spades for $2.99, it was the only one on the market, and it sold very well. But as you can see, that didn't last too long. Sales for a given app settle down to a pretty low baseline, so you constantly need to be releasing new apps if you want to keep the revenue stream coming.

So, I'm not getting rich, but it's nice supplemental income. And it sounds like it's comparable to iPhone apps that are doing reasonably well.

I hope the sales do stay up all right over the next couple of months. I'm not going to be able to release any new apps, since I'm working full-time on my game for the Android Developer Challenge II. It's coming along pretty well. I just hope I can get a decent working version ready for submission by August.

Soon I'll post some screen shots and concept art to give you an idea of where it's headed.