I'll give a little more detail. The Impl class is supposed to be one of 
several pure-java implementations of the service in Main that I might drop 
in. The purpose of Main is to abstract all Android-specific code away from 
this implementation. In particular, the service in Main *already* has an 
AIDL interface, so putting on in Impl would just be silly.

On Tuesday, October 2, 2012 3:47:52 PM UTC-4, Lindley wrote:
>
> 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]> 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] 
>> > 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 
>>
>

-- 
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