I'm just wondering what would be the best strategy to publish an application on the Android Market.

If you have a free and paid version you have two codes to update (I know it will be 99% the same but still) and besides all the popular paid apps are quite easy to find for "free" in "alternative" markets. Also if you have any stored data in the trial/free version you lose it when you buy the full version..

On the other hand if you put a free application but inside you allow the user to unlock options (remove ads/more settings/etc...) you only have to worry about one code. I don't know the drawbacks of that strategy and how easy/hard is to hack that to get all the options for "free".

  • Why do you have to lose data when you upgrade to the paid version? Is there a strong technial reason for this? Seems like a good reason not to upgrade, if I'm attached to the data in the free version. – FrustratedWithFormsDesigner Nov 22 '11 at 16:17
  • 2
    @FrustratedWithFormsDesigner: In Android applications live in their own sandboxes. If the application stores data in it's local directory, no other application can get at them, which includes the other version if you want to have it sold separately on the market. Of course documents should be stored to the "external storage" (usually SD card, but can be internal flash) that is accessible to all applications and shared to computer, so there is no problem with them. It depends on particular application what is left in the private directory. – Jan Hudec Nov 23 '11 at 6:38
  • It's one code only in either case, you are just using either compile-time or run-time conditionals in it. Unfortunately Java lacks compile-time conditionals, so you have to be creative there (Java can optimize away if(static_final_variable), so you will just have two versions of one source defining that variable).
  • The chance that someone will crack your application is the same in either option and depends on the strength of the check that the user has valid license. Google provides interface to check license on the Market through the Market client, but it also depends on how tightly you integrate the checks in the application and therefore how hard you make it to disable them via disassembling.
    • The license can be obtained in two ways, either by purchasing the app on the market (separate APK) or by in-app billing (unlocking features). The later obviously involves some extra work, so that slightly favors the separate applications.
    • On the other hand you could do the billing in single package yourself and avoid giving 30% to Google, but that's a lot of work.
  • One package with unlocking features will be slightly more convenient for the user, because settings and content will be carried over. How much this favors single package depends on how much such content you expect average user to have.

I haven't actually tried this, but one approach to upgrading on Android Market would be to have a separate paid license app that does not duplicate any of the code of the free app, but which enables features in the free app once it is purchased and installed.

It seems possible that the well known app ROM Manager takes that approach, since I ended up having two apps installed when I purchased the premium version, and I continued to use the original version after installing the premium one, and was able to access the enhanced (premium) capabilities.

I don't know how ROM Manager implements this, but it seems possible that it supplies a ContentProvider that can be accessed by the free app once the license app has been installed. This could allow the free app to know that the user had installed the license, which in turn could trigger the enablement of the app's premium features.

This approach would allow the user to upgrade without losing any of the content created by the user in the free app.

Just an idea; not sure if it is a technically good or secure approach. If anyone has experience or thoughts regarding this approach, I'd be interested to hear them.

  • 1
    Well, yes that's another valid approach. I read about it and what it does the "premium app" is just to provide a Content Provider: developer.android.com/guide/topics/providers/… and when the "non-premium" app detect that there's that provider it will enable all the other features. – SERPRO Apr 2 '12 at 9:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.