For a variety of reasons, most notably because the plug-in portion is not 
supposed to be Android-specific, I don't want to use AIDL here.

Static linking is a fallback option. I don't like it but I'll do it if 
that's the only way. There really ought to be a cleaner fix for this.

On Tuesday, October 2, 2012 3:31:58 PM UTC-4, Kristopher Micinski wrote:
>
> 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 <[email protected] <javascript:>> 
> 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 
> > [email protected]<javascript:> 
> > To unsubscribe from this group, send email to 
> > [email protected] <javascript:> 
> > 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 [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