Re: [android-developers] Exclude dependencies from apk?
So instead of doing this (ClassLoaders being bad...), I would use an
AIDL service stub for the methods you needed...
Alternatively, I would suggest you look at using an Android library
project, if you can statically link.
What kinds of things do you need.
Multiple functional looks very much like you might want a single app,
and not a collection of plugins.
kris
On Tue, Oct 2, 2012 at 3:00 PM, Lindley <lindleyf@gmail.com> wrote:
> I am using Eclipse with the ADT plugin, as well as ant.
>
> I am trying to design a plug-in architecture. I have three projects, call
> them Main, Plugin, and Impl. Main builds a service apk, Plugin is an Android
> Library. Plugin just defines two classes, AbstractPlugin and PluginFactory.
> AbstractPlugin is an interface, and PluginFactory does what is necessary to
> set up a DexClassLoader and instantiate by reflection a class from Impl
> which implements that interface. Main uses the resulting AbstractPlugin in
> some way.
>
> Therefore, the compile-time dependencies are Main -> Plugin and Impl ->
> Plugin. There is no compile time dependency between Main and Impl, since the
> class in Impl is instantiated by reflection. Therefore, when the Main.apk is
> built, classes from Plugin are included but classes from Impl are not.
>
> The problem is then how to get those dex'd classes in Impl into the phone in
> a place where DexClassLoader can get at them.
>
> There are two options. First, Impl can be built as an Android library, then
> the resulting classes.jar can be manually dex'd with dx, and then the
> resulting classes-dex.jar can be pushed into some predetermined directory on
> the phone. This works, but I am not entirely thrilled with it. For one
> thing, it prevents Impl from having any resources of its own, only Java
> code.
>
> Second, Impl can be built as an apk which just happens to contain neither a
> service nor an activity. This can be installed normally, and then
> PluginFactory can get the path to the apk from the PackageManager to pass it
> to DexClassLoader. The problem with this approach is that in each
> configuration I have tried so far, Impl.apk ends up pulling in the classes
> from Plugin as well since there is a compile time dependency. Therefore when
> DexClassLoader tries to resolve something, it realizes there are now two
> different AbstractPlugin implementations in the system (which are really the
> same one in two different apks), and bails out. What I would like to do is
> keep Plugin on the classpath during the build of Impl, but exclude its
> classes from the apk. Is there a way to set this up either in Eclipse or in
> Ant directly? (What about in maven?)
>
> This does not necessarily solve the resource problem since the active
> Context in Main would not necessarily know about the resources in Impl if it
> had any, but it would be a start.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to android-developers@googlegroups.com
> To unsubscribe from this group, send email to
> android-developers+unsubscribe@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home