The Sad State of Google Play’s App Search

In it’s current state, Google Play’s app search struggles to provide relevant results. And at the same time rewards publishers with large marketing budgets that pad download counts rather than developers who make quality apps. SEO keywords clutter app titles as developers recognize the flaws in the search engine while app descriptions remain ignored.

Improving the app search in Google Play will help not only users in finding the quality apps they are looking for, but also developers in exposing their apps to the right audience.

An Example

Canada Post provides a service called ePost. If you’re not familiar with it, they send you electronic copies of common mail like utility bills that you can view online. It’s a free, awesome service, and very popular with Canadians.

Now, while I was on their website I noticed they offered an Android app. So I grab my phone and immediately open Google Play, searching for “epost”, expecting to find the app on the first page. After all, “epost” is a fairly specific, non-ambiguous search term.

Ovulation Predication Calendar? Why is that the 10th most relevant app when searching for "epost"?

Ovulation Predication Calendar? Why is that the 10th most relevant app when searching for “epost”?

The first few results listed email clients, after which it looks like Google Play decided to show me a list of the top 1000 most downloaded apps for Android. Apps with millions of downloads like, Twitter, Google+, Facebook, Dropbox, and yet none had a single thing to do with what I was searching for. After looking through all 20 pages of results, I still couldn’t find what I wanted.

Obviously something was wrong, I pressed a few of the apps and carefully combed through their descriptions, and there wasn’t a single instance of the word “epost” anywhere to be found in them.

The word "epost" appeared in the description, why didn't the app appear in my search?

The word “epost” appeared in the description, why didn’t the app appear in my search?

After going back to Canada Post’s website, I found a direct link to the app page on Google Play, and confirmed that the word “epost” does exist prominently in the app’s description. So why didn’t it show up in the search I just made? The app is fairly popular, with 100k – 500k downloads and its description contains the word I was searching for.

Findings

I experimented with a few more search terms and got similar results. And here is what I discovered:

Developers exploit flaws in the search engine by appending keywords to their app titles.

Developers exploit flaws in the search engine by appending keywords to their app titles.

  • Way too much importance is placed on an app’s download count. If you have two apps that do the same thing, the one with the most downloads will appear higher. In fact, it was very common to see apps with very high download counts appear in totally unrelated searches.
  • The title of the app has too much influence on how high an app appears in the search results. You can see developers exploiting this by appending key words to the apps name.
  • Not nearly enough emphasis is placed on the description of the app. As shown in my example above searching for “epost”, the app description was entirely ignored. This makes it not only more difficult for users to discover apps, but also for developers to expose their apps to users.

What Can Be Done?

I think it’s fair to expect a certain level of quality from a company like Google, especially when it comes to search engines, and it’s quite clear they could do better with the search functionality in Google Play.

  • When showing several similar apps, don’t sort them by download count, but by actual quality. Google has several metrics available such as install/uninstall trends, user ratings, application error reports, that could all be used to give a metric of an app’s overall quality. An app that has recently had lots of low user ratings, many crashes, and an increasing trend in uninstalls should rank lower than a similar app that has glowing user reviews, low error count, and an increasing trend in active installs.
  • Give app titles less weighting when determining relevancy in search results. Let developers be creative with naming their apps rather than trying to cram some SEO in the 30 or so characters allowed in the app title.
  • Developers spend a lot of time putting together their app descriptions, making them as detailed, yet brief as possible, not only to sell users on it, but also to attract search engine hits. It would be nice if Google recognized this effort and considered an app’s description when determining it’s relevancy in a search.

In The End

As a user, when you search for something in the app store, you expect to get a list of apps that contain the words you were searching for in the app’s description. And as a developer we expect our users to be able to find our apps if they search for terms contained in our app’s description. Right now these basic expectations aren’t being realized, and it’s hurting both users and developers.

FacebookGoogle+RedditTwitterStumbleUponEmail

Frost 2.7.0 Released

