I wanted to post a quick note just in case anyone else runs into this issue or I forget it later on.
jMdns is a great java library to provide zeroconf/bonjour capabilities to your Android application. I was successfully using this in a project up until Android 4.0 “Ice Cream Sandwich” aka ICS, once Android 4.0 devices were starting to be used more often I was receiving user reports that the application was not working. I knew it was a jmdns issue, I just didn’t have an ICS device to be able to track down the issue.
Well I was at Google I/O this year and picked up a few Jelly Bean (Android 4.1) devices. Both of these devices have the same issue that was being reported by Android 4.0 devices, basically the zeroconf functionality was not working.
It took me quite a while to track down but I figured out the problem.
Most jmdns Android tutorials instruct you to create your jmdns object by calling “jmdn.create();”. This works fin in Android 2.x and 3.x, but does not always work with Android 4.x
To fix the issue use the “jmdns.create(String Hostname);” constructor passing in the ip address of your wifi connection which can be obtained from a WifiInfo object from the Android WifiManager service.
Hopefully this helps people in the future, it seems something changed between Android 2.x/3.x and Android 4.x where the default jmdns.create() function is no longer bound to the regular wifi interface.
snctlnSoftware is Back!
The truth is that I never really went anywhere. I have been staying busy with Android development and have more or less learned what I need to know for iPhone development.
I maintain a full time job as a Mobile Software Engineer at a company where I have been employed either full time or as a contractor for the past 6+ years. I wrote our Android app and I maintain our iPhone app. Objective C and Xcode is a beast, it feels very different that developing Java with eclipse or even C++ with Visual Studio, but that isn’t a problem. Over the past year and a half I have become comfortable doing whatever it is I need to do with iOS programming and have released some good updates to our app.
I have not released a new Android app under snctlnSoftware in years, that will be changing very soon. However, I have been keeping busy with Android programming beyond my day job. Last year I took a contract to develop a port of an iOS program and I find the finished product to be a very usable and handy utility.
Recently I started a new project for my friends over at ThePowerbase, an Android app that lists their stories, basically a nice looking wordpress RSS feed reader. It is shaping up to be a good project, and as always with my code I am implementing it as an Android library. The current state of the library is that it works with just about any WordPress site, just add a few images and use the library t compile a good looking Android app that presents your WordPress site content in a visually appealing manner. I even plan to make use of the library to produce an app for this site, snctln.com
The snctlnSoftware Android game “WordWrench Full” is free today from the Amazon Appstore for Android.
So I got out of the habit of blogging… every few days I have an idea of something to write about, but I never end up writing about it. So here is a quick post to try and get back in the habit.
I develop games and applications in my spare time, when I release a free application I am doing so with the motivation for making a profit from ads or upselling the user to the full version. At the same time I am providing a product for free, a product that users do not have to pay for. I appreciate all of my users (coming up on 5 million of them now…), I am very happy that they enjoy my work, and I do my best to try and update the product when problems arise.
Recently I have updated a few applications. I have been working on an Android project at my full time job for the last 2 months and I have had some ideas strike me on how to improve my existing applications. One thing that I learned was how to take advantage of using a feature added to the Android SDK over a year ago, Android Library Projects
Android Library Projects allow developers to put code that can be shared by multiple applications into a library that the Android SDK knows how to work with. This solves one of the fundamental problems I had with Android. When I first released many of my apps the Android Market did not support selling applications, so I released free apps with the intent of releasing paid version of these apps at a later time. The code that I used to write the app was the same, I would just change a constant or 2 around and recompile to test the various version s of the app. When paid apps could be uploaded to the Android Market I quickly learned that there was a problem with this plan. The Android Market uses the Java package name to differentiate between apps, so my idea of having 1 code base that I could conditionally compile into 2 different builds died quickly. I panicked and in the rush to get paid applications uploaded I did one of the worst things imaginable to a developer, I made a copy of my code and checked it into my subversion repository under a different directory name with a different package name. Other than the package name the code was identical. Non developers might ask “What is the problem with that?” and the answer is from that point on whenever I made an update I had to do it in 2 places instead of one. Every small tiny change I made I had to remember to repeat it in another place, this is a huge problem and would lead to the projects getting out of sync.
So I used my newfound love for Android Library projects and applied it to my own applications and solved a problem that I have had for nearly 2 years. Now BreakTheBlocks and WordWrench both use Android Library projects to unify the codebase. I no longer have to worry about making a change in 2 places (Lite and Full), or forgetting about some small detail because from now on all I have to do is make my change in 1 place and from there the application compiles the way I want it to. This was not a simple project but in the end it is very nice to know that I have one of my biggest annoyances solved.
Besides unifying the code base I also have learned a fair amount more about memory and thread management and I would like to apply my new knowledge to BreakTheBlocks to make it a better application.
So after my library project work, and starting on some memory and thread optimizations I released an update of BreaTheBlocks.
That was 2 nights ago. Tonight I decided to check the comments to see if there were any strong feelings one way or the other on my updates. There were the usual grab bag of comments including my favorite theme of comments; the 1 stars ratings because people are having download problems (which I have no control over). However I saw a new trend that haven’t seen before
1 Star ratings for not posting a change log…
When I started posting applications to the Android Market in 2008 many features that the Android Market now has were not available. So a few months ago the Android Market started allowing developers add changelogs, which I agree is a good thing. The thing is I have not updated an app since changelogs were available and the fact that I could now post a changelog along with an application update slipped my mind. So since I didn’t post a changelog I received multiple 1 star ratings and was called lazy. I released an update to a FREE application, this update took a considerable amount of time to make including multiple nights of lost sleep, there is nothing groundbreaking in the update but this update is very important because it lays the groundwork for many future optimizations which I plan on doing in the very near future. The fact that users feel that because a developer does not post a changelog that app deserves 1 star is completely beyond my comprehension. To me that is the equivalent of someone attending a free concert by a band that they like and even though they liked the music at the end of the concert they boo the band because they forgot to acknowledge their hometown and say “No One Rocks Like…<check back of guitar> Springfield!” and tell the crowd that it was “The best crowd ever!”.
When a user submits feedback I do listen. I often spend days thinking about the smallest bit of code and how I can optimize it for a better user experience. I may not always be able to make updates as often as users would like but I do this in my “spare time” which is very hard to find.
I have gone back and added changelogs to my updates I hope this keeps the users happy, I now know not to forget them…
Be on the lookout for more updates in the coming weeks, I have a feeling that the gameplay on BreakTheBlocks is about to improve greatly.
Well it has been a while since I posted but thought I would do another self serving post.
BreakTheBlocks Lite continues to be my most successful Android application. Last month it passed the 2 million download mark and this morning I noticed that not only is the download count up to 2.3 million but the active installations is up to over 1 million!
Sales of the full version are still going strong and my adsense ad revenue continues to surprise me.
Thanks to anyone who has downloaded any of my apps and has supported an independent developer, father, husband, and all around code monkey.
I am planning on some updates including introducing some online high scoreboards into my games after I finish my current super secret non-android web project (building a cms from scratch and learning php/js at the same time lol)
It has been a few months since I have updated this page, life has been busy and I haven’t been doing too much work with Android. But I did notice something that I thought was interesting, this morning when I logged into my android developer console to check on my download numbers and sales I noticed a new feature
You can now view comments made on the Android market through the Android developer console web interface. This is a feature many of us developers were asking for before paid apps were even available back in the old days of Android (before February 2009 ) when the G1/ADP1 was the only device running Android. I released my first few games before I even owned my ADP1. back then if I wanted to see comments I had to get in my car and drive to the mall to go to the T-Mobile store to see the comments on my releases. Of course now I own 4 Android phones for for testing purposes (they all have a different resolution) and seeing comments is not too difficult. The ability to see comments from all nationalities is welcome too.
Well that’s all I had to say, and also as you can see I am very proud to announce that I am approaching 2 million downloads on BreakTheBlocks Lite and am slowly getting to 1 million on PingPong Lite, not bad for an independent developer .
The Android Market is an Open Market, at least in the sense that anyone can publish apps to the market after paying their $25 registration fee. Once a publisher has joined the market they can upload apps that are available to users within 5 minutes. This is great when compared to the process of that fruity App Store that requires developers to submit their work for approval which can take days or even weeks to be approved and be available to users.
The drawback to the Android process is that their is no quality control, so a developer can submit a horribly flawed application or even an application that violates the terms of service. These applications are weeded out by natural selection in my opinion. A horrible app will get low ratings and reviews which will deter future users from installing it. Apps that violate the Market terms of service will get reported and eventually removed. My personal pet peeve about the open market is developers that upload 20 different versions of 1 single app and justify the upload by giving each app a different name/color scheme/skin. These developers would be much better off releasing a single polished app that has the ability to download different themes/skins, Beautiful Widgets does this and I personally think that it is the best app on the market.
The benefits are numerous. Quick time to publish is what I mentioned earlier and is the reason for writing this post. Last night Engadget released an update to their Android app. The update was nice, it is no longer a “fullscreen” application that hides the notification bar, which was my main complaint about their app. Also the app now offers a home screen widget. It is a nice looking widget that has the Engadget logo and displays article titles from the previous day. I like widgets, but like most people I had an issue with the Engadget widget. On Android widgets exist on the homescreen, widgets can take up however much space they want as long as they do it within a 4X4 grid. For example, a single shortcut to an application takes up a 1×1 space in that grid, the new “News and Weather” widget takes up a 4×1 space in that grid, and the Analog Clock widget takes a 2×2 space on that grid. The Engadget widget released last night has the appearance of a 4×1 size, but it actually took up a 4×2 space on the homescreen. Users were not happy because they wanted to use the widget and not have wasted space on their homescreen. Within an hour of release the Engadget article added an update letting users know that they were aware of the widget issue and they were working on a fix.
18 hours after the initial released of their app with widget support they released an update version fixing the issue. This simply would not have been possible through the fruity app store. Some may say “It was bugged in the beginning and the approval process would have caught it.” I disagree. There was nothing technically wrong with their widget implementation. It was not optimal, but it did its intended job. The issue was a mere matter of user preference, because it was just a preference issue I feel that it would have passed any approval processes.
There are literally thousands of Android developers that know the benefits of the open market, but rarely do we see a higher profile app publisher demonstrate an exact reason why the Andriod model works so well.
Just a quick update,
According to the download numbers on my Android Developers Console the total download count between the 11 apps that I have published on the Android Market now total 2015762
downloads. BreakTheBlocks Lite leads the pack with 1.3 million downloads and PingPong Lite is the runner up with nearly 600k downloads.
2 million is a nice number and I am happy to see that so many people have given my apps a chance. Thanks.
Be on the lookout for an update to BreakTheBlocks. I got my Milestone (review coming soon) and am seeing the performance issues that I have heard so much about, still tracking them down but I am confident I will figure it out. I guess the extra 25 thousand pixels (54*480) that need to be redrawn quite often along with a much slower processor when compared to the Nexus One definitely make a difference in performance.
So BGR and Gizmodo picked up on a leak over at DroidDog of the above picture. The original post at DroidDog asks “Is the square Motowhat for real?”.
As a developer of Android games here is my reaction.
FOR THE LOVE OF GOD NO!
Looks like there is another screen resolution that I am going to have to support. This is the first one that really annoys me though, QVGA/FQVGA/WVGA support was trivial. At least those resolutions were all rectangular and I put together my games to be resolution independent assuming rectangular screens. Now we see a square screen and I am probably going to have to change my layout. My guess is it will be a 320×320 resolution like the Palm Treo Pro, but I guess we will all have to wait and see.
This isn’t really a post about Android, it is really just a mini rant about some of my opinions on a few of Apples announcements yesterday.
So the majority of people that might actually read this blog posting already know this, but yesterday Apple held a press conference announcing some of the upcoming features offered in their iPhone 4.0 OS. Overall I think they did a good job, they brought out their own style of multitasking, and ummm some other stuff too.
I think it is great that they brought multitasking to the iPhone OS. This is something that they should have figured out before ever releasing a phone in my opinion. I do have some problem with it though. Their multitasking is essentially 7 approved services that you can hook up. I feel as though most people are saying “Wow this is great, 7 approved ways to multitask in my applications. I will never need more than 7 ways to multitask and I am so happy that Apple came up with this innovative concept that will enrich my life forever…“, my take is this, if you want developers to innovate don’t give them such harsh restrictions. Truthfully I can only think of one thing at the moment beyond the blessed 7 but that doesn’t mean there aren’t hundreds more. My thought is accelerometer readings. A few examples would be a pedometer app, or a car performance app such as Dynolicious, I am sure the devs of these types of apps could find many things to do with streaming accelerometer data going on in the background when their app isn’t the one showing.
Sure all application frameworks give you restrictions, on any given framework there will almost always be private apis that 3rd party developers shouldn’t use. Hopefully framework designers are smart enough to realize that they do not know everything and will leave room for innovation.
I don’t dislike Apple, my wife uses an iPhone 3G and it is a great phone, I use a Nexus One and it is a great phone too. I am eventually planning on buying a mac and trying my hand at some iPhone development, but for now I am enjoying tinkering with the possibilities and openness of Android.
Oh and one last thing “Folders” on the iPhone is a feature? I was all like “ZOMG I CAN HAZ FULDRZ?” Not only has Android had it since at least 1.5 (I don’t have a 1.0 or 1.1 device handy to check if they have them) it is a very generic computing concept in my opinion, beyond the commodore 64 and DOS the first GUI desktop system I used was windows 3.1 and I sure remember the whole drag and drop of folders. This is another feature that should have been in iPhone 1.0.