I'm just going through a similar exercise in order to build lite and
pro versions of the app from a single codebase.

I'm using an Ant script derived from this one:
http://ulrichscheller.blogspot.com/2009/10/android-deploying-multiple-targets-from.html
which converts the project from one target to the other.

The Ant script only does three things:

(1) Copies the resources which are different for the two targets into
the /res directory

(2) Changes import com.company.product.lite.R; into  import
com.company.product.pro.R; (or vice-versa) in all the Java files

(3) Changes the package name in the manifest from
com.company.product.lite into com.company.product.pro

I'm suprised to find that I can leave the package name
(com.company.product) unchanged in the java files, and my pro and lite
builds can coexist on a device. I had expected a clash of classnames
there.

I only have a couple of wrinkles remaining. I need to use a different
name (or maybe a different authority?) for my provider for the two
variants:
    <provider android:name="com.company.product.MyProvider"
            android:authorities="com.company.product.MyProvider"
    />
since having that identical in both apps stops the second one loading.

And, because I am using the same mime type and so on in my intents,
having both apps installed means that most activity transitions go
through a chooser asking the user which version of the app to use.
That may be acceptable, because I don't expect both apps to be
installed for long over the lite->pro upgrade.

Richard


On Jan 9, 12:41 am, Lance Nanek <[email protected]> wrote:
> I managed to do it without updating the imports, but it is pretty
> nasty besides that.
>
> I have two projects, lets call them A and B. All the directories in
> project B are actually just SVN externals that reference the
> directories of project A:http://svnbook.red-bean.com/en/1.0/ch07s03.html
>
> Therefore the only thing different about project B, when it is fully
> up to date with the repository, is the AndroidManifest.xml. That's a
> duplicate except that I change the package name.
>
> The code can tell the package being used via Context#getPackageName.
> Project B has project A in its Java build path in Eclipse, so all the
> R class imports written for project A work even in project B.
> Occasionally there is a random build error and I have to remove
> project A from the build path and put it back, or open and close the
> project.
>
> I saw someone mention that aapt can be used manually to generate the R
> class in a different package than normal. So maybe a cleaner way to do
> this, without giving up and doing the change all the imports thing
> each build, is to use that to generate an R class for B that is in A's
> package. That would remove the scary hack of having project B access
> its own resources via project A's R class, which just happens to be
> generated with the same values because all the files are the same.
>
> On Jan 8, 6:01 pm, BrianS <[email protected]> wrote:
>
> > Hi--
>
> > I need to be able to easily create different "flavors" on an app, each
> > with a unique package name so that they can coexist on the same
> > device. Is there a simple way this can be done, which doesn't require
> > manually updating all the imports and other references to the package
> > name each time I change it?
>
> > Thanks much!
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to