DuckDuckGoLogoVersion 2.7.0 of Frost has been released and with it comes big changes to the user interface. Frost first came out when Gingerbread was the latest version of the Android OS, and since then Android has made big leaps in how apps present themselves on the platform. The focus was on making it clear to the user what actions and options they had available to them at any moment, and because of that, the options menu button was removed, and action bars became commonplace.

With that in mind, we’ve removed all dependencies for the option menu button in our app, and placed all functions that used to be there in menus or action bars that are easily accessible on your screen. You’ll notice the browser menu is now sporting a new look with many more buttons, and the image stash has undergone a makeover to make things easier to find. We’ve also recognized newer devices by including high resolution icons for their higher resolution displays.

Frost has always focused on protecting our user’s privacy and with that we are happy to announce the addition of DuckDuckGo as a supported search provider in the browser. It’s only logical that we included DuckDuckGo as they share the same commitment to our user’s privacy as we do and we feel that it is the best option in protecting our user’s browsing habits. DuckDuckGo accomplishes what the larger search engines fail at, and that is treat its users anonymously. Your search queries are never saved or shared, and you can be confident your search results are never filtered based on profiling.

As always, your suggestions and comments are welcome.

Here is the full change log for version 2.7.0 of Frost:

  • Frost will exit if the power button is pressed or if the device goes to sleep
  • Updated browser menu interface
  • Fixed image downloading on 4chan and other sites
  • Removed options menu in browser – options available in browser menu
  • Removed options menu in image gallery – long press an image to view action bar
  • Removed options menu in image viewer – options available when image is tapped
  • Removed options menu in folder view – options available in action bar
  • DuckDuckGo available as search provider
  • Added option to change default search provider
  • Added hi-res icons for large high density displays
  • Optimized data access in bookmark stash
  • Updated useragent strings
  • Added ‘About’ section in settings
  • Further stability and usability improvements to importing images from the SD card
FacebookGoogle+RedditTwitterStumbleUponEmail

Frost 2.6.1 Released

Frost 2.61 has been released following the issues that Android 4.2 Jelly Bean caused due to Google changing the default provider for the built in AES encryption. Thanks again to all the users that reported the issue.

We’re currently working on version 3.0 of Frost. Planned changes include a complete overhaul of the bookmark stash, most notably allowing for bookmarks to be organized into folders.

FacebookGoogle+RedditTwitterStumbleUponEmail

Frost 2.6 Available

Frost 2.6 has been released for Android. Good news for those of you with large image stashes: this release focused on improving performance in the image stash folder view. We’ve managed to make huge improvements in speed. Using older versions of Frost it could take upwards of 20 seconds to load stashes with 1000+ images and 50+ folders. With version 2.6 we’ve managed to speed it up to the point where it takes a fraction of a second.

We’ve also made several changes based on user feedback. Cancelling a slideshow will allow the user to manually flip through the images in consecutive order. We’ve also finally fixed a bug that causes decode errors when trying to save images from certain websites.

We plan on doing these speed improvements iteratively. In the next update we will focus on adding bookmark folders as well as tools to help you organize your bookmarks. Not to mention applying many of our performance improvements to the bookmarks view as well.

Here is the full change log for this release:

  • Improved image stash folder loading performance
  • Added support for tel: links
  • Added image stash folder sorting option
  • Added quick scrolling to all lists
  • Added Google support libraries to improve compatibility
  • Moved change password dialog to settings menu
  • Imported files are now sorted in natural order of their filenames
  • Fixed image ordering when slideshow cancelled
  • Fixed bug causing decode errors when saving images
  • Fixed video player history not being cleaned up properly
  • Code optimization & bug fixes
FacebookGoogle+RedditTwitterStumbleUponEmail

Frost 2.5 Released

A note to Android 2.2 (Froyo) users: please backup your stash prior to updating. There is a bug in your version of Android that will wipe your stash when updating the app. Please see the FAQ for instructions on how to backup Frost and this post for more details.

 

We just released update 2.5 for Frost. As I mentioned in our previous post, we focused on the browser interface for this release. Our goal was to eliminate clutter in the options menu, and we’ve achieved this by moving a lot of common browser actions to a quick action menu in the tab bar. In future updates we will be working towards eliminating the options menu entirely as more devices are released without any hardware menu buttons.

