I have installed a couple of free apps on my Android phone and then later "upgraded" to the paid full version. My first instincts for doing the same would be to create two apps with the same package name so that installing one overwrites the other, but apps in the Market must be unique by package name.

What are some patterns and best practices for sharing code and resources for free and paid versions of the same app and any naming conventions or project structures that work for this scenario as well?