i'm  asked to do the same thing~. so i'm wondering if you have already 
stopped working on this issue

在 2011年8月13日星期六UTC+8下午3时59分32秒,Gardner!!写道:
>
> This is really helpful! I am going to work with dalvik-server first 
> because it seems to be the most sensible long-term approach. I'll 
> submit a pull request when I have it working! :) 
>
> -g 
>
> On Aug 11, 9:09 pm, Kohsuke Kawaguchi <[email protected]> 
> wrote: 
> > On 08/10/2011 09:34 PM, Gardner!! wrote: 
> > 
> > > I am very excited about this as well. It would be possible to reduce 
> > > the complexity of our testing system 3 fold. 
> > 
> > > Initially I was focused very much so on the client ClassLoader 
> > > implementation (that runs on the Android device in the slave.jar). By 
> > > modifying the RemoteClassLoader to check for java.vm.name == "Dalvik" 
> > > and adding the code directly to the RemoteClassLoader we could allow 
> > > for _any_ class to be fed into the Slave jar that is running on the 
> > > Android device to be converted by the dex tool, on the Android device, 
> > > in a procrastinated manner. The problem with procrastination is that 
> > > it causes work work to be duplicated always and forever. In this case 
> > > the work is being delegated and duplicated to and on an already 
> > > overloaded micro-platform. 
> > 
> > I was under the assumption that a jar file is a minimum unit of 
> > conversion, not a class file, and hence my suggestion. But I think you 
> > are saying that is not the case. 
> > 
> > (OTOH, when I look at the DexClassLoader and DexFile source code, it 
> > seems to me that my assumption is correct, and if we create one dex per 
> > one class, I'm not sure if Dalvik can cope with that many DEX files.) 
> > 
> > If "one class at a time" lazy conversion is possible, I think that's a 
> > very good starting point. For one, that's how all the slaves work, and 
> > it can be iteratively improved from there, for example to push the 
> > conversion to the server, or cache the result. 
> > 
> > Do you have some code that shows how to convert one class and load it 
> > into Android? Some kind of PoC/sandbox that lets other people (including 
> > me) to kick the tire? 
> > 
> > > Given this, It may be acceptable to dex _every_ jar if an "Android 
> > > Client Plugin" is installed. This would bloat the client jar for ALL 
> > > platforms but would exponentially reduce the work load that is pushed 
> > > to Android clients over time. 
> > 
> > Yes. Or a fairly straight-forward optimization from there is to 
> > translate a regular jar to a dexed jar on the fly (with some kind of 
> > caching) if we know we are talking to Android slave. 
> > 
> >  > That being the case, what needs to 
> > 
> > > happen now is a discovery of how extra slave jars/classes are 
> > > maintained and a test of dexing all of them and then using the 
> > > existing RemoteClassLoader that all slave jars use to get on par with 
> > > the master to load the dexed jars from the existing slave jar. 
> > 
> > The general workflow in the current RemoteClassLoader implementation is: 
> > 
> >   1. slave tries to load "a.b.c.Foo" class 
> >   2. RemoteClassLoader requests the master to send it the byte[] 
> >      for a/b/c/Foo.class 
> >   3. master sends it to the client 
> >   4. slave injects that into VM via ClassLoader.defineClass 
> > 
> > so the whole scheme doesn't involve the notion of jar file at all. 
> > 
> > For Android slaves, the workflow needs to be: 
> > 
> >   1. slave tries to load "a.b.c.Foo" class 
> >   2. RemoteClassLoader requests the master to send the 
> >      jar file that contains a.b.c.Foo 
> >   3. master creates a dex file for the jar 
> >   4. byte[] gets sent 
> >   4. slave opens this dex file via DexFile and loads the class 
> > 
> > > Kohsuke, can you give any insight to where these classes are stored 
> > > and marked as being "required" for the slave to have? 
> > 
> > I've pushed 'dalvik-server' and 'dalvik-client' branches inhttp://
> github.com/jenkinsci/remoting 
> > 
> > They contain the pseudo-code that I think will make it work. The reason 
> > there are two branches, as opposed to one, is simply because I was lazy; 
> > the client side that runs on Dalvik needs to use some Dalvik-specific 
> > classes, so that portion needs to be isolated somewhat so that it won't 
> > cause UnsatisfiedLinkError when run on JavaVM. 
> > 
> > I'll leave that exercise to you :-) 
> > 
> > I think it'll be also easier to create a small stand-alone JavaSE 
> > program that initiates the channel pair, as opposed to do this 
> > experiment with full-blown Jenkins. 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > > Thanks, 
> > >    Gardner 
> > 
> > > On Aug 10, 4:10 pm, Kohsuke Kawaguchi<[email protected]>  wrote: 
> > >>  This is awesome! 
> > 
> > >>  At runtime, master has all the jars that constitute the Jenkins code 
> > >>  (including all the plugins deployed), so it's relatively easy to 
> > >>  convert each jar file to a dex file and copy it over the wire to 
> > >>  Dalvik. This assumes that Dalvik is resource-rich enough to be able 
> to 
> > >>  load them all (or smart enough to only load classes that are 
> actually 
> > >>  used), but it seems like the good first step to shoot for. 
> > 
> > >>  How do you programmatically load a dex file into running Dalvik VM? 
> > >>  Does it use the same java.lang.ClassLoader, or does it have another 
> > >>  class that does it? 
> > 
> > >>  2011/8/10 Gardner!!<[email protected]>: 
> > 
> > >>  >  Hello, 
> > >>  >    I am tasked with testing our code across a growing number of 
> real 
> > >>  >  Android devices. During my discovery process I converted the 
> slave jar 
> > >>  >  into Dalvik byte code using the dex tool. I then included this 
> jar in 
> > >>  >  a regular Android application that I had created using Eclipse. 
> But I 
> > >>  >  ran into trouble when the Slave jar attempted to load remote 
> classes 
> > >>  >  from the master. I have scratched up a wiki document with a few 
> links 
> > >>  >  to information related to getting this working. 
> > >>  >
> https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Slave+on+DalvikVM... 
> > 
> > >>  >  I guess the next logical step is to start the custom ClassLoader. 
> > >>  >  Would anyone else be interested in this? 
> > 
> > >>  >  Thanks, 
> > >>  >    Gardner 
> > 
> > >>  -- 
> > >>  Kohsuke Kawaguchi 
> > 
> > -- 
> > Kohsuke Kawaguchi | CloudBees, Inc. |http://cloudbees.com/

Reply via email to