The next biggest change is the addition of tab sessions. From now on, whenever you log into your stash you will be prompted to restore the tabs from your previous private session. Note that in order for your tab session to be saved, you need to be logged into your stashes.

Finally, there are countless optimizations and bug fixes. We’ve fixed some compatibility issues with some websites like Gmail and Twitter, as well as changed the way batch operations are handled to improve reliability and performance.

Please don’t hesitate to contact us with feedback using the contact form at the top of the page.

Frost Version 2.5

  • New browser interface
  • Added tab sessions. When logging into your stash you will be prompted to restore tabs from your previous private session
  • Added DOM storage support
  • Added password mask
  • Added support for new devices without menu buttons
  • Updated Import to SD interface
  • Improved batch data operations
  • View Image option will now open a new tab (Thanks John!)
  • Fixed tab cutoff bug
  • Fixed several site loading issues: Gmail, Twitter, etc. (Thanks V!)
  • Fixed crash on rotation
  • Fixed several rare crashes
  • A lot of code cleanup & optimization
FacebookGoogle+RedditTwitterStumbleUponEmail

Updating Apps in Android 2.2 Froyo leads to Deleted App Data

Our app, Frost, uses the Android/data/<package name>/ folder on the device’s external storage (SD card), to store app information. One benefit of doing this is that when the user uninstalls the app, any files on the SD card are deleted as well, leaving no clutter or orphaned files behind. At the same time, when the user updates their app, through Google Play or otherwise, the data is preserved.

At least, that’s what Google’s documentation leads you to believe:

If the user’s device is running API Level 8 or greater (Android 2.2+) and they uninstall your application, this directory and all its contents will be deleted.

The above statement is true, but in addition to that, whenever an app is updated in Android 2.2, it will delete all the contents of the Android/data/<package name>/ folder. This is the reason why some users of Frost complain their app data has disappeared after updating the app.

Google became aware of the issue quite quickly and fixed it, however it was too late as several devices were already running the flawed code. Some manufacturers released patches that included Google’s fix, but there are still a lot of devices out there that haven’t been patched.

The only real solution to this issue is to upgrade your device to Android 2.3 or higher, where this bug has been fixed. Until then, if you’re running Android 2.2, be sure to backup the contents of your external storage before updating an app. Then after the update is complete, restore your files using your backup. If you’re using Frost, you can visit the FAQ for instructions on how to backup and restore your app data.

FacebookGoogle+RedditTwitterStumbleUponEmail

Backing Up & Restoring a Remote SVN Repository

If you’re hosting your Subversion repository remotely, either through a web host or through one of many Subversion hosting services, you probably won’t have direct access to the server to be able to run shell commands on it. This can create a challenge when it comes to backing up and restoring your SVN repositories remotely.

Trying to achieve this using the svnadmin command will not work:

svnadmin load http://project.hosting/svn/repo < dump
svnadmin: 'http://project.hosting/svn/repo' is an URL when it should be a path

There is however a way of doing this remotely.

What You Need

You’re going to need a a tool called svnrdump. As described by Apache, “svnrdump replicates the functionality of svnadmin dump and svnadmin load, but works on remote repositories, instead of needing administrator (local filesystem) access to the source or target repository.”

The easiest way to get svnrdump is by downloading and installing the SVN client utility, TortoiseSVN and making sure to install the “Command Line Client Tools” in the installer options. You can then find svnrdump inside the bin folder where TortoiseSVN was installed.

Backing Up Your Repository Remotely

We’re now going to generate a .dump file which contains the entire history of revisions for our repository. To make a complete backup run the following command:

svnrdump dump [SOURCE_URL] > [DUMP_DESTINATION]

For example:

svnrdump dump svn://myrepohost.com:port/repos/myproject > C:\myrepobackup.dump

Note that this command requires your target server to be running SVN 1.4 or newer. For more information about the dump command as well as additional parameters please see the documentation.

Restoring Your Repository Remotely

Now that we have our .dump file, we can use it to restore our repository. To restore your repository run the following command:

