Take the 2-minute tour ×

I have an application that I'm going to publish to the Android market. I'm planning on releasing a paid-for version and a free version with restricted feature set.

During development I've ensured I can turn features on and off by setting a few constant values, so I only have one codebase.

However, now I come to release I'm not clear if I need to make a copy of the app with a different package name for the free version.

The documentation on how the market works say updates will only be recognised if they have the same package name and are signed with the same key. Does this mean it's OK to release two applications with the same package name but signed with different keys, or will this break something? Or is it just bad practice?

share|improve this question
add comment

3 Answers

up vote 10 down vote accepted

Yes, you need to make to use two different package names for the free and paid version. Fortunately, its really easy, right click your App Project in Eclipse -> Android Tools -> Rename Application Package.

share|improve this answer
Wow, that is easy! I wish I'd known about that one before - doing it by hand is painful! –  teedyay Mar 7 '11 at 13:55
Is it possible to use this tool with command line so I can run it before my ANT build script ? –  Muzikant Jun 12 '11 at 6:32
add comment

Yes if you want to have 2 different versions they must have different package names. I have free and pay versions and it is a pain to manage this and both code bases.

Another option though is to just have a "key" app that you can sell that will unlock features in the free version.

share|improve this answer
add comment

You do have to use different package names as explained, but you don't have to duplicate much code, even if you use separate projects. What I did when I decided to release two versions is to make my original a library project, and create separate projects that referenced it. Reference (Assumes Eclipse) The only thing you have to copy is the manifest. Anything else with changes you can simply extend your original class and overwrite what you need to.

share|improve this answer
add comment

Your Answer