svnrdump load [DESTINATION_URL] < [SOURCE_DUMP]

For example:

svnrdump load svn://myrepohost.com:port/repos/newproject < C:\myrepobackup.dump

Note that this command requires your target server to be running SVN 1.7 or newer. For more information about the load command as well as additional parameters please see the documentation.

Here’s a windows batch file that I use to make one click backups, it creates a file called SVN_YYMMDD.dmp in the same directory as the batch file:

for /F "tokens=2,3,4 delims=/ " %%i in ('date/t') do set y=%%k
for /F "tokens=2,3,4 delims=/ " %%i in ('date/t') do set d=%%k%%i%%j
for /F "tokens=5-8 delims=:. " %%i in ('echo.^| time ^| find "current" ') do set t=%%i%%j
set "outFilename=%~dp0SVN_%d%.dmp"
 
cd "C:\Program Files\TortoiseSVN\bin"
svnrdump dump svn://yoursvnserver:port > %outFilename%
PAUSE
FacebookGoogle+RedditTwitterStumbleUponEmail

Android Projects in SVN – What Files to Ignore?

Setting up your svn:ignore property when you first open a new repository is a good way of making sure you keep unnecessary files from being revisioned. There are basically two entries that you need to make to your svn:ignore list:

  • bin
  • gen

The /gen folder contains files generated by the Android framework, such as the R.java file, and the /bin folder contains files generated when compiling and running the application from within Eclipse.

The .classpath and .project files, as well as the .settings folder are generated by Eclipse, and are best kept in your repository as it makes importing your project into Eclipse much easier, not to mention these files rarely change.

FacebookGoogle+RedditTwitterStumbleUponEmail

Theme.Holo Causes Horizontally Scrolling TabWidget to Get Cutoff

If your Android app uses tabs that are implemented using the TabHost and TabWidget wrapped in a HorizontalScrollView you may have noticed that the last tab may get cut off at the end. This happens when the activity containing the tabs is using the Holo theme introduced in Honeycomb. Interestingly this bug only occurs in Jellybean.

The reason is because the HorizontalScrollView doesn’t take the width of the tab dividers into account.

To fix this, make sure you don’t call setDividerDrawable anywhere:

// This line should be removed as we don't want to set a tab divider
getTabHost().getTabWidget().setDividerDrawable(R.drawable.tab_divider);

Secondly, you want to add the attribute android:divider=”@android:color/transparent” to your TabWidget layout element. Your layout XML should look something like this:

<HorizontalScrollView android:id="@+id/tabscroller"
 android:scrollbars="none"
 android:layout_width="0dip"
 android:layout_height="fill_parent"
 android:fillViewport="false" >
 	<TabWidget android:id="@android:id/tabs"
			android:layout_width="0dip"
			android:layout_height="fill_parent"
			android:divider="@android:color/transparent" />
</HorizontalScrollView>
FacebookGoogle+RedditTwitterStumbleUponEmail

Frost 2.41 – The 1 Means it’s Better

Apparently the last patch broke hardware acceleration support on some devices, which in turn broke flash support, and reduced overall performance. Oopsy. I’m releasing a quick patch today that fixes that as well as a few bugs.

I again want to remind users that Android 4.1.1 Jellybean does not support flash. This is entirely out of our control, so please direct your rage at Adobe.

An awesome user named Lamar reported a crash bug with the import from SD feature which I’ve fixed.

One last note, there is a known bug with the interface in this version. If you’re using a device with Android 4.0+ (Ice Cream Sandwich or newer), creating a lot of tabs will cause the right-most portion of the last tab to become cutoff by a couple pixels. While this is purely an aesthetic issue, I just want you to be aware that I’m aware of it, and am looking at ways of fixing it.

I think I’ll be focusing on the overall browser UI in the future. I would like to move some buttons out of the options menu since I feel it’s starting to get cluttered. Perhaps add a drop down menu next to the tab bar, kind of like the organize feature in the gallery, we’ll see.

FacebookGoogle+RedditTwitterStumbleUponEmail